Browse Source

commit/status -h: show usage even with broken configuration

"git status" and "git commit" read .git/config and .gitmodules before
parsing options, but there is no reason to access a repository at all
when the caller just wanted to know what arguments are accepted.

[jn: rewrote the log message and added test]

Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Nguyễn Thái Ngọc Duy 14 years ago committed by Junio C Hamano
parent
commit
5d3dd915e6
  1. 6
      builtin/commit.c
  2. 24
      t/t7508-status.sh

6
builtin/commit.c

@ -1070,6 +1070,9 @@ int cmd_status(int argc, const char **argv, const char *prefix)
OPT_END(), 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) if (null_termination && status_format == STATUS_FORMAT_LONG)
status_format = STATUS_FORMAT_PORCELAIN; status_format = STATUS_FORMAT_PORCELAIN;


@ -1255,6 +1258,9 @@ int cmd_commit(int argc, const char **argv, const char *prefix)
int allow_fast_forward = 1; int allow_fast_forward = 1;
struct wt_status s; struct wt_status s;


if (argc == 2 && !strcmp(argv[1], "-h"))
usage_with_options(builtin_commit_usage, builtin_commit_options);

wt_status_prepare(&s); wt_status_prepare(&s);
git_config(git_commit_config, &s); git_config(git_commit_config, &s);
in_merge = file_exists(git_path("MERGE_HEAD")); in_merge = file_exists(git_path("MERGE_HEAD"));

24
t/t7508-status.sh

@ -7,6 +7,30 @@ test_description='git status'


. ./test-lib.sh . ./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' ' test_expect_success 'setup' '
: >tracked && : >tracked &&
: >modified && : >modified &&

Loading…
Cancel
Save