git-commit-vandalism/builtin
Junio C Hamano 0b10b8a3d5 merge: clarify collect_parents() logic
Clarify this small function in three ways.

 - The function initially collects all commits to be merged into a
   commit_list "remoteheads"; the "remotes" pointer always points at
   the tail of this list (either the remoteheads variable itself, or
   the ->next slot of the element at the end of the list) to help
   elongate the list by repeated calls to commit_list_insert().
   Because the new element appended by commit_list_insert() will
   always have its ->next slot NULLed out, there is no need for us
   to assign NULL to *remotes to terminate the list at the end.

 - The variable "head_subsumed" always confused me every time I read
   this code.  What is happening here is that we inspect what the
   caller told us to merge (including the current HEAD) and come up
   with the list of parents to be recorded for the resulting merge
   commit, omitting commits that are ancestor of other commits.
   This filtering may remove the current HEAD from the resulting
   parent list---and we signal that fact with this variable, so that
   we can later record it as the first parent when "--no-ff" is in
   effect.

 - The "parents" list is created for this function by reduce_heads()
   and was not deallocated after its use, even though the loop
   control was written in such a way to allow us to do so by taking
   the "next" element in a separate variable so that it can be used
   in the next-step part of the loop control.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
2015-04-29 13:17:53 -07:00
..
add.c add: ignore only ignored files 2014-11-21 10:19:14 -08:00
annotate.c
apply.c Merge branch 'rs/more-uses-of-skip-prefix' 2014-10-14 10:50:07 -07:00
archive.c
bisect--helper.c
blame.c refs.c: change resolve_ref_unsafe reading argument to be a flags field 2014-10-15 10:47:24 -07:00
branch.c Merge branch 'rs/ref-transaction' 2014-10-21 13:28:10 -07:00
bundle.c
cat-file.c use skip_prefix() to avoid more magic numbers 2014-10-07 11:09:16 -07:00
check-attr.c Merge branch 'jc/check-attr-honor-working-tree' 2014-03-14 14:06:00 -07:00
check-ignore.c
check-mailmap.c
check-ref-format.c
checkout-index.c lockfile.h: extract new header file for the functions in lockfile.c 2014-10-01 13:56:14 -07:00
checkout.c Merge branch 'jk/checkout-from-tree' into maint 2014-12-22 12:16:30 -08:00
clean.c clean: typofix 2014-12-22 09:57:42 -08:00
clone.c Merge branch 'eb/no-pthreads' 2014-10-24 14:59:10 -07:00
column.c
commit-tree.c
commit.c Merge branch 'rs/ref-transaction' 2014-10-21 13:28:10 -07:00
config.c Merge branch 'jk/colors-fix' into maint 2014-12-22 12:16:58 -08:00
count-objects.c count-objects: use for_each_loose_file_in_objdir 2014-10-16 10:10:41 -07:00
credential.c
describe.c lockfile.h: extract new header file for the functions in lockfile.c 2014-10-01 13:56:14 -07:00
diff-files.c
diff-index.c
diff-tree.c diff-tree: avoid lookup_unknown_object 2014-07-28 10:14:34 -07:00
diff.c lockfile.h: extract new header file for the functions in lockfile.c 2014-10-01 13:56:14 -07:00
fast-export.c teach fast-export an --anonymize option 2014-08-27 10:42:16 -07:00
fetch-pack.c
fetch.c Merge branch 'jk/fetch-reflog-df-conflict' 2014-11-06 10:52:32 -08:00
fmt-merge-msg.c refs.c: change resolve_ref_unsafe reading argument to be a flags field 2014-10-15 10:47:24 -07:00
for-each-ref.c Merge branch 'rs/ref-transaction' 2014-10-21 13:28:10 -07:00
fsck.c refs.c: change resolve_ref_unsafe reading argument to be a flags field 2014-10-15 10:47:24 -07:00
gc.c lockfile.h: extract new header file for the functions in lockfile.c 2014-10-01 13:56:14 -07:00
get-tar-commit-id.c use skip_prefix() to avoid more magic numbers 2014-10-07 11:09:16 -07:00
grep.c make add_object_array_with_context interface more sane 2014-10-16 10:10:44 -07:00
hash-object.c hash-object: add --literally option 2014-09-11 14:23:51 -07:00
help.c doc: add 'everyday' to 'git help' 2014-10-10 16:02:26 -07:00
index-pack.c index-pack: fix compilation with NO_PTHREADS 2014-10-13 12:33:30 -07:00
init-db.c Merge branch 'mh/config-flip-xbit-back-after-checking' into maint 2014-12-22 12:18:00 -08:00
interpret-trailers.c trailer: add interpret-trailers command 2014-10-13 13:55:27 -07:00
log.c Merge branch 'rs/ref-transaction' 2014-10-21 13:28:10 -07:00
ls-files.c grammofix in user-facing messages 2014-09-02 12:00:30 -07:00
ls-remote.c
ls-tree.c
mailinfo.c mailinfo: work around -Wstring-plus-int warning 2014-09-22 13:46:43 -07:00
mailsplit.c mailsplit: remove unnecessary unlink(2) call 2014-10-07 10:49:57 -07:00
merge-base.c
merge-file.c
merge-index.c
merge-ours.c
merge-recursive.c
merge-tree.c merge-tree: remove unused df_conflict arguments 2014-09-02 11:02:58 -07:00
merge.c merge: clarify collect_parents() logic 2015-04-29 13:17:53 -07:00
mktag.c
mktree.c
mv.c lockfile.h: extract new header file for the functions in lockfile.c 2014-10-01 13:56:14 -07:00
name-rev.c
notes.c refs.c: change resolve_ref_unsafe reading argument to be a flags field 2014-10-15 10:47:24 -07:00
pack-objects.c Merge branch 'jk/pack-objects-no-bitmap-when-splitting' into maint 2014-10-29 10:35:17 -07:00
pack-redundant.c
pack-refs.c
patch-id.c
prune-packed.c prune-packed: use for_each_loose_file_in_objdir 2014-10-16 10:10:40 -07:00
prune.c prune: keep objects reachable from recent objects 2014-10-16 10:10:42 -07:00
push.c Merge branch 'jk/push-simple' into maint 2014-12-22 12:18:08 -08:00
read-tree.c lockfile.h: extract new header file for the functions in lockfile.c 2014-10-01 13:56:14 -07:00
receive-pack.c Merge branch 'rs/receive-pack-use-labs' into maint 2014-12-22 12:17:32 -08:00
reflog.c Merge branch 'jk/prune-mtime' 2014-10-29 10:07:56 -07:00
remote-ext.c use skip_prefix() to avoid more magic numbers 2014-10-07 11:09:16 -07:00
remote-fd.c
remote.c remote rm/prune: print a message when writing packed-refs fails 2014-10-15 10:47:26 -07:00
repack.c repack: pack objects mentioned by the index 2014-10-19 15:07:07 -07:00
replace.c refs.c: pass the ref log message to _create/delete/update instead of _commit 2014-10-15 10:47:22 -07:00
rerere.c
reset.c lockfile.h: extract new header file for the functions in lockfile.c 2014-10-01 13:56:14 -07:00
rev-list.c
rev-parse.c refs: make rev-parse --quiet actually quiet 2014-09-19 10:46:15 -07:00
revert.c
rm.c lockfile.h: extract new header file for the functions in lockfile.c 2014-10-01 13:56:14 -07:00
send-pack.c Merge branch 'jc/push-cert' 2014-10-08 13:05:25 -07:00
shortlog.c
show-branch.c refs.c: change resolve_ref_unsafe reading argument to be a flags field 2014-10-15 10:47:24 -07:00
show-ref.c
stripspace.c
symbolic-ref.c refs.c: change resolve_ref_unsafe reading argument to be a flags field 2014-10-15 10:47:24 -07:00
tag.c refs.c: pass the ref log message to _create/delete/update instead of _commit 2014-10-15 10:47:22 -07:00
unpack-file.c
unpack-objects.c fsck_object(): allow passing object data separately from the object itself 2014-09-10 13:54:21 -07:00
update-index.c lockfile.h: extract new header file for the functions in lockfile.c 2014-10-01 13:56:14 -07:00
update-ref.c refs.c: pass the ref log message to _create/delete/update instead of _commit 2014-10-15 10:47:22 -07:00
update-server-info.c
upload-archive.c
var.c
verify-commit.c
verify-pack.c run-command: introduce CHILD_PROCESS_INIT 2014-08-20 09:53:37 -07:00
verify-tag.c
write-tree.c