Skip to content

Commit

Permalink
Provide a way to flush git-diff-tree's output
Browse files Browse the repository at this point in the history
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 <paulus@samba.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Paul Mackerras authored and Junio C Hamano committed May 18, 2006
1 parent 18b01f4 commit 70f75cc
Showing 1 changed file with 4 additions and 1 deletion.
5 changes: 4 additions & 1 deletion diff-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

0 comments on commit 70f75cc

Please sign in to comment.