On Wed, 10 Jan 2007 11:28:14 -0800 Junio C Hamano wrote: > From: Junio C Hamano <junkio@xxxxxxx> > Date: Wed, 10 Jan 2007 11:20:58 -0800 > Subject: [PATCH] merge-recursive: do not use on-file index when not needed. > > This revamps the merge-recursive implementation following the > outline in: > > Message-ID: <7v8xgileza.fsf@xxxxxxxxxxxxxxxxxxxxxxxx> > > There is no need to write out the index until the very end just > once from merge-recursive. Also there is no need to write out > the resulting tree object for the simple case of merging with a > single merge base. > > Signed-off-by: Junio C Hamano <junkio@xxxxxxx> This commit broke t3401-rebase-partial.sh: ... * ok 3: rebase topic branch against new master and check git-am did not get halted * expecting success: git-checkout -f my-topic-branch-merge && git-rebase --merge master-merge && test ! -d .git/.dotest-merge First, rewinding head to replay your work on top of it... HEAD is now at 5f97179... Add C. Merging master-merge with my-topic-branch-merge~1 Merging: 5f97179 Add C. 1be2c8e Add B. found 1 common ancestor(s): 0e8cba9 Add A. .../git-rebase: line 82: 11517 Segmentation fault git-merge-$strategy "$cmt^" -- "$hd" "$cmt" Unknown exit code (139) from command: git-merge-recursive 1be2c8e0eba8a7a383d0403facb1c72c622c0939^ -- HEAD 1be2c8e0eba8a7a383d0403facb1c72c622c0939 * FAIL 4: rebase --merge topic branch that was partially merged upstream git-checkout -f my-topic-branch-merge && git-rebase --merge master-merge && test ! -d .git/.dotest-merge * failed 1 among 4 test(s) > @@ -1105,9 +1040,7 @@ static int merge_trees(struct tree *head, > sha1_to_hex(head->object.sha1), > sha1_to_hex(merge->object.sha1)); > > - *result = git_write_tree(); Previously *result was set here... > - > - if (!*result) { > + if (unmerged_index()) { > struct path_list *entries, *re_head, *re_merge; > int i; > path_list_clear(¤t_file_set, 1); > @@ -1128,17 +1061,11 @@ static int merge_trees(struct tree *head, > if (!process_entry(path, e, branch1, branch2)) > clean = 0; > } > - if (cache_dirty) > - flush_cache(); > > path_list_clear(re_merge, 0); > path_list_clear(re_head, 0); > path_list_clear(entries, 1); > > - if (clean || index_only) > - *result = git_write_tree(); > - else > - *result = NULL; > } else { > clean = 1; > printf("merging of trees %s and %s resulted in %s\n", > @@ -1146,6 +1073,8 @@ static int merge_trees(struct tree *head, > sha1_to_hex(merge->object.sha1), > sha1_to_hex((*result)->object.sha1)); ...and it is still used here - however, after the patch *result is uninitialized at this point. > } > + if (index_only) > + *result = git_write_tree(); Too late... > > return clean; > }
Attachment:
pgp7KAEx4gBzL.pgp
Description: PGP signature