Thread (70 messages) flat view 70 messages, 15 authors, 2016-06-15

Re: Git is not scalable with too many refs/*

From: Martin Fick <hidden>
Date: 2016-06-15 22:52:09

Possibly related (same subject, not in this thread)

On Friday, September 30, 2011 03:12:08 am René Scharfe 
wrote:
OK, and what happens if you apply the following patch on
top of my first one?  It avoids going through all the
refs a second time during cleanup, at the cost of going
through the list of all known objects.  I wonder if
that's any faster in your case.

This patch helps a bit more.  It seems to shave about 
another .5s off in packed and non packed case w or w/o 
binary search.

-Martin


quoted hunk ↗ jump to hunk
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 84e0cdc..a4b1003 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -596,15 +596,14 @@ static int
add_pending_uninteresting_ref(const char *refname,
return 0;
 }

-static int clear_commit_marks_from_one_ref(const char
*refname, -				      const unsigned 
char *sha1,
-				      int flags,
-				      void *cb_data)
+static void clear_commit_marks_for_all(unsigned int
mark) {
-	struct commit *commit =
lookup_commit_reference_gently(sha1, 1); -	if (commit)
-		clear_commit_marks(commit, -1);
-	return 0;
+	unsigned int i, max = get_max_object_index();
+	for (i = 0; i < max; i++) {
+		struct object *object = 
get_indexed_object(i);
+		if (object && object->type == OBJ_COMMIT)
+			object->flags &= ~mark;
+	}
 }

 static void describe_one_orphan(struct strbuf *sb,
struct commit *commit) @@ -690,8 +689,7 @@ static void
orphaned_commit_warning(struct commit *commit) else
 		describe_detached_head(_("Previous HEAD 
position
was"), commit);

-	clear_commit_marks(commit, -1);
-	for_each_ref(clear_commit_marks_from_one_ref, NULL);
+	clear_commit_marks_for_all(ALL_REV_FLAGS);
 }

 static int switch_branches(struct checkout_opts *opts,
struct branch_info *new) --
To unsubscribe from this list: send the line "unsubscribe
git" in the body of a message to
majordomo@vger.kernel.org More majordomo info at 
http://vger.kernel.org/majordomo-info.html
-- 
Employee of Qualcomm Innovation Center, Inc. which is a 
member of Code Aurora Forum
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help