archive: make progress only show files that are actually archived stable
authorThomas Arendsen Hein <thomas@intevation.de>
Tue, 12 Jun 2012 12:05:52 +0200
branchstable
changeset 16919 51932c835b74
parent 16880 15159abc5ab6
child 16920 4dd036977463
child 16946 d9238286964e
archive: make progress only show files that are actually archived Before this, files that are excluded (or not included) were shown when using progress bar or --debug. Reported by Andrew Shadura.
mercurial/archival.py
tests/test-archive.t
--- a/mercurial/archival.py	Wed Jun 06 21:17:20 2012 -0500
+++ b/mercurial/archival.py	Tue Jun 12 12:05:52 2012 +0200
@@ -234,8 +234,6 @@
         prefix = tidyprefix(dest, kind, prefix)
 
     def write(name, mode, islink, getdata):
-        if matchfn and not matchfn(name):
-            return
         data = getdata()
         if decode:
             data = repo.wwritedata(name, data)
@@ -265,11 +263,18 @@
 
             return base + tags
 
-        write('.hg_archival.txt', 0644, False, metadata)
+        name = '.hg_archival.txt'
+        if not matchfn or matchfn(name):
+            write(name, 0644, False, metadata)
 
-    total = len(ctx.manifest())
+    if matchfn:
+        files = [f for f in ctx.manifest().keys() if matchfn(f)]
+    else:
+        files = ctx.manifest().keys()
+    files.sort()
+    total = len(files)
     repo.ui.progress(_('archiving'), 0, unit=_('files'), total=total)
-    for i, f in enumerate(ctx):
+    for i, f in enumerate(files):
         ff = ctx.flags(f)
         write(f, 'x' in ff and 0755 or 0644, 'l' in ff, ctx[f].data)
         repo.ui.progress(_('archiving'), i + 1, item=f,
--- a/tests/test-archive.t	Wed Jun 06 21:17:20 2012 -0500
+++ b/tests/test-archive.t	Tue Jun 12 12:05:52 2012 +0200
@@ -102,7 +102,10 @@
   test/baz/bletch
   test/foo
 
-  $ hg archive -t tbz2 -X baz test.tar.bz2
+  $ hg archive --debug -t tbz2 -X baz test.tar.bz2
+  archiving: 0/2 files (0.00%)
+  archiving: bar 1/2 files (50.00%)
+  archiving: foo 2/2 files (100.00%)
   $ bunzip2 -dc test.tar.bz2 | tar tf - 2>/dev/null
   test/.hg_archival.txt
   test/bar