git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] cogito: Avoid slowness when timewarping large trees.

From
Jeff King <peff@peff.net>
Date
Mar 24, 2006, 08:44 UTC
Message-ID
<20060324084423.GA30213@coredump.intra.peff.net>

tree_timewarp was calling read, egrep, and rm in an O(N) loop where N is the number of changed files between two trees. This caused a bottleneck when seeking/switching/merging between trees with many changed files.

On the historical linux tree, the time to cg-seek from the head to the initial commit (a change of 19099 files) dropped from 2m35s to 21s.

---
 cg-Xlib |    9 +++------
 1 files changed, 3 insertions(+), 6 deletions(-)
a9a160c0bd63973c53ba3aa74650728135d23ac7
diff --git a/cg-Xlib b/cg-Xlib
index a2f28cf..ceddeeb 100644
--- a/cg-Xlib
+++ b/cg-Xlib
@@ -345,12 +345,9 @@ tree_timewarp()
 
 	# Kill gone files
 	git-diff-tree -r "$base" "$branch" |
-		while IFS=$'\t' read header file; do
-			# match ":100755 000000 14d43b1abf... 000000000... D"
-			if echo "$header" | egrep "^:([^ ][^ ]* ){4}D" >/dev/null; then
-				rm -- "$file"
-			fi
-		done
+		# match ":100755 000000 14d43b1abf... 000000000... D"
+		sed -ne 's/^:\([^ ][^ ]* \)\{4\}D\t//p' |
+		xargs rm --
 	git-checkout-index -u -f -a
 
 	# FIXME: Can produce bogus "contains only garbage" messages.
-- 
1.2.4
Next: Junio C Hamano
Message 1 of 10 in “cogito: Avoid slowness when timewarping large trees.”
  1. cogito: Avoid slowness when timewarping large trees.Jeff King, Mar 24, 2006
  2. Junio C HamanoMar 24, 2006
  3. Jeff KingMar 24, 2006
  4. Junio C HamanoMar 24, 2006
  5. Jeff KingMar 24, 2006
  6. Shawn PearceMar 24, 2006
  7. Jeff KingMar 25, 2006
  8. Avoid slowness when timewarping large trees.Jeff King, Mar 25, 2006
  9. Petr BaudisMar 26, 2006
  10. Junio C HamanoMar 25, 2006

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.