27
26
lazy_import(globals(), """
28
27
from datetime import datetime
30
from ntpath import (abspath as _nt_abspath,
32
normpath as _nt_normpath,
33
realpath as _nt_realpath,
34
splitdrive as _nt_splitdrive,
31
# We need to import both shutil and rmtree as we export the later on posix
32
# and need the former on windows
34
from shutil import rmtree
37
# We need to import both tempfile and mkdtemp as we export the later on posix
38
# and need the former on windows
44
from tempfile import (
40
from tempfile import mkdtemp
49
43
from bzrlib import (
304
298
running python.exe under cmd.exe return capital C:\\
305
299
running win32 python inside a cygwin shell returns lowercase c:\\
307
drive, path = _nt_splitdrive(path)
301
drive, path = ntpath.splitdrive(path)
308
302
return drive.upper() + path
311
305
def _win32_abspath(path):
312
# Real _nt_abspath doesn't have a problem with a unicode cwd
313
return _win32_fixdrive(_nt_abspath(unicode(path)).replace('\\', '/'))
306
# Real ntpath.abspath doesn't have a problem with a unicode cwd
307
return _win32_fixdrive(ntpath.abspath(unicode(path)).replace('\\', '/'))
316
310
def _win98_abspath(path):
327
321
# /path => C:/path
328
322
path = unicode(path)
329
323
# check for absolute path
330
drive = _nt_splitdrive(path)[0]
324
drive = ntpath.splitdrive(path)[0]
331
325
if drive == '' and path[:2] not in('//','\\\\'):
332
326
cwd = os.getcwdu()
333
327
# we cannot simply os.path.join cwd and path
334
328
# because os.path.join('C:','/path') produce '/path'
335
329
# and this is incorrect
336
330
if path[:1] in ('/','\\'):
337
cwd = _nt_splitdrive(cwd)[0]
331
cwd = ntpath.splitdrive(cwd)[0]
339
333
path = cwd + '\\' + path
340
return _win32_fixdrive(_nt_normpath(path).replace('\\', '/'))
334
return _win32_fixdrive(ntpath.normpath(path).replace('\\', '/'))
343
337
def _win32_realpath(path):
344
# Real _nt_realpath doesn't have a problem with a unicode cwd
345
return _win32_fixdrive(_nt_realpath(unicode(path)).replace('\\', '/'))
338
# Real ntpath.realpath doesn't have a problem with a unicode cwd
339
return _win32_fixdrive(ntpath.realpath(unicode(path)).replace('\\', '/'))
348
342
def _win32_pathjoin(*args):
349
return _nt_join(*args).replace('\\', '/')
343
return ntpath.join(*args).replace('\\', '/')
352
346
def _win32_normpath(path):
353
return _win32_fixdrive(_nt_normpath(unicode(path)).replace('\\', '/'))
347
return _win32_fixdrive(ntpath.normpath(unicode(path)).replace('\\', '/'))
356
350
def _win32_getcwd():
360
354
def _win32_mkdtemp(*args, **kwargs):
361
return _win32_fixdrive(tempfile.mkdtemp(*args, **kwargs).replace('\\', '/'))
355
return _win32_fixdrive(mkdtemp(*args, **kwargs).replace('\\', '/'))
364
358
def _win32_rename(old, new):
395
389
basename = os.path.basename
396
390
split = os.path.split
397
391
splitext = os.path.splitext
398
# These were already imported into local scope
392
# These were already lazily imported into local scope
399
393
# mkdtemp = tempfile.mkdtemp
400
394
# rmtree = shutil.rmtree
518
512
"""True if f is a regular file."""
520
return S_ISREG(os.lstat(f)[ST_MODE])
514
return stat.S_ISREG(os.lstat(f)[stat.ST_MODE])
525
519
"""True if f is a symlink."""
527
return S_ISLNK(os.lstat(f)[ST_MODE])
521
return stat.S_ISLNK(os.lstat(f)[stat.ST_MODE])