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

Be more verbose when checkout takes a long time

From
Linus Torvalds <torvalds@linux-foundation.org>
Date
Feb 23, 2008, 21:36 UTC
Message-ID
<alpine.LFD.1.00.0802231323590.21332@woody.linux-foundation.org>

So I find it irritating when git thinks for a long time without telling me what's taking so long. And by "long time" I definitely mean less than two seconds, which is already way too long for me.

This hits me when doing a large pull and the checkout takes a long time, or when just switching to another branch that is old and again checkout takes a while.

Now, git read-tree already had support for the "-v" flag that does nice updates about what's going on, but it was delayed by two seconds, and if the thing had already done more than half by then it would be quiet even after that, so in practice it meant that we migth be quiet for up to four seconds. Much too long.

So this patch changes the timeout to just one second, which makes it much more palatable to me.

The other thing this patch does is that "git checkout" now doesn't disable the "-v" flag when doing its thing, and only disables the output when given the -q flag. Quite frankly, I'm not really sure why it disabled error messages in the first place: it used to do

	merge_error=$(git read-tree .. 2>&1) || (
		case "$merge" in
		'')
			echo >&2 "$merge_error"
			exit 1 ;;
		...

which obviously meant that the "-v" flag was useless, because it was suppressed by the fact that any outpu just went to "merge_error" and then printed just once if we didn't do a merge.

Now, I'm sure this had a good reason (for the "git checkout -m" case), but it did make the common case of git-checkout really annoying. So I just removed that whole "suppress error messages from git-read-tree" thing. People who use -m all the time probably disagree with this patch. I dunno.

Anyway, with this I no longer get that annoying pregnant pause when doing big branch switches.

Comments?
		Linus
---
 git-checkout.sh |    3 +--
 unpack-trees.c  |    2 +-
 2 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/git-checkout.sh b/git-checkout.sh
index bd74d70..4b07fc4 100755
--- a/git-checkout.sh
+++ b/git-checkout.sh
@@ -210,10 +210,9 @@ then
     git read-tree $v --reset -u $new
 else
     git update-index --refresh >/dev/null
-    merge_error=$(git read-tree -m -u --exclude-per-directory=.gitignore $old $new 2>&1) || (
+    git read-tree $v -m -u --exclude-per-directory=.gitignore $old $new || (
 	case "$merge" in
 	'')
-		echo >&2 "$merge_error"
 		exit 1 ;;
 	esac
 
diff --git a/unpack-trees.c b/unpack-trees.c
index ec558f9..0f62609 100644
--- a/unpack-trees.c
+++ b/unpack-trees.c
@@ -301,7 +301,7 @@ static void check_updates(struct cache_entry **src, int nr,
 		}
 
 		progress = start_progress_delay("Checking out files",
-						total, 50, 2);
+						total, 50, 1);
 		cnt = 0;
 	}
 
Next: Junio C Hamano
Message 1 of 7 in “Be more verbose when checkout takes a long time”
  1. Linus TorvaldsFeb 23, 2008
  2. Junio C HamanoFeb 23, 2008
  3. Linus TorvaldsFeb 23, 2008
  4. Junio C HamanoFeb 23, 2008
  5. Junio C HamanoFeb 23, 2008
  6. checkout: error out when index is unmerged even with -mJunio C Hamano, Feb 23, 2008
  7. Daniel BarkalowFeb 24, 2008

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.