mirror of
https://github.com/git/git
synced 2024-08-25 10:45:59 +00:00
ref-filter: make combining --merged & --no-merged an error
Change the behavior of specifying --merged & --no-merged to be an error, instead of silently picking the option that was provided last. Subsequent changes of mine add a --no-contains option in addition to the existing --contains. Providing both of those isn't an error, and has actual meaning. Making its cousins have different behavior in this regard would be confusing to the user, especially since we'd be silently disregarding some of their command-line input. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
8881d35cac
commit
17d6c744dc
|
@ -215,11 +215,13 @@ start-point is either a local or remote-tracking branch.
|
||||||
|
|
||||||
--merged [<commit>]::
|
--merged [<commit>]::
|
||||||
Only list branches whose tips are reachable from the
|
Only list branches whose tips are reachable from the
|
||||||
specified commit (HEAD if not specified). Implies `--list`.
|
specified commit (HEAD if not specified). Implies `--list`,
|
||||||
|
incompatible with `--no-merged`.
|
||||||
|
|
||||||
--no-merged [<commit>]::
|
--no-merged [<commit>]::
|
||||||
Only list branches whose tips are not reachable from the
|
Only list branches whose tips are not reachable from the
|
||||||
specified commit (HEAD if not specified). Implies `--list`.
|
specified commit (HEAD if not specified). Implies `--list`,
|
||||||
|
incompatible with `--merged`.
|
||||||
|
|
||||||
<branchname>::
|
<branchname>::
|
||||||
The name of the branch to create or delete.
|
The name of the branch to create or delete.
|
||||||
|
|
|
@ -69,11 +69,13 @@ OPTIONS
|
||||||
|
|
||||||
--merged [<object>]::
|
--merged [<object>]::
|
||||||
Only list refs whose tips are reachable from the
|
Only list refs whose tips are reachable from the
|
||||||
specified commit (HEAD if not specified).
|
specified commit (HEAD if not specified),
|
||||||
|
incompatible with `--no-merged`.
|
||||||
|
|
||||||
--no-merged [<object>]::
|
--no-merged [<object>]::
|
||||||
Only list refs whose tips are not reachable from the
|
Only list refs whose tips are not reachable from the
|
||||||
specified commit (HEAD if not specified).
|
specified commit (HEAD if not specified),
|
||||||
|
incompatible with `--merged`.
|
||||||
|
|
||||||
--contains [<object>]::
|
--contains [<object>]::
|
||||||
Only list refs which contain the specified commit (HEAD if not
|
Only list refs which contain the specified commit (HEAD if not
|
||||||
|
|
|
@ -126,11 +126,11 @@ This option is only applicable when listing tags without annotation lines.
|
||||||
|
|
||||||
--merged [<commit>]::
|
--merged [<commit>]::
|
||||||
Only list tags whose commits are reachable from the specified
|
Only list tags whose commits are reachable from the specified
|
||||||
commit (`HEAD` if not specified).
|
commit (`HEAD` if not specified), incompatible with `--no-merged`.
|
||||||
|
|
||||||
--no-merged [<commit>]::
|
--no-merged [<commit>]::
|
||||||
Only list tags whose commits are not reachable from the specified
|
Only list tags whose commits are not reachable from the specified
|
||||||
commit (`HEAD` if not specified).
|
commit (`HEAD` if not specified), incompatible with `--merged`.
|
||||||
|
|
||||||
--points-at <object>::
|
--points-at <object>::
|
||||||
Only list tags of the given object.
|
Only list tags of the given object.
|
||||||
|
|
11
ref-filter.c
11
ref-filter.c
|
@ -2084,8 +2084,17 @@ int parse_opt_merge_filter(const struct option *opt, const char *arg, int unset)
|
||||||
{
|
{
|
||||||
struct ref_filter *rf = opt->value;
|
struct ref_filter *rf = opt->value;
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
|
int no_merged = starts_with(opt->long_name, "no");
|
||||||
|
|
||||||
rf->merge = starts_with(opt->long_name, "no")
|
if (rf->merge) {
|
||||||
|
if (no_merged) {
|
||||||
|
return opterror(opt, "is incompatible with --merged", 0);
|
||||||
|
} else {
|
||||||
|
return opterror(opt, "is incompatible with --no-merged", 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
rf->merge = no_merged
|
||||||
? REF_FILTER_MERGED_OMIT
|
? REF_FILTER_MERGED_OMIT
|
||||||
: REF_FILTER_MERGED_INCLUDE;
|
: REF_FILTER_MERGED_INCLUDE;
|
||||||
|
|
||||||
|
|
|
@ -953,6 +953,10 @@ test_expect_success '--merged catches invalid object names' '
|
||||||
test_must_fail git branch --merged 0000000000000000000000000000000000000000
|
test_must_fail git branch --merged 0000000000000000000000000000000000000000
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '--merged is incompatible with --no-merged' '
|
||||||
|
test_must_fail git branch --merged HEAD --no-merged HEAD
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'tracking with unexpected .fetch refspec' '
|
test_expect_success 'tracking with unexpected .fetch refspec' '
|
||||||
rm -rf a b c d &&
|
rm -rf a b c d &&
|
||||||
git init a &&
|
git init a &&
|
||||||
|
|
|
@ -421,4 +421,8 @@ test_expect_success 'check %(if:notequals=<string>)' '
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '--merged is incompatible with --no-merged' '
|
||||||
|
test_must_fail git for-each-ref --merged HEAD --no-merged HEAD
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
|
|
@ -1748,6 +1748,10 @@ test_expect_success '--merged cannot be used in non-list mode' '
|
||||||
test_must_fail git tag --merged=mergetest-2 foo
|
test_must_fail git tag --merged=mergetest-2 foo
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '--merged is incompatible with --no-merged' '
|
||||||
|
test_must_fail git tag --merged HEAD --no-merged HEAD
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success '--merged shows merged tags' '
|
test_expect_success '--merged shows merged tags' '
|
||||||
cat >expect <<-\EOF &&
|
cat >expect <<-\EOF &&
|
||||||
mergetest-1
|
mergetest-1
|
||||||
|
|
Loading…
Reference in a new issue