summaryrefslogtreecommitdiff
path: root/diff-tree.c
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2006-05-18 06:58:51 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-05-18 07:25:50 (GMT)
commit70f75cc96a3c590ac1c54c09c39446626f155ef7 (patch)
tree88a7314b1be7d8d782268f33197e09fbd98c3ba6 /diff-tree.c
parent18b01f4ff6db66b6419c7501bb303b643638b297 (diff)
downloadgit-70f75cc96a3c590ac1c54c09c39446626f155ef7.zip
git-70f75cc96a3c590ac1c54c09c39446626f155ef7.tar.gz
git-70f75cc96a3c590ac1c54c09c39446626f155ef7.tar.bz2
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 <paulus@samba.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'diff-tree.c')
-rw-r--r--diff-tree.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/diff-tree.c b/diff-tree.c
index 7207867..69bb74b 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;
}