From: Paul Mackerras Date: Thu, 18 May 2006 06:58:51 +0000 (+1000) Subject: Provide a way to flush git-diff-tree's output X-Git-Tag: v1.4.0-rc1~128 X-Git-Url: https://git.octo.it/?a=commitdiff_plain;h=70f75cc96a3c590ac1c54c09c39446626f155ef7;p=git.git Provide a way to flush git-diff-tree's output Gitk wants to use git-diff-tree as a filter to tell it which ids from a given list affect a set of files or directories. We don't want to fork and exec a new git-diff-tree process for each batch of ids, since there could be a lot of relatively small batches. For example, a batch could contain as many ids as fit in gitk's headline display window, i.e. 20 or so, and we would be processing a new batch every time the user scrolls that window. The --stdin flag to git-diff-tree is suitable for this, but the main difficulty is that the output of git-diff-tree gets buffered and doesn't get sent until the buffer is full. This provides a way to get git-diff-tree to flush its output buffers. If a blank line is supplied on git-diff-tree's standard input, it will flush its output buffers and then accept further input. Signed-off-by: Paul Mackerras Signed-off-by: Junio C Hamano --- diff --git a/diff-tree.c b/diff-tree.c index 7207867a..69bb74b3 100644 --- a/diff-tree.c +++ b/diff-tree.c @@ -138,7 +138,10 @@ int main(int argc, const char **argv) opt->diffopt.setup |= (DIFF_SETUP_USE_SIZE_CACHE | DIFF_SETUP_USE_CACHE); while (fgets(line, sizeof(line), stdin)) - diff_tree_stdin(line); + if (line[0] == '\n') + fflush(stdout); + else + diff_tree_stdin(line); return 0; }