X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=merge-tree.c;h=3b8d9e6887ae051bf61cc0833f97d83bb47a0bae;hb=59d10247e444b752a993cf4aa2e0665bc633d32f;hp=c2e9a867edb5b843150cd3df47583f49f15314cb;hpb=e866ffdf9b2add0e0981d19b3c212c4621fd8a57;p=git.git diff --git a/merge-tree.c b/merge-tree.c index c2e9a867e..3b8d9e688 100644 --- a/merge-tree.c +++ b/merge-tree.c @@ -57,11 +57,11 @@ extern void *merge_file(struct blob *, struct blob *, struct blob *, unsigned lo static void *result(struct merge_list *entry, unsigned long *size) { - char type[20]; + enum object_type type; struct blob *base, *our, *their; if (!entry->stage) - return read_sha1_file(entry->blob->object.sha1, type, size); + return read_sha1_file(entry->blob->object.sha1, &type, size); base = NULL; if (entry->stage == 1) { base = entry->blob; @@ -80,10 +80,10 @@ static void *result(struct merge_list *entry, unsigned long *size) static void *origin(struct merge_list *entry, unsigned long *size) { - char type[20]; + enum object_type type; while (entry) { if (entry->stage == 2) - return read_sha1_file(entry->blob->object.sha1, type, size); + return read_sha1_file(entry->blob->object.sha1, &type, size); entry = entry->link; } return NULL; @@ -177,7 +177,7 @@ static void resolve(const char *base, struct name_entry *branch1, struct name_en if (!branch1) return; - path = strdup(mkpath("%s%s", base, result->path)); + path = xstrdup(mkpath("%s%s", base, result->path)); orig = create_entry(2, branch1->mode, branch1->sha1, path); final = create_entry(0, result->mode, result->sha1, path); @@ -188,7 +188,7 @@ static void resolve(const char *base, struct name_entry *branch1, struct name_en static int unresolved_directory(const char *base, struct name_entry n[3]) { - int baselen; + int baselen, pathlen; char *newbase; struct name_entry *p; struct tree_desc t[3]; @@ -205,10 +205,11 @@ static int unresolved_directory(const char *base, struct name_entry n[3]) if (!S_ISDIR(p->mode)) return 0; baselen = strlen(base); - newbase = xmalloc(baselen + p->pathlen + 2); + pathlen = tree_entry_len(p->path, p->sha1); + newbase = xmalloc(baselen + pathlen + 2); memcpy(newbase, base, baselen); - memcpy(newbase + baselen, p->path, p->pathlen); - memcpy(newbase + baselen + p->pathlen, "/", 2); + memcpy(newbase + baselen, p->path, pathlen); + memcpy(newbase + baselen + pathlen, "/", 2); buf0 = fill_tree_descriptor(t+0, n[0].sha1); buf1 = fill_tree_descriptor(t+1, n[1].sha1); @@ -233,7 +234,7 @@ static struct merge_list *link_entry(unsigned stage, const char *base, struct na if (entry) path = entry->path; else - path = strdup(mkpath("%s%s", base, n->path)); + path = xstrdup(mkpath("%s%s", base, n->path)); link = create_entry(stage, n->mode, n->sha1, path); link->link = entry; return link; @@ -337,9 +338,11 @@ int main(int argc, char **argv) struct tree_desc t[3]; void *buf1, *buf2, *buf3; - if (argc < 4) + if (argc != 4) usage(merge_tree_usage); + setup_git_directory(); + buf1 = get_tree_descriptor(t+0, argv[1]); buf2 = get_tree_descriptor(t+1, argv[2]); buf3 = get_tree_descriptor(t+2, argv[3]);