~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

- constraints on revprops
- tests for this

Show diffs side-by-side

added added

removed removed

Lines of Context:
30
30
import types
31
31
 
32
32
import bzrlib
33
 
from bzrlib.errors import BzrError, NotBranchError
 
33
from bzrlib.config import config_dir, _get_user_id
 
34
from bzrlib.errors import BzrError
34
35
from bzrlib.trace import mutter
35
36
 
36
37
 
119
120
        return F(f)
120
121
    else:
121
122
        return os.path.join(F(p), e)
122
 
 
123
 
if os.name == "posix":
124
 
    # In Python 2.4.2 and older, os.path.abspath and os.path.realpath
125
 
    # choke on a Unicode string containing a relative path if
126
 
    # os.getcwd() returns a non-sys.getdefaultencoding()-encoded
127
 
    # string.
128
 
    _fs_enc = sys.getfilesystemencoding()
129
 
    def abspath(path):
130
 
        return os.path.abspath(path.encode(_fs_enc)).decode(_fs_enc)
131
 
    def realpath(path):
132
 
        return os.path.realpath(path.encode(_fs_enc)).decode(_fs_enc)
133
 
else:
134
 
    # We need to use the Unicode-aware os.path.abspath and
135
 
    # os.path.realpath on Windows systems.
136
 
    abspath = os.path.abspath
137
 
    realpath = os.path.realpath
 
123
    
138
124
 
139
125
def backup_file(fn):
140
126
    """Copy a file to a backup.
303
289
        return -time.timezone
304
290
 
305
291
    
306
 
def format_date(t, offset=0, timezone='original', date_fmt=None, 
307
 
                show_offset=True):
 
292
def format_date(t, offset=0, timezone='original'):
308
293
    ## TODO: Perhaps a global option to use either universal or local time?
309
294
    ## Or perhaps just let people set $TZ?
310
295
    assert isinstance(t, float)
322
307
    else:
323
308
        raise BzrError("unsupported timezone format %r" % timezone,
324
309
                       ['options are "utc", "original", "local"'])
325
 
    if date_fmt is None:
326
 
        date_fmt = "%a %Y-%m-%d %H:%M:%S"
327
 
    if show_offset:
328
 
        offset_str = ' %+03d%02d' % (offset / 3600, (offset / 60) % 60)
329
 
    else:
330
 
        offset_str = ''
331
 
    return (time.strftime(date_fmt, tt) +  offset_str)
 
310
 
 
311
    return (time.strftime("%a %Y-%m-%d %H:%M:%S", tt)
 
312
            + ' %+03d%02d' % (offset / 3600, (offset / 60) % 60))
332
313
 
333
314
 
334
315
def compact_date(when):
457
438
            return True
458
439
    else:
459
440
        return False
460
 
 
461
 
 
462
 
def relpath(base, path):
463
 
    """Return path relative to base, or raise exception.
464
 
 
465
 
    The path may be either an absolute path or a path relative to the
466
 
    current working directory.
467
 
 
468
 
    os.path.commonprefix (python2.4) has a bad bug that it works just
469
 
    on string prefixes, assuming that '/u' is a prefix of '/u2'.  This
470
 
    avoids that problem."""
471
 
    rp = abspath(path)
472
 
 
473
 
    s = []
474
 
    head = rp
475
 
    while len(head) >= len(base):
476
 
        if head == base:
477
 
            break
478
 
        head, tail = os.path.split(head)
479
 
        if tail:
480
 
            s.insert(0, tail)
481
 
    else:
482
 
        # XXX This should raise a NotChildPath exception, as its not tied
483
 
        # to branch anymore.
484
 
        raise NotBranchError("path %r is not within branch %r" % (rp, base))
485
 
 
486
 
    return os.sep.join(s)