~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Robert Collins
  • Date: 2005-09-26 08:56:15 UTC
  • mto: (1092.3.4)
  • mto: This revision was merged to the branch mainline in revision 1390.
  • Revision ID: robertc@robertcollins.net-20050926085615-99b8fb35f41b541d
massive patch from Alexander Belchenko - many PEP8 fixes, removes unused function uuid

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# Bazaar-NG -- distributed version control
2
 
 
 
2
#
3
3
# Copyright (C) 2005 by Canonical Ltd
4
 
 
 
4
#
5
5
# This program is free software; you can redistribute it and/or modify
6
6
# it under the terms of the GNU General Public License as published by
7
7
# the Free Software Foundation; either version 2 of the License, or
8
8
# (at your option) any later version.
9
 
 
 
9
#
10
10
# This program is distributed in the hope that it will be useful,
11
11
# but WITHOUT ANY WARRANTY; without even the implied warranty of
12
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
13
# GNU General Public License for more details.
14
 
 
 
14
#
15
15
# You should have received a copy of the GNU General Public License
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, sys
20
19
from stat import (S_ISREG, S_ISDIR, S_ISLNK, ST_MODE, ST_SIZE,
21
 
        S_ISCHR, S_ISBLK, S_ISFIFO, S_ISSOCK)
 
20
                  S_ISCHR, S_ISBLK, S_ISFIFO, S_ISSOCK)
 
21
import errno
 
22
import os
 
23
import re
 
24
import sha
 
25
import sys
 
26
import time
 
27
import types
22
28
 
 
29
import bzrlib
23
30
from bzrlib.errors import BzrError
24
31
from bzrlib.trace import mutter
25
 
import bzrlib
 
32
 
26
33
 
27
34
def make_readonly(filename):
28
35
    """Make a filename read-only."""
29
 
    # TODO: probably needs to be fixed for windows
30
36
    mod = os.stat(filename).st_mode
31
37
    mod = mod & 0777555
32
38
    os.chmod(filename, mod)
49
55
    # TODO: I'm not really sure this is the best format either.x
50
56
    global _QUOTE_RE
51
57
    if _QUOTE_RE == None:
52
 
        _QUOTE_RE = re.compile(r'([^a-zA-Z0-9.,:/_~-])')
 
58
        _QUOTE_RE = re.compile(r'([^a-zA-Z0-9.,:/\\_~-])')
53
59
        
54
60
    if _QUOTE_RE.search(f):
55
61
        return '"' + f + '"'
88
94
        raise BzrError('invalid file kind %r' % kind)
89
95
 
90
96
 
91
 
 
92
97
def backup_file(fn):
93
98
    """Copy a file to a backup.
94
99
 
96
101
 
97
102
    If the file is already a backup, it's not copied.
98
103
    """
99
 
    import os
100
104
    if fn[-1] == '~':
101
105
        return
102
106
    bfn = fn + '~'
166
170
    
167
171
    if dir == '':
168
172
        return True
169
 
    
 
173
 
170
174
    if dir[-1] != os.sep:
171
175
        dir += os.sep
172
 
    
 
176
 
173
177
    return fname.startswith(dir)
174
178
 
175
179
 
187
191
    tofile.write(fromfile.read())
188
192
 
189
193
 
190
 
def uuid():
191
 
    """Return a new UUID"""
192
 
    try:
193
 
        return file('/proc/sys/kernel/random/uuid').readline().rstrip('\n')
194
 
    except IOError:
195
 
        return chomp(os.popen('uuidgen').readline())
196
 
 
197
 
 
198
194
def sha_file(f):
199
 
    import sha
200
195
    if hasattr(f, 'tell'):
201
196
        assert f.tell() == 0
202
197
    s = sha.new()
210
205
 
211
206
 
212
207
def sha_string(f):
213
 
    import sha
214
208
    s = sha.new()
215
209
    s.update(f)
216
210
    return s.hexdigest()
217
211
 
218
212
 
219
 
 
220
213
def fingerprint_file(f):
221
 
    import sha
222
214
    s = sha.new()
223
215
    b = f.read()
224
216
    s.update(b)
234
226
    
235
227
    TODO: Global option --config-dir to override this.
236
228
    """
237
 
    return os.path.expanduser("~/.bzr.conf")
 
229
    return os.path.join(os.path.expanduser("~"), ".bzr.conf")
238
230
 
239
231
 
240
232
def _auto_user_id():
344
336
    if e:
345
337
        m = re.search(r'[\w+.-]+@[\w+.-]+', e)
346
338
        if not m:
347
 
            raise BzrError("%r doesn't seem to contain a reasonable email address" % e)
 
339
            raise BzrError("%r doesn't seem to contain "
 
340
                           "a reasonable email address" % e)
348
341
        return m.group(0)
349
342
 
350
343
    return _auto_user_id()[1]
351
 
    
352
344
 
353
345
 
354
346
def compare_files(a, b):
363
355
            return True
364
356
 
365
357
 
366
 
 
367
358
def local_time_offset(t=None):
368
359
    """Return offset of local zone from GMT, either at present or at time t."""
369
360
    # python2.3 localtime() can't take None
497
488
        if e.errno == errno.ENOENT:
498
489
            return None
499
490
        raise
500
 
 
501