Merge branch 'md/exclude-promisor-objects-fix'
authorJunio C Hamano <gitster@pobox.com>
Tue, 6 Nov 2018 06:50:21 +0000 (15:50 +0900)
committerJunio C Hamano <gitster@pobox.com>
Tue, 6 Nov 2018 06:50:21 +0000 (15:50 +0900)
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

Documentation/rev-list-options.txt
builtin/pack-objects.c
builtin/prune.c
builtin/rev-list.c
revision.c
revision.h
t/t4202-log.sh
t/t8002-blame.sh
index 5f1672913b8ab19f6b2cf20d5fa79cfe6b636356..bab5f50b1724913c7607180897b7f92d1517dda9 100644 (file)
@@ -761,7 +761,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
@@ -769,6 +768,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.
index e50c6cd1ff25ce4d65e0ebd854d052c3d1160a2a..c99ee79c31a84a3f67735cb44e85c156f63ad966 100644 (file)
@@ -3107,6 +3107,7 @@ static void get_object_list(int ac, const char **av)
 
        repo_init_revisions(the_repository, &revs, NULL);
        save_commit_buffer = 0;
+       revs.allow_exclude_promisor_objects_opt = 1;
        setup_revisions(ac, av, &revs, NULL);
 
        /* make sure shallows are read */
index 1ec9ddd751df6644d2c39ace41a1494800082638..e42653b99cffe2f42f2fb853999a41465878ce02 100644 (file)
@@ -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;
        repo_init_revisions(the_repository, &revs, prefix);
 
        argc = parse_options(argc, argv, prefix, options, prune_usage, 0);
index 5064d08e1b8ad04544a76d1f0496134e2c15079c..2880ed37e3f97193d2374657346b4de52bc44954 100644 (file)
@@ -374,6 +374,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix)
        git_config(git_default_config, NULL);
        repo_init_revisions(the_repository, &revs, prefix);
        revs.abbrev = DEFAULT_ABBREV;
+       revs.allow_exclude_promisor_objects_opt = 1;
        revs.commit_format = CMIT_FMT_UNSPECIFIED;
        revs.do_not_die_on_missing_tree = 1;
 
index a1ddb9e11cbe3a52bb8d3eee3785524db4055854..28fb2a70cdaaab93e8665a37c2ce02f89a90ed4c 100644 (file)
@@ -2138,7 +2138,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;
index 1cd0c4b200887e6b73d6a2473712bb5832f7e079..0d2abc2d36ec579c281135a2a3b866fb37911326 100644 (file)
@@ -156,6 +156,7 @@ struct rev_info {
                        do_not_die_on_missing_tree:1,
 
                        /* for internal use only */
+                       allow_exclude_promisor_objects_opt:1,
                        exclude_promisor_objects:1;
 
        /* Diff flags */
index 153a506151e2afe3f1e047cd5a00270f1378ce14..819c24d10eaa3cb4a58b72ae8a8e96151b5cabe9 100755 (executable)
@@ -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
index 380e1c1054de5d55a80cb558fea0791884ad7f38..eea048e52ceb328fd5d97b17e996c8f821ae4abb 100755 (executable)
@@ -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