Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.kernel.org/pub/scm/git/git.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2018-11-21 16:57:52 +0300
committerJunio C Hamano <gitster@pobox.com>2018-11-21 16:57:52 +0300
commitb52ac60bc461a16076209a3027bb15f7c890f148 (patch)
treef16de68f0513127fff42a457a9ff56a3f0f37132
parentd0975a0724cc8f0f88931264b8b97c8a4c428dda (diff)
parent669b1d2aaec73ba762bf566078308075886ca208 (diff)
Merge branch 'md/exclude-promisor-objects-fix' into maint
Operations on promisor objects make sense in the context of only a small subset of the commands that internally use the revisions machinery, but the "--exclude-promisor-objects" option were taken and led to nonsense results by commands like "log", to which it didn't make much sense. This has been corrected. * md/exclude-promisor-objects-fix: exclude-promisor-objects: declare when option is allowed Documentation/git-log.txt: do not show --exclude-promisor-objects
-rw-r--r--Documentation/rev-list-options.txt2
-rw-r--r--builtin/pack-objects.c1
-rw-r--r--builtin/prune.c1
-rw-r--r--builtin/rev-list.c1
-rw-r--r--revision.c3
-rw-r--r--revision.h1
-rwxr-xr-xt/t4202-log.sh4
-rwxr-xr-xt/t8002-blame.sh4
8 files changed, 15 insertions, 2 deletions
diff --git a/Documentation/rev-list-options.txt b/Documentation/rev-list-options.txt
index 7b273635de..21978ebbac 100644
--- a/Documentation/rev-list-options.txt
+++ b/Documentation/rev-list-options.txt
@@ -756,7 +756,6 @@ Unexpected missing objects will raise an error.
+
The form '--missing=print' is like 'allow-any', but will also print a
list of the missing objects. Object IDs are prefixed with a ``?'' character.
-endif::git-rev-list[]
--exclude-promisor-objects::
(For internal use only.) Prefilter object traversal at
@@ -764,6 +763,7 @@ endif::git-rev-list[]
stronger than `--missing=allow-promisor` because it limits the
traversal, rather than just silencing errors about missing
objects.
+endif::git-rev-list[]
--no-walk[=(sorted|unsorted)]::
Only show the given commits, but do not traverse their ancestors.
diff --git a/builtin/pack-objects.c b/builtin/pack-objects.c
index 29d48f3867..ad3c650c08 100644
--- a/builtin/pack-objects.c
+++ b/builtin/pack-objects.c
@@ -2990,6 +2990,7 @@ static void get_object_list(int ac, const char **av)
init_revisions(&revs, NULL);
save_commit_buffer = 0;
+ revs.allow_exclude_promisor_objects_opt = 1;
setup_revisions(ac, av, &revs, NULL);
/* make sure shallows are read */
diff --git a/builtin/prune.c b/builtin/prune.c
index b29ce4abbc..d356ad70f6 100644
--- a/builtin/prune.c
+++ b/builtin/prune.c
@@ -120,6 +120,7 @@ int cmd_prune(int argc, const char **argv, const char *prefix)
save_commit_buffer = 0;
read_replace_refs = 0;
ref_paranoia = 1;
+ revs.allow_exclude_promisor_objects_opt = 1;
init_revisions(&revs, prefix);
argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
diff --git a/builtin/rev-list.c b/builtin/rev-list.c
index 5b07f3f4a2..41dd33c6a7 100644
--- a/builtin/rev-list.c
+++ b/builtin/rev-list.c
@@ -372,6 +372,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
git_config(git_default_config, NULL);
init_revisions(&revs, prefix);
revs.abbrev = DEFAULT_ABBREV;
+ revs.allow_exclude_promisor_objects_opt = 1;
revs.commit_format = CMIT_FMT_UNSPECIFIED;
/*
diff --git a/revision.c b/revision.c
index de4dce600d..e411802ebe 100644
--- a/revision.c
+++ b/revision.c
@@ -2133,7 +2133,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
revs->limited = 1;
} else if (!strcmp(arg, "--ignore-missing")) {
revs->ignore_missing = 1;
- } else if (!strcmp(arg, "--exclude-promisor-objects")) {
+ } else if (revs->allow_exclude_promisor_objects_opt &&
+ !strcmp(arg, "--exclude-promisor-objects")) {
if (fetch_if_missing)
BUG("exclude_promisor_objects can only be used when fetch_if_missing is 0");
revs->exclude_promisor_objects = 1;
diff --git a/revision.h b/revision.h
index 007278cc11..701a4973dd 100644
--- a/revision.h
+++ b/revision.h
@@ -127,6 +127,7 @@ struct rev_info {
tree_blobs_in_commit_order:1,
/* for internal use only */
+ allow_exclude_promisor_objects_opt:1,
exclude_promisor_objects:1;
/* Diff flags */
diff --git a/t/t4202-log.sh b/t/t4202-log.sh
index 153a506151..819c24d10e 100755
--- a/t/t4202-log.sh
+++ b/t/t4202-log.sh
@@ -1703,4 +1703,8 @@ test_expect_success 'log --source paints symmetric ranges' '
test_cmp expect actual
'
+test_expect_success '--exclude-promisor-objects does not BUG-crash' '
+ test_must_fail git log --exclude-promisor-objects source-a
+'
+
test_done
diff --git a/t/t8002-blame.sh b/t/t8002-blame.sh
index 380e1c1054..eea048e52c 100755
--- a/t/t8002-blame.sh
+++ b/t/t8002-blame.sh
@@ -118,4 +118,8 @@ test_expect_success '--no-abbrev works like --abbrev=40' '
check_abbrev 40 --no-abbrev
'
+test_expect_success '--exclude-promisor-objects does not BUG-crash' '
+ test_must_fail git blame --exclude-promisor-objects one
+'
+
test_done