~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Robert Collins
  • Date: 2005-10-17 21:57:32 UTC
  • mto: This revision was merged to the branch mainline in revision 1462.
  • Revision ID: robertc@robertcollins.net-20051017215732-08f487800e726748
Allow creation of testaments from uncommitted data, and use that to get signatures before committing revisions.

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.config import config_dir, _get_user_id
34
 
from bzrlib.errors import BzrError
 
33
from bzrlib.errors import BzrError, NotBranchError
35
34
from bzrlib.trace import mutter
36
35
 
37
36
 
289
288
        return -time.timezone
290
289
 
291
290
    
292
 
def format_date(t, offset=0, timezone='original'):
 
291
def format_date(t, offset=0, timezone='original', date_fmt=None, 
 
292
                show_offset=True):
293
293
    ## TODO: Perhaps a global option to use either universal or local time?
294
294
    ## Or perhaps just let people set $TZ?
295
295
    assert isinstance(t, float)
307
307
    else:
308
308
        raise BzrError("unsupported timezone format %r" % timezone,
309
309
                       ['options are "utc", "original", "local"'])
310
 
 
311
 
    return (time.strftime("%a %Y-%m-%d %H:%M:%S", tt)
312
 
            + ' %+03d%02d' % (offset / 3600, (offset / 60) % 60))
 
310
    if date_fmt is None:
 
311
        date_fmt = "%a %Y-%m-%d %H:%M:%S"
 
312
    if show_offset:
 
313
        offset_str = ' %+03d%02d' % (offset / 3600, (offset / 60) % 60)
 
314
    else:
 
315
        offset_str = ''
 
316
    return (time.strftime(date_fmt, tt) +  offset_str)
313
317
 
314
318
 
315
319
def compact_date(when):
438
442
            return True
439
443
    else:
440
444
        return False
 
445
 
 
446
 
 
447
def relpath(base, path):
 
448
    """Return path relative to base, or raise exception.
 
449
 
 
450
    The path may be either an absolute path or a path relative to the
 
451
    current working directory.
 
452
 
 
453
    os.path.commonprefix (python2.4) has a bad bug that it works just
 
454
    on string prefixes, assuming that '/u' is a prefix of '/u2'.  This
 
455
    avoids that problem."""
 
456
    rp = os.path.abspath(path)
 
457
 
 
458
    s = []
 
459
    head = rp
 
460
    while len(head) >= len(base):
 
461
        if head == base:
 
462
            break
 
463
        head, tail = os.path.split(head)
 
464
        if tail:
 
465
            s.insert(0, tail)
 
466
    else:
 
467
        # XXX This should raise a NotChildPath exception, as its not tied
 
468
        # to branch anymore.
 
469
        raise NotBranchError("path %r is not within branch %r" % (rp, base))
 
470
 
 
471
    return os.sep.join(s)