OSDN Git Service

builtin-prune: protect objects listed on the command line
authorJunio C Hamano <gitster@pobox.com>
Tue, 25 Mar 2008 06:20:51 +0000 (23:20 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 27 Mar 2008 22:39:57 +0000 (15:39 -0700)
Finally, this resurrects the documented behaviour to protect other
objects listed on the command line from getting pruned.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin-prune.c
t/t5304-prune.sh

index 71caac5..25f9304 100644 (file)
@@ -140,8 +140,19 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
        init_revisions(&revs, prefix);
 
        argc = parse_options(argc, argv, options, prune_usage, 0);
-       if (argc)
-               die ("unrecognized argument: %s", name);
+       while (argc--) {
+               unsigned char sha1[20];
+               const char *name = *argv++;
+
+               if (!get_sha1(name, sha1)) {
+                       struct object *object = parse_object(sha1);
+                       if (!object)
+                               die("bad object: %s", name);
+                       add_pending_object(&revs, object, "");
+               }
+               else
+                       die("unrecognized argument: %s", name);
+       }
        mark_reachable_objects(&revs, 1);
        prune_object_dir(get_object_directory());
 
index 3d81e1f..9fd9d07 100644 (file)
@@ -100,7 +100,7 @@ test_expect_success 'prune: prune unreachable heads' '
 
 '
 
-test_expect_failure 'prune: do not prune heads listed as an argument' '
+test_expect_success 'prune: do not prune heads listed as an argument' '
 
        : > file2 &&
        git add file2 &&