diff options
author | Rene Scharfe <rene.scharfe@lsrfire.ath.cx> | 2006-10-26 18:52:39 +0200 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2006-10-26 18:31:17 -0700 |
commit | 2b60356da5369dd60ab26eabaa91d95b6badf209 (patch) | |
tree | cbbdf8cbe6ef081f5e2d48c5d24d7fe283f443c4 /log-tree.c | |
parent | e827633a5d7d627eb1170b2d0c71e944d0d56faf (diff) | |
download | git-2b60356da5369dd60ab26eabaa91d95b6badf209.tar.gz git-2b60356da5369dd60ab26eabaa91d95b6badf209.tar.xz |
Make git-cherry handle root trees
This patch on top of 'next' makes built-in git-cherry handle root
commits.
It moves the static function log-tree.c::diff_root_tree() to
tree-diff.c and makes it more similar to diff_tree_sha1() by
shuffling around arguments and factoring out the call to
log_tree_diff_flush(). Consequently the name is changed to
diff_root_tree_sha1(). It is a version of diff_tree_sha1() that
compares the empty tree (= root tree) against a single 'real' tree.
This function is then used in get_patch_id() to compute patch IDs
for initial commits instead of SEGFAULTing, as the current code
does if confronted with parentless commits.
Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'log-tree.c')
-rw-r--r-- | log-tree.c | 26 |
1 files changed, 4 insertions, 22 deletions
diff --git a/log-tree.c b/log-tree.c index fbe139920..8787df5cc 100644 --- a/log-tree.c +++ b/log-tree.c @@ -252,26 +252,6 @@ int log_tree_diff_flush(struct rev_info *opt) return 1; } -static int diff_root_tree(struct rev_info *opt, - const unsigned char *new, const char *base) -{ - int retval; - void *tree; - struct tree_desc empty, real; - - tree = read_object_with_reference(new, tree_type, &real.size, NULL); - if (!tree) - die("unable to read root tree (%s)", sha1_to_hex(new)); - real.buf = tree; - - empty.buf = ""; - empty.size = 0; - retval = diff_tree(&empty, &real, base, &opt->diffopt); - free(tree); - log_tree_diff_flush(opt); - return retval; -} - static int do_diff_combined(struct rev_info *opt, struct commit *commit) { unsigned const char *sha1 = commit->object.sha1; @@ -297,8 +277,10 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log /* Root commit? */ parents = commit->parents; if (!parents) { - if (opt->show_root_diff) - diff_root_tree(opt, sha1, ""); + if (opt->show_root_diff) { + diff_root_tree_sha1(sha1, "", &opt->diffopt); + log_tree_diff_flush(opt); + } return !opt->loginfo; } |