~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Martin Pool
  • Date: 2005-05-11 01:03:22 UTC
  • Revision ID: mbp@sourcefrog.net-20050511010322-54654b917bbce05f
- Notes on library dependencies

Show diffs side-by-side

added added

removed removed

Lines of Context:
16
16
# along with this program; if not, write to the Free Software
17
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
18
 
19
 
import os, types, re, time, errno
 
19
import os, types, re, time, errno, sys
20
20
from stat import S_ISREG, S_ISDIR, S_ISLNK, ST_MODE, ST_SIZE
21
21
 
22
22
from errors import bailout, BzrError
84
84
 
85
85
def uuid():
86
86
    """Return a new UUID"""
87
 
    
88
 
    ## XXX: Could alternatively read /proc/sys/kernel/random/uuid on
89
 
    ## Linux, but we need something portable for other systems;
90
 
    ## preferably an implementation in Python.
91
87
    try:
92
 
        return chomp(file('/proc/sys/kernel/random/uuid').readline())
 
88
        return file('/proc/sys/kernel/random/uuid').readline().rstrip('\n')
93
89
    except IOError:
94
90
        return chomp(os.popen('uuidgen').readline())
95
91
 
96
92
 
97
 
def chomp(s):
98
 
    if s and (s[-1] == '\n'):
99
 
        return s[:-1]
100
 
    else:
101
 
        return s
102
 
 
103
 
 
104
93
def sha_file(f):
105
94
    import sha
106
 
    ## TODO: Maybe read in chunks to handle big files
107
95
    if hasattr(f, 'tell'):
108
96
        assert f.tell() == 0
109
97
    s = sha.new()
110
 
    s.update(f.read())
 
98
    BUFSIZE = 128<<10
 
99
    while True:
 
100
        b = f.read(BUFSIZE)
 
101
        if not b:
 
102
            break
 
103
        s.update(b)
111
104
    return s.hexdigest()
112
105
 
113
106
 
234
227
 
235
228
def compare_files(a, b):
236
229
    """Returns true if equal in contents"""
237
 
    # TODO: don't read the whole thing in one go.
238
230
    BUFSIZE = 4096
239
231
    while True:
240
232
        ai = a.read(BUFSIZE)
293
285
 
294
286
if hasattr(os, 'urandom'): # python 2.4 and later
295
287
    rand_bytes = os.urandom
 
288
elif sys.platform == 'linux2':
 
289
    rand_bytes = file('/dev/urandom', 'rb').read
296
290
else:
297
 
    # FIXME: No good on non-Linux
298
 
    _rand_file = file('/dev/urandom', 'rb')
299
 
    rand_bytes = _rand_file.read
 
291
    # not well seeded, but better than nothing
 
292
    def rand_bytes(n):
 
293
        import random
 
294
        s = ''
 
295
        while n:
 
296
            s += chr(random.randint(0, 255))
 
297
            n -= 1
 
298
        return s
300
299
 
301
300
 
302
301
## TODO: We could later have path objects that remember their list