rev-list --exclude: tests
authorJunio C Hamano <gitster@pobox.com>
Fri, 1 Nov 2013 18:33:15 +0000 (11:33 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 1 Nov 2013 20:09:23 +0000 (13:09 -0700)
Add tests for the --exclude=<glob> feature.

A few tests are added for cases where use of globbing and
"--exclude" results in no positive revisions:

* "--exclude=<glob>" before "--all" etc. resulted in no results;

* "--stdin" is used but no input was given;

* "--all" etc. is used but no matching refs are found.

Currently, we fail such a request with the same error message we
would give to a command line that does not specify any positive
revision (e.g. "git rev-list<ENTER>").

We may want to treat these cases differently and not error out, but
the logic to detect that would be common to all of them, so I'd
leave it outside this topic for now, and stop at adding these tests
as food-for-thought.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t6018-rev-list-glob.sh
index f00cebff3e42cf0a38d06a03b6f14ef08dd16372..77ef3234b38835978651f17d875031661a2e5640 100755 (executable)
@@ -231,6 +231,48 @@ test_expect_success 'rev-list --remotes=foo' '
 
 '
 
+test_expect_success 'rev-list --exclude with --branches' '
+       compare rev-list "--exclude=*/* --branches" "master someref subspace-x"
+'
+
+test_expect_success 'rev-list --exclude with --all' '
+       compare rev-list "--exclude=refs/remotes/* --all" "--branches --tags"
+'
+
+test_expect_success 'rev-list accumulates multiple --exclude' '
+       compare rev-list "--exclude=refs/remotes/* --exclude=refs/tags/* --all" --branches
+'
+
+
+# "git rev-list<ENTER>" is likely to be a bug in the calling script and may
+# deserve an error message, but do cases where set of refs programatically
+# given using globbing and/or --stdin need to fail with the same error, or
+# are we better off reporting a success with no output?  The following few
+# tests document the current behaviour to remind us that we might want to
+# think about this issue.
+
+test_expect_failure 'rev-list may want to succeed with empty output on no input (1)' '
+       >expect &&
+       git rev-list --stdin <expect >actual &&
+       test_cmp expect actual
+'
+
+test_expect_failure 'rev-list may want to succeed with empty output on no input (2)' '
+       >expect &&
+       git rev-list --exclude=* --all >actual &&
+       test_cmp expect actual
+'
+
+test_expect_failure 'rev-list may want to succeed with empty output on no input (3)' '
+       (
+               test_create_repo empty &&
+               cd empty &&
+               >expect &&
+               git rev-list --all >actual &&
+               test_cmp expect actual
+       )
+'
+
 test_expect_success 'shortlog accepts --glob/--tags/--remotes' '
 
        compare shortlog "subspace/one subspace/two" --branches=subspace &&