Re: [PATCH] First cut at libifying revlist generation

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

 




On Sun, 26 Feb 2006, Linus Torvalds wrote:
> 
> I suspect that the simplest fix is to just move "limited" into the "revs" 
> structure, the way I did pretty much everything else. That way nothing 
> really changes: we'll have the exact same logic, the flag just moved 
> around.

Here's a cleanup patch that does that. It also moves "unpacked" (and the 
flag parsing) into rev_info, since that actually does affect the revision 
walker too, and thus logically belongs there.

If you prefer, I can generate a totally re-done patch that combines all 
the fixes so far.

		Linus

----
diff-tree d33c6e5017d52d36f8da44162c0d87899efd247c (from 4b0fd13e13f49fa73ddd03a69f7d2ad1109139d4)
Author: Linus Torvalds <torvalds@xxxxxxxx>
Date:   Mon Feb 27 08:50:26 2006 -0800

    Fix rev-list "limited" handling
    
    Also, move "unpacked" into the rev_info structure, where it logically belongs.
    
    Signed-off-by: Linus Torvalds <torvalds@xxxxxxxx>

diff --git a/rev-list.c b/rev-list.c
index e9e371c..2e80930 100644
--- a/rev-list.c
+++ b/rev-list.c
@@ -41,7 +41,6 @@ static const char rev_list_usage[] =
 
 struct rev_info revs;
 
-static int unpacked = 0;
 static int bisect_list = 0;
 static int verbose_header = 0;
 static int abbrev = DEFAULT_ABBREV;
@@ -572,7 +571,7 @@ static struct commit_list *limit_list(st
 
 		if (revs.max_age != -1 && (commit->date < revs.max_age))
 			obj->flags |= UNINTERESTING;
-		if (unpacked && has_sha1_pack(obj->sha1))
+		if (revs.unpacked && has_sha1_pack(obj->sha1))
 			obj->flags |= UNINTERESTING;
 		add_parents_to_list(commit, &list);
 		if (obj->flags & UNINTERESTING) {
@@ -595,7 +594,7 @@ static struct commit_list *limit_list(st
 int main(int argc, const char **argv)
 {
 	struct commit_list *list;
-	int i, limited = 0;
+	int i;
 
 	argc = setup_revisions(argc, argv, &revs);
 
@@ -655,11 +654,6 @@ int main(int argc, const char **argv)
 			bisect_list = 1;
 			continue;
 		}
-		if (!strcmp(arg, "--unpacked")) {
-			unpacked = 1;
-			limited = 1;
-			continue;
-		}
 		if (!strcmp(arg, "--merge-order")) {
 		        merge_order = 1;
 			continue;
@@ -673,34 +667,25 @@ int main(int argc, const char **argv)
 	}
 
 	list = revs.commits;
-	if (list && list->next)
-		limited = 1;
-
-	if (revs.topo_order)
-		limited = 1;
 
 	if (!list &&
 	    (!(revs.tag_objects||revs.tree_objects||revs.blob_objects) && !revs.pending_objects))
 		usage(rev_list_usage);
 
-	if (revs.paths) {
-		limited = 1;
+	if (revs.paths)
 		diff_tree_setup_paths(revs.paths);
-	}
-	if (revs.max_age || revs.min_age)
-		limited = 1;
 
 	save_commit_buffer = verbose_header;
 	track_object_refs = 0;
 
 	if (!merge_order) {		
 		sort_by_date(&list);
-		if (list && !limited && revs.max_count == 1 &&
+		if (list && !revs.limited && revs.max_count == 1 &&
 		    !revs.tag_objects && !revs.tree_objects && !revs.blob_objects) {
 			show_commit(list->item);
 			return 0;
 		}
-	        if (limited)
+	        if (revs.limited)
 			list = limit_list(list);
 		if (revs.topo_order)
 			sort_in_topological_order(&list, revs.lifo);
diff --git a/revision.c b/revision.c
index 17dbf9a..0422593 100644
--- a/revision.c
+++ b/revision.c
@@ -143,8 +143,10 @@ static struct commit *get_commit_referen
 		object->flags |= flags;
 		if (parse_commit(commit) < 0)
 			die("unable to parse commit %s", name);
-		if (flags & UNINTERESTING)
+		if (flags & UNINTERESTING) {
 			mark_parents_uninteresting(commit);
+			revs->limited = 1;
+		}
 		return commit;
 	}
 
@@ -255,10 +257,12 @@ int setup_revisions(int argc, const char
 			}
 			if (!strncmp(arg, "--max-age=", 10)) {
 				revs->max_age = atoi(arg + 10);
+				revs->limited = 1;
 				continue;
 			}
 			if (!strncmp(arg, "--min-age=", 10)) {
 				revs->min_age = atoi(arg + 10);
+				revs->limited = 1;
 				continue;
 			}
 			if (!strcmp(arg, "--all")) {
@@ -277,11 +281,13 @@ int setup_revisions(int argc, const char
 			}
 			if (!strcmp(arg, "--topo-order")) {
 				revs->topo_order = 1;
+				revs->limited = 1;
 				continue;
 			}
 			if (!strcmp(arg, "--date-order")) {
 				revs->lifo = 0;
 				revs->topo_order = 1;
+				revs->limited = 1;
 				continue;
 			}
 			if (!strcmp(arg, "--dense")) {
@@ -309,6 +315,11 @@ int setup_revisions(int argc, const char
 				revs->edge_hint = 1;
 				continue;
 			}
+			if (!strcmp(arg, "--unpacked")) {
+				revs->unpacked = 1;
+				revs->limited = 1;
+				continue;
+			}
 			*unrecognized++ = arg;
 			left++;
 			continue;
@@ -365,6 +376,8 @@ int setup_revisions(int argc, const char
 		commit = get_commit_reference(revs, def, sha1, 0);
 		add_one_commit(commit, revs);
 	}
+	if (revs->paths)
+		revs->limited = 1;
 	*unrecognized = NULL;
 	return left;
 }
diff --git a/revision.h b/revision.h
index 5170ac4..a22f198 100644
--- a/revision.h
+++ b/revision.h
@@ -21,7 +21,9 @@ struct rev_info {
 			tag_objects:1,
 			tree_objects:1,
 			blob_objects:1,
-			edge_hint:1;
+			edge_hint:1,
+			limited:1,
+			unpacked:1;
 
 	/* special limits */
 	int max_count;
-
: 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]