Skip to content

Commit

Permalink
diff-tree: clean up diff_tree_stdin() function
Browse files Browse the repository at this point in the history
Split it into the "one commit" vs "two trees" case, since we'll
want to use the "one commit" case for other things too.
  • Loading branch information
Linus Torvalds committed May 18, 2005
1 parent e11b29c commit b11645b
Showing 1 changed file with 27 additions and 21 deletions.
48 changes: 27 additions & 21 deletions diff-tree.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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 =
Expand Down

0 comments on commit b11645b

Please sign in to comment.