~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 11:56:54 UTC
  • mfrom: (1185.16.59)
  • Revision ID: robertc@robertcollins.net-20051017115654-662239e1587524a8
mergeĀ fromĀ martin.

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, PathNotChild
 
33
from bzrlib.errors import BzrError, NotBranchError
34
34
from bzrlib.trace import mutter
35
35
 
36
36
 
119
119
        return F(f)
120
120
    else:
121
121
        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
 
122
    
138
123
 
139
124
def backup_file(fn):
140
125
    """Copy a file to a backup.
240
225
 
241
226
def pumpfile(fromfile, tofile):
242
227
    """Copy contents of one file to another."""
243
 
    BUFSIZE = 32768
244
 
    while True:
245
 
        b = fromfile.read(BUFSIZE)
246
 
        if not b:
247
 
            break
248
 
        tofile.write(b)
 
228
    tofile.write(fromfile.read())
249
229
 
250
230
 
251
231
def sha_file(f):
473
453
    os.path.commonprefix (python2.4) has a bad bug that it works just
474
454
    on string prefixes, assuming that '/u' is a prefix of '/u2'.  This
475
455
    avoids that problem."""
476
 
    rp = abspath(path)
 
456
    rp = os.path.abspath(path)
477
457
 
478
458
    s = []
479
459
    head = rp
486
466
    else:
487
467
        # XXX This should raise a NotChildPath exception, as its not tied
488
468
        # to branch anymore.
489
 
        raise PathNotChild(rp, base)
 
469
        raise NotBranchError("path %r is not within branch %r" % (rp, base))
490
470
 
491
471
    return os.sep.join(s)
492
 
 
493
 
 
494
 
 
495
 
def terminal_width():
496
 
    """Return estimated terminal width."""
497
 
 
498
 
    # TODO: Do something smart on Windows?
499
 
 
500
 
    # TODO: Is there anything that gets a better update when the window
501
 
    # is resized while the program is running? We could use the Python termcap
502
 
    # library.
503
 
    try:
504
 
        return int(os.environ['COLUMNS'])
505
 
    except (IndexError, KeyError, ValueError):
506
 
        return 80