Browse Source

diff-tree: clean up diff_tree_stdin() function

Split it into the "one commit" vs "two trees" case, since we'll
want to use the "one commit" case for other things too.
maint
Linus Torvalds 20 years ago
parent
commit
b11645be01
  1. 48
      diff-tree.c

48
diff-tree.c

@ -342,27 +342,11 @@ static char *generate_header(const char *commit, const char *parent, const char @@ -342,27 +342,11 @@ static char *generate_header(const char *commit, const char *parent, const char
return this_header;
}

static int diff_tree_stdin(char *line)
static int diff_tree_commit(const unsigned char *commit, const char *name)
{
int len = strlen(line);
unsigned char commit[20], parent[20];
unsigned long size, offset;
static char this_header[1000];
char *buf;
char *buf = read_object_with_reference(commit, "commit", &size, NULL);

if (!len || line[len-1] != '\n')
return -1;
line[len-1] = 0;
if (get_sha1_hex(line, commit))
return -1;
if (isspace(line[40]) && !get_sha1_hex(line+41, parent)) {
line[40] = 0;
line[81] = 0;
sprintf(this_header, "%s (from %s)\n", line, line+41);
header = this_header;
return diff_tree_sha1(parent, commit, "");
}
buf = read_object_with_reference(commit, "commit", &size, NULL);
if (!buf)
return -1;

@ -372,18 +356,40 @@ static int diff_tree_stdin(char *line) @@ -372,18 +356,40 @@ static int diff_tree_stdin(char *line)
return 0;
}

line[40] = 0;
offset = 46;
while (offset + 48 < size && !memcmp(buf + offset, "parent ", 7)) {
unsigned char parent[20];
if (get_sha1_hex(buf + offset + 7, parent))
return -1;
header = generate_header(line, sha1_to_hex(parent), buf, size);
header = generate_header(name, sha1_to_hex(parent), buf, size);
diff_tree_sha1(parent, commit, "");
if (!header && verbose_header)
header_prefix = "\ndiff-tree ";
offset += 48;
}
return -1;
return 0;
}

static int diff_tree_stdin(char *line)
{
int len = strlen(line);
unsigned char commit[20], parent[20];
static char this_header[1000];

if (!len || line[len-1] != '\n')
return -1;
line[len-1] = 0;
if (get_sha1_hex(line, commit))
return -1;
if (isspace(line[40]) && !get_sha1_hex(line+41, parent)) {
line[40] = 0;
line[81] = 0;
sprintf(this_header, "%s (from %s)\n", line, line+41);
header = this_header;
return diff_tree_sha1(parent, commit, "");
}
line[40] = 0;
return diff_tree_commit(commit, line);
}

static char *diff_tree_usage =

Loading…
Cancel
Save