mirror of
https://github.com/git/git.git
synced 2024-11-18 03:14:02 +01:00
d1df574380
This patch introduces a new program, diff-tree-helper. It reads output from diff-cache and diff-tree, and produces a patch file. The diff format customization can be done the same way the show-diff uses; the same external diff interface introduced by the previous patch to drive diff from show-diff is used so this is not surprising. It is used like the following examples: $ diff-cache --cached -z <tree> | diff-tree-helper -z -R paths... $ diff-tree -r -z <tree1> <tree2> | diff-tree-helper -z paths... - As usual, the use of the -z flag is recommended in the script to pass NUL-terminated filenames through the pipe between commands. - The -R flag is used to generate reverse diff. It does not matter for diff-tree case, but it is sometimes useful to get a patch in the desired direction out of diff-cache. - The paths parameters are used to restrict the paths that appears in the output. Again this is useful to use with diff-cache, which, unlike diff-tree, does not take such paths restriction parameters. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
44 lines
771 B
C
44 lines
771 B
C
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "strbuf.h"
|
|
|
|
void strbuf_init(struct strbuf *sb) {
|
|
sb->buf = 0;
|
|
sb->eof = sb->alloc = sb->len = 0;
|
|
}
|
|
|
|
static void strbuf_begin(struct strbuf *sb) {
|
|
free(sb->buf);
|
|
strbuf_init(sb);
|
|
}
|
|
|
|
static void inline strbuf_add(struct strbuf *sb, int ch) {
|
|
if (sb->alloc <= sb->len) {
|
|
sb->alloc = sb->alloc * 3 / 2 + 16;
|
|
sb->buf = realloc(sb->buf, sb->alloc);
|
|
}
|
|
sb->buf[sb->len++] = ch;
|
|
}
|
|
|
|
static void strbuf_end(struct strbuf *sb) {
|
|
strbuf_add(sb, 0);
|
|
}
|
|
|
|
void read_line(struct strbuf *sb, FILE *fp, int term) {
|
|
int ch;
|
|
strbuf_begin(sb);
|
|
if (feof(fp)) {
|
|
sb->eof = 1;
|
|
return;
|
|
}
|
|
while ((ch = fgetc(fp)) != EOF) {
|
|
if (ch == term)
|
|
break;
|
|
strbuf_add(sb, ch);
|
|
}
|
|
if (sb->len == 0)
|
|
sb->eof = 1;
|
|
strbuf_end(sb);
|
|
}
|
|
|