~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Martin Pool
  • Date: 2005-06-22 09:35:24 UTC
  • Revision ID: mbp@sourcefrog.net-20050622093524-b15e2d374c2ae6ea
- move standard plugins from contrib/plugins to just ./plugins

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
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
 
from errors import bailout, BzrError
23
 
from trace import mutter
 
22
from bzrlib.errors import BzrError
 
23
from bzrlib.trace import mutter
24
24
import bzrlib
25
25
 
26
26
def make_readonly(filename):
56
56
    elif S_ISLNK(mode):
57
57
        return 'symlink'
58
58
    else:
59
 
        raise BzrError("can't handle file kind with mode %o of %r" % (mode, f)) 
 
59
        raise BzrError("can't handle file kind with mode %o of %r" % (mode, f))
 
60
 
 
61
 
 
62
def kind_marker(kind):
 
63
    if kind == 'file':
 
64
        return ''
 
65
    elif kind == 'directory':
 
66
        return '/'
 
67
    elif kind == 'symlink':
 
68
        return '@'
 
69
    else:
 
70
        raise BzrError('invalid file kind %r' % kind)
60
71
 
61
72
 
62
73
 
77
88
        return False
78
89
 
79
90
 
 
91
def is_inside(dir, fname):
 
92
    """True if fname is inside dir.
 
93
    """
 
94
    return os.path.commonprefix([dir, fname]) == dir
 
95
 
 
96
 
 
97
def is_inside_any(dir_list, fname):
 
98
    """True if fname is inside any of given dirs."""
 
99
    # quick scan for perfect match
 
100
    if fname in dir_list:
 
101
        return True
 
102
    
 
103
    for dirname in dir_list:
 
104
        if is_inside(dirname, fname):
 
105
            return True
 
106
    else:
 
107
        return False
 
108
 
 
109
 
80
110
def pumpfile(fromfile, tofile):
81
111
    """Copy contents of one file to another."""
82
112
    tofile.write(fromfile.read())
218
248
    if e:
219
249
        m = _EMAIL_RE.search(e)
220
250
        if not m:
221
 
            bailout("%r doesn't seem to contain a reasonable email address" % e)
 
251
            raise BzrError("%r doesn't seem to contain a reasonable email address" % e)
222
252
        return m.group(0)
223
253
 
224
254
    return _auto_user_id()[1]
266
296
        tt = time.localtime(t)
267
297
        offset = local_time_offset(t)
268
298
    else:
269
 
        bailout("unsupported timezone format %r",
 
299
        raise BzrError("unsupported timezone format %r",
270
300
                ['options are "utc", "original", "local"'])
271
301
 
272
302
    return (time.strftime("%a %Y-%m-%d %H:%M:%S", tt)
315
345
    >>> splitpath('a/../b')
316
346
    Traceback (most recent call last):
317
347
    ...
318
 
    BzrError: ("sorry, '..' not allowed in path", [])
 
348
    BzrError: sorry, '..' not allowed in path
319
349
    """
320
350
    assert isinstance(p, types.StringTypes)
321
351
 
326
356
    rps = []
327
357
    for f in ps:
328
358
        if f == '..':
329
 
            bailout("sorry, %r not allowed in path" % f)
 
359
            raise BzrError("sorry, %r not allowed in path" % f)
330
360
        elif (f == '.') or (f == ''):
331
361
            pass
332
362
        else:
337
367
    assert isinstance(p, list)
338
368
    for f in p:
339
369
        if (f == '..') or (f == None) or (f == ''):
340
 
            bailout("sorry, %r not allowed in path" % f)
 
370
            raise BzrError("sorry, %r not allowed in path" % f)
341
371
    return os.path.join(*p)
342
372
 
343
373
 
352
382
    mutter('external command: %s' % `cmd`)
353
383
    if os.system(cmd):
354
384
        if not ignore_errors:
355
 
            bailout('command failed')
 
385
            raise BzrError('command failed')
356
386