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; } - To unsubscribe from this list: 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