summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: e11b29c)
raw | patch | inline | side by side (parent: e11b29c)
author | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Wed, 18 May 2005 20:06:47 +0000 (13:06 -0700) | ||
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Wed, 18 May 2005 20:06:47 +0000 (13:06 -0700) |
Split it into the "one commit" vs "two trees" case, since we'll
want to use the "one commit" case for other things too.
want to use the "one commit" case for other things too.
diff-tree.c | patch | blob | history |
diff --git a/diff-tree.c b/diff-tree.c
index 51e3274f36dd7792fdbd20fdde4f4e7546f3b10b..24b24dcfd0551405587c7cf4238f5ccae1297cd7 100644 (file)
--- a/diff-tree.c
+++ b/diff-tree.c
@@ -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;
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 =