~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: Robert Collins
  • Date: 2006-03-28 14:29:13 UTC
  • mto: (1626.2.1 integration)
  • mto: This revision was merged to the branch mainline in revision 1628.
  • Revision ID: robertc@robertcollins.net-20060328142913-ac5afb37075719c6
Convert log to use the new tsort.merge_sort routine.

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
                           BzrBadParameterNotUnicode,
36
36
                           NoSuchFile,
37
37
                           PathNotChild,
38
 
                           IllegalPath,
39
38
                           )
40
39
from bzrlib.trace import mutter
41
40
 
182
181
dirname = os.path.dirname
183
182
basename = os.path.basename
184
183
 
185
 
MIN_ABS_PATHLENGTH = 1
186
 
 
187
184
if os.name == "posix":
188
185
    # In Python 2.4.2 and older, os.path.abspath and os.path.realpath
189
186
    # choke on a Unicode string containing a relative path if
220
217
    def rename(old, new):
221
218
        fancy_rename(old, new, rename_func=os.rename, unlink_func=os.unlink)
222
219
 
223
 
    MIN_ABS_PATHLENGTH = 3
224
220
 
225
221
def normalizepath(f):
226
222
    if hasattr(os.path, 'realpath'):
534
530
 
535
531
def split_lines(s):
536
532
    """Split s into lines, but without removing the newline characters."""
537
 
    lines = s.split('\n')
538
 
    result = [line + '\n' for line in lines[:-1]]
539
 
    if lines[-1]:
540
 
        result.append(lines[-1])
541
 
    return result
 
533
    return StringIO(s).readlines()
542
534
 
543
535
 
544
536
def hardlinks_good():
557
549
            raise
558
550
        copyfile(src, dest)
559
551
 
560
 
def delete_any(full_path):
561
 
    """Delete a file or directory."""
562
 
    try:
563
 
        os.unlink(full_path)
564
 
    except OSError, e:
565
 
    # We may be renaming a dangling inventory id
566
 
        if e.errno not in (errno.EISDIR, errno.EACCES, errno.EPERM):
567
 
            raise
568
 
        os.rmdir(full_path)
569
 
 
570
552
 
571
553
def has_symlinks():
572
554
    if hasattr(os, 'symlink'):
601
583
 
602
584
    os.path.commonprefix (python2.4) has a bad bug that it works just
603
585
    on string prefixes, assuming that '/u' is a prefix of '/u2'.  This
604
 
    avoids that problem.
605
 
    """
606
 
 
607
 
    assert len(base) >= MIN_ABS_PATHLENGTH, ('Length of base must be equal or'
608
 
        ' exceed the platform minimum length (which is %d)' % 
609
 
        MIN_ABS_PATHLENGTH)
 
586
    avoids that problem."""
610
587
    rp = abspath(path)
611
588
 
612
589
    s = []
659
636
 
660
637
def supports_executable():
661
638
    return sys.platform != "win32"
662
 
 
663
 
 
664
 
def strip_trailing_slash(path):
665
 
    """Strip trailing slash, except for root paths.
666
 
    The definition of 'root path' is platform-dependent.
667
 
    """
668
 
    if len(path) != MIN_ABS_PATHLENGTH and path[-1] == '/':
669
 
        return path[:-1]
670
 
    else:
671
 
        return path
672
 
 
673
 
 
674
 
_validWin32PathRE = re.compile(r'^([A-Za-z]:[/\\])?[^:<>*"?\|]*$')
675
 
 
676
 
 
677
 
def check_legal_path(path):
678
 
    """Check whether the supplied path is legal.  
679
 
    This is only required on Windows, so we don't test on other platforms
680
 
    right now.
681
 
    """
682
 
    if sys.platform != "win32":
683
 
        return
684
 
    if _validWin32PathRE.match(path) is None:
685
 
        raise IllegalPath(path)