/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/osutils.py

  • Committer: John Arbash Meinel
  • Date: 2006-09-15 00:44:57 UTC
  • mfrom: (2009 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2050.
  • Revision ID: john@arbash-meinel.com-20060915004457-902cec0526a39337
[merge] bzr.dev 2009

Show diffs side-by-side

added added

removed removed

Lines of Context:
84
84
    Windows."""
85
85
    # TODO: I'm not really sure this is the best format either.x
86
86
    global _QUOTE_RE
87
 
    if _QUOTE_RE == None:
 
87
    if _QUOTE_RE is None:
88
88
        _QUOTE_RE = re.compile(r'([^a-zA-Z0-9.,:/\\_~-])')
89
89
        
90
90
    if _QUOTE_RE.search(f):
150
150
if lexists is None:
151
151
    def lexists(f):
152
152
        try:
153
 
            if hasattr(os, 'lstat'):
 
153
            if getattr(os, 'lstat') is not None:
154
154
                os.lstat(f)
155
155
            else:
156
156
                os.stat(f)
190
190
        pass
191
191
    except IOError, e:
192
192
        # RBC 20060103 abstraction leakage: the paramiko SFTP clients rename
193
 
        # function raises an IOError with errno == None when a rename fails.
 
193
        # function raises an IOError with errno is None when a rename fails.
194
194
        # This then gets caught here.
195
195
        if e.errno not in (None, errno.ENOENT, errno.ENOTDIR):
196
196
            raise
197
197
    except Exception, e:
198
 
        if (not hasattr(e, 'errno') 
 
198
        if (getattr(e, 'errno', None) is None
199
199
            or e.errno not in (errno.ENOENT, errno.ENOTDIR)):
200
200
            raise
201
201
    else:
370
370
 
371
371
 
372
372
def normalizepath(f):
373
 
    if hasattr(os.path, 'realpath'):
 
373
    if getattr(os.path, 'realpath', None) is not None:
374
374
        F = realpath
375
375
    else:
376
376
        F = abspath
505
505
 
506
506
 
507
507
def sha_file(f):
508
 
    if hasattr(f, 'tell'):
 
508
    if getattr(f, 'tell', None) is not None:
509
509
        assert f.tell() == 0
510
510
    s = sha.new()
511
511
    BUFSIZE = 128<<10
555
555
def local_time_offset(t=None):
556
556
    """Return offset of local zone from GMT, either at present or at time t."""
557
557
    # python2.3 localtime() can't take None
558
 
    if t == None:
 
558
    if t is None:
559
559
        t = time.time()
560
560
        
561
561
    if time.localtime(t).tm_isdst and time.daylight:
574
574
        tt = time.gmtime(t)
575
575
        offset = 0
576
576
    elif timezone == 'original':
577
 
        if offset == None:
 
577
        if offset is None:
578
578
            offset = 0
579
579
        tt = time.gmtime(t + offset)
580
580
    elif timezone == 'local':
724
724
def joinpath(p):
725
725
    assert isinstance(p, list)
726
726
    for f in p:
727
 
        if (f == '..') or (f == None) or (f == ''):
 
727
        if (f == '..') or (f is None) or (f == ''):
728
728
            raise BzrError("sorry, %r not allowed in path" % f)
729
729
    return pathjoin(*p)
730
730
 
774
774
 
775
775
 
776
776
def has_symlinks():
777
 
    if hasattr(os, 'symlink'):
 
777
    if getattr(os, 'symlink', None) is not None:
778
778
        return True
779
779
    else:
780
780
        return False
915
915
 
916
916
    return width
917
917
 
 
918
 
918
919
def supports_executable():
919
920
    return sys.platform != "win32"
920
921
 
921
922
 
 
923
def set_or_unset_env(env_variable, value):
 
924
    """Modify the environment, setting or removing the env_variable.
 
925
 
 
926
    :param env_variable: The environment variable in question
 
927
    :param value: The value to set the environment to. If None, then
 
928
        the variable will be removed.
 
929
    :return: The original value of the environment variable.
 
930
    """
 
931
    orig_val = os.environ.get(env_variable)
 
932
    if value is None:
 
933
        if orig_val is not None:
 
934
            del os.environ[env_variable]
 
935
    else:
 
936
        if isinstance(value, unicode):
 
937
            value = value.encode(bzrlib.user_encoding)
 
938
        os.environ[env_variable] = value
 
939
    return orig_val
 
940
 
 
941
 
922
942
_validWin32PathRE = re.compile(r'^([A-Za-z]:[/\\])?[^:<>*"?\|]*$')
923
943
 
924
944
 
1048
1068
    key_a = path_prefix_key(path_a)
1049
1069
    key_b = path_prefix_key(path_b)
1050
1070
    return cmp(key_a, key_b)
 
1071
 
 
1072
 
 
1073
_cached_user_encoding = None
 
1074
 
 
1075
 
 
1076
def get_user_encoding():
 
1077
    """Find out what the preferred user encoding is.
 
1078
 
 
1079
    This is generally the encoding that is used for command line parameters
 
1080
    and file contents. This may be different from the terminal encoding
 
1081
    or the filesystem encoding.
 
1082
 
 
1083
    :return: A string defining the preferred user encoding
 
1084
    """
 
1085
    global _cached_user_encoding
 
1086
    if _cached_user_encoding is not None:
 
1087
        return _cached_user_encoding
 
1088
 
 
1089
    if sys.platform == 'darwin':
 
1090
        # work around egregious python 2.4 bug
 
1091
        sys.platform = 'posix'
 
1092
        try:
 
1093
            import locale
 
1094
        finally:
 
1095
            sys.platform = 'darwin'
 
1096
    else:
 
1097
        import locale
 
1098
 
 
1099
    try:
 
1100
        _cached_user_encoding = locale.getpreferredencoding()
 
1101
    except locale.Error, e:
 
1102
        sys.stderr.write('bzr: warning: %s\n'
 
1103
                         '  Could not determine what text encoding to use.\n'
 
1104
                         '  This error usually means your Python interpreter\n'
 
1105
                         '  doesn\'t support the locale set by $LANG (%s)\n'
 
1106
                         "  Continuing with ascii encoding.\n"
 
1107
                         % (e, os.environ.get('LANG')))
 
1108
 
 
1109
    if _cached_user_encoding is None:
 
1110
        _cached_user_encoding = 'ascii'
 
1111
    return _cached_user_encoding