[PATCH 2 of 3] util.walkrepos() follows symbolic links to directories

Robin Farine robin.farine at terminus.org
Tue Dec 26 13:26:02 CST 2006


Updated version from Benoit Boissinot based on an iterative rather
than recursive implementation.

# HG changeset patch
# User Robin Farine <robin.farine at terminus.org>
# Date 1167160817 -3600
# Node ID 10b255882392a4c86255732266f6907bebfeaa26
# Parent  cd4f4bc4e25ec834bebd8991800d0645470718e8
util.walkrepos() follows symbolic links to directories

diff -r cd4f4bc4e25e -r 10b255882392 mercurial/util.py
--- a/mercurial/util.py	Sat Dec 23 16:10:58 2006 +0100
+++ b/mercurial/util.py	Tue Dec 26 20:20:17 2006 +0100
@@ -1263,11 +1263,18 @@ def walkrepos(path):
         if err.filename == path:
             raise err
 
-    for root, dirs, files in os.walk(path, onerror=errhandler):
-        for d in dirs:
-            if d == '.hg':
-                yield root
-                dirs.remove(d)
+    paths = [path]
+    while paths:
+        path = paths.pop()
+        for root, dirs, files in os.walk(path, onerror=errhandler):
+            for d in dirs:
+                if d == '.hg':
+                    yield root
+                    dirs.remove(d)
+                else:
+                    p = os.path.join(root, d)
+                    if os.path.islink(p):
+                        paths.append(p)
 
 _rcpath = None
 


More information about the Mercurial-devel mailing list