Re: gitweb.cgi history not shown

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Sun, 11 Jun 2006, Jakub Narebski wrote:
> 
> Could we please 'git whatchanged -p' default to the original (before
> rewrite) behavior, i.e. ALL THE HISTORY?

Ok, here's the full patch to do that.

It 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.

			Linus

---
diff --git a/builtin-log.c b/builtin-log.c
index 29a8851..4407f06 100644
--- a/builtin-log.c
+++ b/builtin-log.c
@@ -51,6 +51,7 @@ int cmd_whatchanged(int argc, const char
 	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 6a6952c..75c648c 100644
--- a/revision.c
+++ b/revision.c
@@ -303,7 +303,7 @@ static void try_to_simplify_commit(struc
 		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 *rev
 
 	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
 				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 7d85b0f..4020e25 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,
-
: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]