]> git.michaelhowe.org Git - packages/b/bup.git/commitdiff
meta-cmd.py: actually respond to recursion options.
authorRob Browning <rlb@defaultvalue.org>
Thu, 31 Oct 2013 16:57:01 +0000 (11:57 -0500)
committerRob Browning <rlb@defaultvalue.org>
Thu, 31 Oct 2013 17:00:14 +0000 (12:00 -0500)
Signed-off-by: Rob Browning <rlb@defaultvalue.org>
cmd/meta-cmd.py
lib/bup/metadata.py
t/test-meta.sh

index 0ef91ab475c7e1c4e7b0a3455d54ed8056bda40a..cac26b54242ea5cdb592750bb2353a35ea58eafd 100755 (executable)
@@ -58,7 +58,8 @@ q,quiet        don't show progress meter
 handle_ctrl_c()
 
 o = options.Options(optspec)
-(opt, flags, remainder) = o.parse(['--paths', '--symlinks'] + sys.argv[1:])
+(opt, flags, remainder) = o.parse(['--paths', '--symlinks', '--recurse']
+                                  + sys.argv[1:])
 
 opt.verbose = opt.verbose or 0
 opt.quiet = opt.quiet or 0
index bdfdb323da26c63fbea9b5a6a48a2e859d2d10a8..042eb4d81279867abeb139ecac8c6b3540732f49 100644 (file)
@@ -791,20 +791,32 @@ def save_tree(output_file, paths,
         if safe_path != path:
             log('archiving "%s" as "%s"\n' % (path, safe_path))
 
-    start_dir = os.getcwd()
-    try:
-        for (p, st) in recursive_dirlist(paths, xdev=xdev):
-            dirlist_dir = os.getcwd()
-            os.chdir(start_dir)
+    if not recurse:
+        for p in paths:
             safe_path = _clean_up_path_for_archive(p)
+            st = xstat.lstat(p)
+            if stat.S_ISDIR(st.st_mode):
+                safe_path += '/'
             m = from_path(p, statinfo=st, archive_path=safe_path,
                           save_symlinks=save_symlinks)
             if verbose:
                 print >> sys.stderr, m.path
             m.write(output_file, include_path=write_paths)
-            os.chdir(dirlist_dir)
-    finally:
-        os.chdir(start_dir)
+    else:
+        start_dir = os.getcwd()
+        try:
+            for (p, st) in recursive_dirlist(paths, xdev=xdev):
+                dirlist_dir = os.getcwd()
+                os.chdir(start_dir)
+                safe_path = _clean_up_path_for_archive(p)
+                m = from_path(p, statinfo=st, archive_path=safe_path,
+                              save_symlinks=save_symlinks)
+                if verbose:
+                    print >> sys.stderr, m.path
+                m.write(output_file, include_path=write_paths)
+                os.chdir(dirlist_dir)
+        finally:
+            os.chdir(start_dir)
 
 
 def _set_up_path(meta, create_symlinks=True):
index 217db037ee336aa43997f75e5aa184fe10c59410..28b5cfc3acd8add983b59e048d1dfe19ed1df249 100755 (executable)
@@ -397,6 +397,25 @@ WVSTART 'meta --edit'
         | WVPASS bup meta -tvvf - | grep -qE '^group: bar'
 )
 
+WVSTART 'meta --no-recurse'
+(
+    set +e
+    WVPASS force-delete "$TOP/bupmeta.tmp"
+    WVPASS mkdir "$TOP/bupmeta.tmp"
+    WVPASS cd "$TOP/bupmeta.tmp"
+    WVPASS mkdir src
+    WVPASS mkdir src/foo
+    WVPASS touch src/foo/{1,2,3}
+    WVPASS bup meta -cf src.meta src
+    WVPASSEQ "$(LC_ALL=C; bup meta -tf src.meta | sort)" "src/
+src/foo/
+src/foo/1
+src/foo/2
+src/foo/3"
+    WVPASS bup meta --no-recurse -cf src.meta src
+    WVPASSEQ "$(LC_ALL=C; bup meta -tf src.meta | sort)" "src/"
+) || exit $?
+
 # Test ownership restoration (when not root or fakeroot).
 (
     if [ $(t/root-status) != none ]; then