gitweb.cgi history not shown
authorLinus Torvalds <torvalds@osdl.org>
Sun, 11 Jun 2006 17:57:35 +0000 (10:57 -0700)
committerJunio C Hamano <junkio@cox.net>
Sat, 17 Jun 2006 05:53:11 +0000 (22:53 -0700)
This does:

 - add a "rev.simplify_history" flag which defaults to on
 - it turns it off for "git whatchanged" (which thus now has real
   semantics outside of "git log")
 - it adds a command line flag ("--full-history") to turn it off for
   others (ie you can make "git log" and "gitk" etc get the semantics if
   you want to.

Now, just as an example of _why_ you really really really want to simplify
history by default, apply this patch, install it, and try these two
command lines:

gitk --full-history -- git.c
gitk -- git.c

and compare the output.

So with this, you can also now do

git whatchanged -p -- gitweb.cgi
git log -p --full-history -- gitweb.cgi

and it will show the old history of gitweb.cgi, even though it's not
relevant to the _current_ state of the name "gitweb.cgi"

NOTE NOTE NOTE! It will still actually simplify away merges that didn't
change anything at all into either child. That creates these bogus strange
discontinuities if you look at it with "gitk" (look at the --full-history
gitk output for git.c, and you'll see a few strange cases).

So the whole "--parent" thing ends up somewhat bogus with --full-history
because of this, but I'm not sure it's worth even worrying about. I don't
think you'd ever want to really use "--full-history" with the graphical
representation, I just give it as an example exactly to show _why_ doing
so would be insane.

I think this is trivial enough and useful enough to be worth merging into
the stable branch.

Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
builtin-log.c
revision.c
revision.h

index 5b0ea28346ece27c37a3036660dc87e456fb9a13..f4d974a7b8bfa0472a110273edf62b34b90902fe 100644 (file)
@@ -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);
 }
 
index 6a6952cd559af89d3c8dc2c477ddd8c25b470d66..75c648c13c6c50335ffc3e79f5d6303bea20104e 100644 (file)
@@ -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;
index 7d85b0f2e97884daea9dfc9020526b91e8c4974a..4020e25c336356868057ee88e84b395f55b87b38 100644 (file)
@@ -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,