~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: mbp at sourcefrog
  • Date: 2005-03-29 02:31:34 UTC
  • Revision ID: mbp@sourcefrog.net-20050329023134-2d1eb96c55831937
check size and sha1 of files retrieved from the tree

Show diffs side-by-side

added added

removed removed

Lines of Context:
86
86
    ## XXX: Could alternatively read /proc/sys/kernel/random/uuid on
87
87
    ## Linux, but we need something portable for other systems;
88
88
    ## preferably an implementation in Python.
89
 
    bailout('uuids not allowed!')
90
 
    return chomp(os.popen('uuidgen').readline())
 
89
    try:
 
90
        return chomp(file('/proc/sys/kernel/random/uuid').readline())
 
91
    except IOError:
 
92
        return chomp(os.popen('uuidgen').readline())
 
93
 
91
94
 
92
95
def chomp(s):
93
96
    if s and (s[-1] == '\n'):
114
117
 
115
118
 
116
119
 
 
120
def fingerprint_file(f):
 
121
    import sha
 
122
    s = sha.new()
 
123
    b = f.read()
 
124
    s.update(b)
 
125
    size = len(b)
 
126
    return {'size': size,
 
127
            'sha1': s.hexdigest()}
 
128
 
 
129
 
 
130
 
117
131
def username():
118
132
    """Return email-style username.
119
133
 
169
183
def compare_files(a, b):
170
184
    """Returns true if equal in contents"""
171
185
    # TODO: don't read the whole thing in one go.
172
 
    result = a.read() == b.read()
173
 
    return result
 
186
    BUFSIZE = 4096
 
187
    while True:
 
188
        ai = a.read(BUFSIZE)
 
189
        bi = b.read(BUFSIZE)
 
190
        if ai != bi:
 
191
            return False
 
192
        if ai == '':
 
193
            return True
174
194
 
175
195
 
176
196
 
177
197
def local_time_offset(t=None):
178
198
    """Return offset of local zone from GMT, either at present or at time t."""
 
199
    # python2.3 localtime() can't take None
 
200
    if t is None:
 
201
        t = time.time()
 
202
        
179
203
    if time.localtime(t).tm_isdst and time.daylight:
180
204
        return -time.altzone
181
205
    else: