tests/test-walk.out
author Stephen Darnell
Wed, 14 Sep 2005 12:22:20 -0500
changeset 1241 3b4f05ff3130
parent 1184 9462df772bc8
child 1309 332f225b835c
permissions -rw-r--r--
Add support for cloning with hardlinks on windows. In order to use hardlinks, the win32file module is needed, and this is present in ActivePython. If it isn't present, or hardlinks are not supported on the underlying filesystem, a regular copy is used. When using hardlinks the biggest benefit is probably the saving in space, but cloning can be much quicker. For example cloning the Xen tree (non trivial) without an update goes from about 95s to 15s. Unix-like platforms should be unaffected, although should be more tolerant on filesystems that don't support hard links. (tweaked by mpm to deal with new copyfiles function) --- hg.orig/mercurial/commands.py 2005-09-13 19:32:53.000000000 -0500 +++ hg/mercurial/commands.py 2005-09-14 12:11:34.000000000 -0500 @@ -620,10 +620,6 @@ def clone(ui, source, dest=None, **opts) if other.dev() != -1: abspath = os.path.abspath(source) - copyfile = (os.stat(dest).st_dev == other.dev() - and getattr(os, 'link', None) or shutil.copy2) - if copyfile is not shutil.copy2: - ui.note("cloning by hardlink\n") # we use a lock here because if we race with commit, we can # end up with extra data in the cloned revlogs that's not @@ -638,7 +634,7 @@ def clone(ui, source, dest=None, **opts) for f in files.split(): src = os.path.join(source, ".hg", f) dst = os.path.join(dest, ".hg", f) - util.copyfiles(src, dst, copyfile) + util.copyfiles(src, dst) repo = hg.repository(ui, dest) Index: hg/mercurial/util.py =================================================================== --- hg.orig/mercurial/util.py 2005-09-08 00:15:25.000000000 -0500 +++ hg/mercurial/util.py 2005-09-14 12:16:49.000000000 -0500 @@ -12,7 +12,7 @@ platform-specific details from the core. import os, errno from demandload import * -demandload(globals(), "re cStringIO") +demandload(globals(), "re cStringIO shutil") def binary(s): """return true if a string is binary data using diff's heuristic""" @@ -217,17 +217,28 @@ def rename(src, dst): os.unlink(dst) os.rename(src, dst) -def copyfiles(src, dst, copyfile): - """Copy a directory tree, files are copied using 'copyfile'.""" +def copyfiles(src, dst, hardlink=None): + """Copy a directory tree using hardlinks if possible""" + + if hardlink is None: + hardlink = (os.stat(src).st_dev == + os.stat(os.path.dirname(dst)).st_dev) if os.path.isdir(src): os.mkdir(dst) for name in os.listdir(src): srcname = os.path.join(src, name) dstname = os.path.join(dst, name) - copyfiles(srcname, dstname, copyfile) + copyfiles(srcname, dstname, hardlink) else: - copyfile(src, dst) + if hardlink: + try: + os_link(src, dst) + except: + hardlink = False + shutil.copy2(src, dst) + else: + shutil.copy2(src, dst) def opener(base): """ @@ -244,13 +255,13 @@ def opener(base): if mode[0] != "r": try: - s = os.stat(f) + nlink = nlinks(f) except OSError: d = os.path.dirname(f) if not os.path.isdir(d): os.makedirs(d) else: - if s.st_nlink > 1: + if nlink > 1: file(f + ".tmp", "wb").write(file(f, "rb").read()) rename(f+".tmp", f) @@ -266,10 +277,41 @@ def _makelock_file(info, pathname): def _readlock_file(pathname): return file(pathname).read() +def nlinks(pathname): + """Return number of hardlinks for the given file.""" + return os.stat(pathname).st_nlink + +if hasattr(os, 'link'): + os_link = os.link +else: + def os_link(src, dst): + raise OSError(0, "Hardlinks not supported") + # Platform specific variants if os.name == 'nt': nulldev = 'NUL:' + try: # ActivePython can create hard links using win32file module + import win32file + + def os_link(src, dst): # NB will only succeed on NTFS + win32file.CreateHardLink(dst, src) + + def nlinks(pathname): + """Return number of hardlinks for the given file.""" + try: + fh = win32file.CreateFile(pathname, + win32file.GENERIC_READ, win32file.FILE_SHARE_READ, + None, win32file.OPEN_EXISTING, 0, None) + res = win32file.GetFileInformationByHandle(fh) + fh.Close() + return res[7] + except: + return os.stat(pathname).st_nlink + + except ImportError: + pass + def is_exec(f, last): return last
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
889
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
     1
adding beans/black
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
     2
adding beans/borlotti
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
     3
adding beans/kidney
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
     4
adding beans/navy
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
     5
adding beans/pinto
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
     6
adding beans/turtle
1184
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
     7
adding fennel
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
     8
adding fenugreek
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
     9
adding fiddlehead
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    10
adding glob:glob
889
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
    11
adding mammals/Procyonidae/cacomistle
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
    12
adding mammals/Procyonidae/coatimundi
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
    13
adding mammals/Procyonidae/raccoon
1184
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    14
adding mammals/skunk
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    15
f  beans/black                     beans/black                     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    16
f  beans/borlotti                  beans/borlotti                  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    17
f  beans/kidney                    beans/kidney                    
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    18
f  beans/navy                      beans/navy                      
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    19
f  beans/pinto                     beans/pinto                     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    20
f  beans/turtle                    beans/turtle                    
1184
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    21
f  fennel                          fennel                          
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    22
f  fenugreek                       fenugreek                       
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    23
f  fiddlehead                      fiddlehead                      
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    24
f  glob:glob                       glob:glob                       
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    25
f  mammals/Procyonidae/cacomistle  mammals/Procyonidae/cacomistle  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    26
f  mammals/Procyonidae/coatimundi  mammals/Procyonidae/coatimundi  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    27
f  mammals/Procyonidae/raccoon     mammals/Procyonidae/raccoon     
1184
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    28
f  mammals/skunk                   mammals/skunk                   
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    29
f  mammals/Procyonidae/cacomistle  Procyonidae/cacomistle  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    30
f  mammals/Procyonidae/coatimundi  Procyonidae/coatimundi  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    31
f  mammals/Procyonidae/raccoon     Procyonidae/raccoon     
1184
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    32
f  mammals/skunk                   skunk                   
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    33
f  mammals/Procyonidae/cacomistle  Procyonidae/cacomistle  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    34
f  mammals/Procyonidae/coatimundi  Procyonidae/coatimundi  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    35
f  mammals/Procyonidae/raccoon     Procyonidae/raccoon     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    36
f  mammals/Procyonidae/cacomistle  cacomistle  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    37
f  mammals/Procyonidae/coatimundi  coatimundi  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    38
f  mammals/Procyonidae/raccoon     raccoon     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    39
f  mammals/Procyonidae/cacomistle  cacomistle  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    40
f  mammals/Procyonidae/coatimundi  coatimundi  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    41
f  mammals/Procyonidae/raccoon     raccoon     
1184
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    42
f  mammals/skunk                   ../skunk    
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    43
f  beans/black     ../beans/black     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    44
f  beans/borlotti  ../beans/borlotti  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    45
f  beans/kidney    ../beans/kidney    
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    46
f  beans/navy      ../beans/navy      
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    47
f  beans/pinto     ../beans/pinto     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    48
f  beans/turtle    ../beans/turtle    
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    49
f  mammals/Procyonidae/cacomistle  Procyonidae/cacomistle  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    50
f  mammals/Procyonidae/coatimundi  Procyonidae/coatimundi  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    51
f  mammals/Procyonidae/raccoon     Procyonidae/raccoon     
1184
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    52
f  mammals/skunk                   skunk                   
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    53
f  beans/black     beans/black     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    54
f  beans/borlotti  beans/borlotti  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    55
f  beans/kidney    beans/kidney    
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    56
f  beans/navy      beans/navy      
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    57
f  beans/pinto     beans/pinto     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    58
f  beans/turtle    beans/turtle    
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    59
f  beans/black     beans/black     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    60
f  beans/borlotti  beans/borlotti  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    61
f  mammals/skunk  mammals/skunk  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    62
f  mammals/Procyonidae/cacomistle  mammals/Procyonidae/cacomistle  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    63
f  mammals/Procyonidae/coatimundi  mammals/Procyonidae/coatimundi  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    64
f  mammals/Procyonidae/raccoon     mammals/Procyonidae/raccoon     
1184
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    65
f  mammals/skunk                   mammals/skunk                   
1082
ce96e316278a Update util.py docstrings, fix walk test
mpm@selenic.com
parents: 981
diff changeset
    66
abort: .. not under root
ce96e316278a Update util.py docstrings, fix walk test
mpm@selenic.com
parents: 981
diff changeset
    67
abort: beans/../.. not under root
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    68
f  fennel      fennel      
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    69
f  fenugreek   fenugreek   
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    70
f  fiddlehead  fiddlehead  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    71
f  glob:glob   glob:glob   
1184
9462df772bc8 Fix up failing tests.
bos@serpentine.internal.keyresearch.com
parents: 1082
diff changeset
    72
f  beans/black    beans/black    
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    73
f  fenugreek      fenugreek      
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    74
f  glob:glob      glob:glob      
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    75
f  mammals/skunk  mammals/skunk  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    76
f  beans/black  beans/black  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    77
f  beans/black     beans/black     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    78
f  beans/borlotti  beans/borlotti  
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    79
f  beans/kidney    beans/kidney    
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    80
f  beans/navy      beans/navy      
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    81
f  beans/pinto     beans/pinto     
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    82
f  beans/turtle    beans/turtle    
889
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
    83
NOEXIST: No such file or directory
0a06d9d373c3 Add unit tests for walk code.
Bryan O'Sullivan <bos@serpentine.com>
parents:
diff changeset
    84
fifo: unsupported file type (type is fifo)
942
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    85
m  fenugreek  fenugreek  exact
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    86
m  fenugreek  fenugreek  exact
7eb8cbcca7c4 Modify commands.walk to yield a 4-tuple.
Bryan O'Sullivan <bos@serpentine.com>
parents: 925
diff changeset
    87
f  new  new  exact