aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--builtin-log.c1
-rw-r--r--revision.c7
-rw-r--r--revision.h1
3 files changed, 8 insertions, 1 deletions
diff --git a/builtin-log.c b/builtin-log.c
index 5b0ea2834..f4d974a7b 100644
--- a/builtin-log.c
+++ b/builtin-log.c
@@ -51,6 +51,7 @@ int cmd_whatchanged(int argc, const char **argv, char **envp)
init_revisions(&rev);
rev.diff = 1;
rev.diffopt.recursive = 1;
+ rev.simplify_history = 0;
return cmd_log_wc(argc, argv, envp, &rev);
}
diff --git a/revision.c b/revision.c
index 6a6952cd5..75c648c13 100644
--- a/revision.c
+++ b/revision.c
@@ -303,7 +303,7 @@ static void try_to_simplify_commit(struct rev_info *revs, struct commit *commit)
parse_commit(p);
switch (rev_compare_tree(revs, p->tree, commit->tree)) {
case REV_TREE_SAME:
- if (p->object.flags & UNINTERESTING) {
+ if (!revs->simplify_history || (p->object.flags & UNINTERESTING)) {
/* Even if a merge with an uninteresting
* side branch brought the entire change
* we are interested in, we do not want
@@ -519,6 +519,7 @@ void init_revisions(struct rev_info *revs)
revs->abbrev = DEFAULT_ABBREV;
revs->ignore_merges = 1;
+ revs->simplify_history = 1;
revs->pruning.recursive = 1;
revs->pruning.add_remove = file_add_remove;
revs->pruning.change = file_change;
@@ -756,6 +757,10 @@ int setup_revisions(int argc, const char **argv, struct rev_info *revs, const ch
revs->full_diff = 1;
continue;
}
+ if (!strcmp(arg, "--full-history")) {
+ revs->simplify_history = 0;
+ continue;
+ }
opts = diff_opt_parse(&revs->diffopt, argv+i, argc-i);
if (opts > 0) {
revs->diff = 1;
diff --git a/revision.h b/revision.h
index 7d85b0f2e..4020e25c3 100644
--- a/revision.h
+++ b/revision.h
@@ -30,6 +30,7 @@ struct rev_info {
no_merges:1,
no_walk:1,
remove_empty_trees:1,
+ simplify_history:1,
lifo:1,
topo_order:1,
tag_objects:1,