diff --git a/builtin-log.c b/builtin-log.c index 5b0ea28346..f4d974a7b8 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 6a6952cd55..75c648c13c 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 7d85b0f2e9..4020e25c33 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,