Merge branch 'jn/git-cmd-h-bypass-setup'
authorJunio C Hamano <gitster@pobox.com>
Mon, 13 Dec 2010 05:49:50 +0000 (21:49 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 13 Dec 2010 05:49:50 +0000 (21:49 -0800)
* jn/git-cmd-h-bypass-setup:
update-index -h: show usage even with corrupt index
merge -h: show usage even with corrupt index
ls-files -h: show usage even with corrupt index
gc -h: show usage even with broken configuration
commit/status -h: show usage even with broken configuration
checkout-index -h: show usage even in an invalid repository
branch -h: show usage even in an invalid repository

Conflicts:
builtin/merge.c

14 files changed:
builtin/branch.c
builtin/checkout-index.c
builtin/commit.c
builtin/gc.c
builtin/ls-files.c
builtin/merge.c
builtin/update-index.c
t/t2006-checkout-index-basic.sh [new file with mode: 0755]
t/t2107-update-index-basic.sh [new file with mode: 0755]
t/t3004-ls-files-basic.sh [new file with mode: 0755]
t/t3200-branch.sh
t/t6500-gc.sh [new file with mode: 0755]
t/t7508-status.sh
t/t7600-merge.sh
index 807355a1982f0f91e9acea66c360903fc3714495..0cad20bb5a8bd0054761861aada7f1077260dbd5 100644 (file)
@@ -668,6 +668,9 @@ int cmd_branch(int argc, const char **argv, const char *prefix)
                OPT_END(),
        };
 
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage_with_options(builtin_branch_usage, options);
+
        git_config(git_branch_config, NULL);
 
        if (branch_use_color == -1)
index 1ee30443074bbae67a402c5397b939a716f2a191..f1fec24745a854e77555a1b4bea3bc8d7ab04367 100644 (file)
@@ -241,6 +241,9 @@ int cmd_checkout_index(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage_with_options(builtin_checkout_index_usage,
+                                  builtin_checkout_index_options);
        git_config(git_default_config, NULL);
        state.base_dir = "";
        prefix_length = prefix ? strlen(prefix) : 0;
index 6d867d4018b38cbb6ba36d963ee5af10721bab0e..c045c9ef8cf19b5458c279cd46250c839285a4a4 100644 (file)
@@ -1097,6 +1097,9 @@ int cmd_status(int argc, const char **argv, const char *prefix)
                OPT_END(),
        };
 
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage_with_options(builtin_status_usage, builtin_status_options);
+
        if (null_termination && status_format == STATUS_FORMAT_LONG)
                status_format = STATUS_FORMAT_PORCELAIN;
 
@@ -1282,6 +1285,9 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
        int allow_fast_forward = 1;
        struct wt_status s;
 
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage_with_options(builtin_commit_usage, builtin_commit_options);
+
        wt_status_prepare(&s);
        git_config(git_commit_config, &s);
        in_merge = file_exists(git_path("MERGE_HEAD"));
index 397a1e6eb3ae8ec0e367a8faa2ca823586d26e6a..1a80702b3d1c86b55af24be3b3396f17e9d4a21c 100644 (file)
@@ -189,6 +189,9 @@ int cmd_gc(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
 
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage_with_options(builtin_gc_usage, builtin_gc_options);
+
        git_config(gc_config, NULL);
 
        if (pack_refs < 0)
index 6a307ab784a25c9f8d201392f79c7146a4a8eece..fb2d5f4b1fb0ce9ef2fb0c4099b5fea6d07b6838 100644 (file)
@@ -530,6 +530,9 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix)
                OPT_END()
        };
 
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage_with_options(ls_files_usage, builtin_ls_files_options);
+
        memset(&dir, 0, sizeof(dir));
        prefix = cmd_prefix;
        if (prefix)
index 3921cd304086cbc2edff0e1481f7c7395df8b00a..42fff387e69d9b5412e8e776aed3272b78ebe758 100644 (file)
@@ -922,6 +922,9 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
        const char *best_strategy = NULL, *wt_strategy = NULL;
        struct commit_list **remotes = &remoteheads;
 
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage_with_options(builtin_merge_usage, builtin_merge_options);
+
        /*
         * Check if we are _not_ on a detached HEAD, i.e. if there is a
         * current branch.
index 62d9f3f0fa358058fcf54e4fcbd4c3101b1279db..200c7efed18ebba7088f2b56d942084be280a578 100644 (file)
@@ -589,6 +589,9 @@ int cmd_update_index(int argc, const char **argv, const char *prefix)
        int lock_error = 0;
        struct lock_file *lock_file;
 
+       if (argc == 2 && !strcmp(argv[1], "-h"))
+               usage(update_index_usage);
+
        git_config(git_default_config, NULL);
 
        /* We can't free this memory, it becomes part of a linked list parsed atexit() */
diff --git a/t/t2006-checkout-index-basic.sh b/t/t2006-checkout-index-basic.sh
new file mode 100755 (executable)
index 0000000..b855983
--- /dev/null
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+test_description='basic checkout-index tests
+'
+
+. ./test-lib.sh
+
+test_expect_success 'checkout-index --gobbledegook' '
+       test_expect_code 129 git checkout-index --gobbledegook 2>err &&
+       grep "[Uu]sage" err
+'
+
+test_expect_success 'checkout-index -h in broken repository' '
+       mkdir broken &&
+       (
+               cd broken &&
+               git init &&
+               >.git/index &&
+               test_expect_code 129 git checkout-index -h >usage 2>&1
+       ) &&
+       grep "[Uu]sage" broken/usage
+'
+
+test_done
diff --git a/t/t2107-update-index-basic.sh b/t/t2107-update-index-basic.sh
new file mode 100755 (executable)
index 0000000..33f8be0
--- /dev/null
@@ -0,0 +1,32 @@
+#!/bin/sh
+
+test_description='basic update-index tests
+
+Tests for command-line parsing and basic operation.
+'
+
+. ./test-lib.sh
+
+test_expect_success 'update-index --nonsense fails' '
+       test_must_fail git update-index --nonsense 2>msg &&
+       cat msg &&
+       test -s msg
+'
+
+test_expect_failure 'update-index --nonsense dumps usage' '
+       test_expect_code 129 git update-index --nonsense 2>err &&
+       grep "[Uu]sage: git update-index" err
+'
+
+test_expect_success 'update-index -h with corrupt index' '
+       mkdir broken &&
+       (
+               cd broken &&
+               git init &&
+               >.git/index &&
+               test_expect_code 129 git update-index -h >usage 2>&1
+       ) &&
+       grep "[Uu]sage: git update-index" broken/usage
+'
+
+test_done
diff --git a/t/t3004-ls-files-basic.sh b/t/t3004-ls-files-basic.sh
new file mode 100755 (executable)
index 0000000..490e052
--- /dev/null
@@ -0,0 +1,39 @@
+#!/bin/sh
+
+test_description='basic ls-files tests
+
+This test runs git ls-files with various unusual or malformed
+command-line arguments.
+'
+
+. ./test-lib.sh
+
+>empty
+
+test_expect_success 'ls-files in empty repository' '
+       git ls-files >actual &&
+       test_cmp empty actual
+'
+
+test_expect_success 'ls-files with nonexistent path' '
+       git ls-files doesnotexist >actual &&
+       test_cmp empty actual
+'
+
+test_expect_success 'ls-files with nonsense option' '
+       test_expect_code 129 git ls-files --nonsense 2>actual &&
+       grep "[Uu]sage: git ls-files" actual
+'
+
+test_expect_success 'ls-files -h in corrupt repository' '
+       mkdir broken &&
+       (
+               cd broken &&
+               git init &&
+               >.git/index &&
+               test_expect_code 129 git ls-files -h >usage 2>&1
+       ) &&
+       grep "[Uu]sage: git ls-files " broken/usage
+'
+
+test_done
index f54a533456d74a3eb2f745dbc77c8ad5a5ae960f..f308235f5dd28da2c19d91dc63803312aacd2cda 100755 (executable)
@@ -26,6 +26,17 @@ test_expect_success \
      ! test -f .git/refs/heads/--help
 '
 
+test_expect_success 'branch -h in broken repository' '
+       mkdir broken &&
+       (
+               cd broken &&
+               git init &&
+               >.git/refs/heads/master &&
+               test_expect_code 129 git branch -h >usage 2>&1
+       ) &&
+       grep "[Uu]sage" broken/usage
+'
+
 test_expect_success \
     'git branch abc should create a branch' \
     'git branch abc && test -f .git/refs/heads/abc'
diff --git a/t/t6500-gc.sh b/t/t6500-gc.sh
new file mode 100755 (executable)
index 0000000..82f3639
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+test_description='basic git gc tests
+'
+
+. ./test-lib.sh
+
+test_expect_success 'gc empty repository' '
+       git gc
+'
+
+test_expect_success 'gc --gobbledegook' '
+       test_expect_code 129 git gc --nonsense 2>err &&
+       grep "[Uu]sage: git gc" err
+'
+
+test_expect_success 'gc -h with invalid configuration' '
+       mkdir broken &&
+       (
+               cd broken &&
+               git init &&
+               echo "[gc] pruneexpire = CORRUPT" >>.git/config &&
+               test_expect_code 129 git gc -h >usage 2>&1
+       ) &&
+       grep "[Uu]sage" broken/usage
+'
+
+test_done
index 4de3e27950ca34ffe3f5e72052108ce9d74b0227..b73ab42936a8ea10dcdf40a6ad8b83d4a1d10056 100755 (executable)
@@ -7,6 +7,30 @@ test_description='git status'
 
 . ./test-lib.sh
 
+test_expect_success 'status -h in broken repository' '
+       mkdir broken &&
+       test_when_finished "rm -fr broken" &&
+       (
+               cd broken &&
+               git init &&
+               echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
+               test_expect_code 129 git status -h >usage 2>&1
+       ) &&
+       grep "[Uu]sage" broken/usage
+'
+
+test_expect_success 'commit -h in broken repository' '
+       mkdir broken &&
+       test_when_finished "rm -fr broken" &&
+       (
+               cd broken &&
+               git init &&
+               echo "[status] showuntrackedfiles = CORRUPT" >>.git/config &&
+               test_expect_code 129 git commit -h >usage 2>&1
+       ) &&
+       grep "[Uu]sage" broken/usage
+'
+
 test_expect_success 'setup' '
        : >tracked &&
        : >modified &&
index b4f40e4c3a53388e72347e8e3894edd05f17dab5..b147a1bd69e96e48d3808028a3775a609471639a 100755 (executable)
@@ -144,6 +144,17 @@ test_expect_success 'test option parsing' '
        test_must_fail git merge
 '
 
+test_expect_success 'merge -h with invalid index' '
+       mkdir broken &&
+       (
+               cd broken &&
+               git init &&
+               >.git/index &&
+               test_expect_code 129 git merge -h 2>usage
+       ) &&
+       grep "[Uu]sage: git merge" broken/usage
+'
+
 test_expect_success 'reject non-strategy with a git-merge-foo name' '
        test_must_fail git merge -s index c1
 '