commit-tree: resurrect command line parsing updates
authorJunio C Hamano <gitster@pobox.com>
Tue, 17 Jul 2012 20:05:13 +0000 (13:05 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 17 Jul 2012 20:05:13 +0000 (13:05 -0700)
79a9312 (commit-tree: update the command line parsing, 2011-11-09)
updated the command line parser to understand the usual "flags first
and then non-flag arguments" order, in addition to the original and
a bit unusual "tree comes first and then zero or more -p <parent>".

Unfortunately, ba3c69a (commit: teach --gpg-sign option, 2011-10-05)
broke it by mistake.  Resurrect it, and protect the feature with a
test from future breakages.

Noticed by Keshav Kini
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/commit-tree.c
t/t1100-commit-tree-options.sh

index d5e19af54702d5d2ab38a5e4ef2cab6c9b88eead..792670a9d18bc8e5126fe56c8755f9ac036a7728 100644 (file)
@@ -48,9 +48,6 @@ int cmd_commit_tree(int argc, const char **argv, const char *prefix)
        if (argc < 2 || !strcmp(argv[1], "-h"))
                usage(commit_tree_usage);
 
-       if (get_sha1(argv[1], tree_sha1))
-               die("Not a valid object name %s", argv[1]);
-
        for (i = 1; i < argc; i++) {
                const char *arg = argv[i];
                if (!strcmp(arg, "-p")) {
index c4414ff576fc03b3234c532bfdcd0f2c8eca9c09..a3b77239f48ade053c3514c9ba65cd72286d0783 100755 (executable)
@@ -7,6 +7,9 @@ test_description='git commit-tree options test
 
 This test checks that git commit-tree can create a specific commit
 object by defining all environment variables that it understands.
+
+Also make sure that command line parser understands the normal
+"flags first and then non flag arguments" command line.
 '
 
 . ./test-lib.sh
@@ -42,4 +45,18 @@ test_expect_success \
     'compare commit' \
     'test_cmp expected commit'
 
+
+test_expect_success 'flags and then non flags' '
+       echo comment text |
+       git commit-tree $(cat treeid) >commitid &&
+       echo comment text |
+       git commit-tree $(cat treeid) -p $(cat commitid) >childid-1 &&
+       echo comment text |
+       git commit-tree -p $(cat commitid) $(cat treeid) >childid-2 &&
+       test_cmp childid-1 childid-2 &&
+       git commit-tree $(cat treeid) -m foo >childid-3 &&
+       git commit-tree -m foo $(cat treeid) >childid-4 &&
+       test_cmp childid-3 childid-4
+'
+
 test_done