git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <gitster@pobox.com>
To: Miklos Vajna <vmiklos@frugalware.org>
Cc: git@vger.kernel.org, Stephan Beyer <s-beyer@gmx.net>,
	Alex Riesen <raa.lkml@gmail.com>,
	Johannes Schindelin <Johannes.Schindelin@gmx.de>
Subject: Re: [PATCH 2/2] merge-recursive: move make_virtual_commit()'s virtual_id to merge_options
Date: Thu, 04 Sep 2008 12:03:08 -0700	[thread overview]
Message-ID: <7vy7273f9v.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: f2a1ff8d2fe354265a80534cd7beaaa95c2ffc54.1220463034.git.vmiklos@frugalware.org

I do not think this one is a good idea.

What does it mean for a two "virtual commits" that are returned from
separate calls to make_virtual_commit() to have the same virtual_id?

I do not know offhand if the existing code does something like:

	commit = lookup_commit(commit->object.sha1)

or

	if (hashcmp(commit1->object.sha1, commit2->object.sha1))
        	...

but if there is such a code, I think this change makes the problem
"virtual id" has even worse.  With the current single function local
static "virtual_id", at least during a program's lifetime it is guaranteed
that there won't be any two instances of virtual commits created for
different purposes that share the same (fake) sha1 value.  If you call
merge_recursive more than once in your process, using a fresh "struct
merge_options" each time, that guarantee is lost with your change.

The only purpose of a "virtual commit", as I understand it, is to allow
you to pass a tree resulting from an internal merge to a function that
expects you to call with three commit objects to come up with a new tree
that is the result of the merge.  The code stores a "virtual_id" as a
phoney sha1 value in the object, but I do not think the actual value is
used for anything but debugging purposes (Alex, Dscho, please correct me
as necessary).

Does it hurt if we get rid of virtual_id and always leave the
object->sha1 field of virtual commits 0{40} as it is initialized?

I further suspect we _could_ fix the API that requires you to pass three
commits to accept three trees instead and get rid of virtual commits
altogether, but then we would lose an easy access to the message of
commits that are being merged, and we would need to pass these strings as
separate parameters (or part of merge_options) --- which might be a good
clean-up in a longer run, but I do not think it is absolutely necessary
during this round.

  reply	other threads:[~2008-09-04 19:04 UTC|newest]

Thread overview: 35+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-08-19  9:05 What's cooking in git.git (Aug 2008, #05; Tue, 19) Junio C Hamano
2008-08-19 11:02 ` Johannes Sixt
2008-08-19 12:35   ` Andreas Färber
2008-08-19 12:54 ` Miklos Vajna
2008-08-19 19:19   ` Junio C Hamano
2008-08-19 20:59     ` Miklos Vajna
2008-08-19 22:00       ` Junio C Hamano
2008-08-20 22:42         ` Miklos Vajna
2008-08-25  1:44         ` [PATCH] merge-recursive: introduce merge_options Miklos Vajna
2008-08-25  6:06           ` Junio C Hamano
2008-08-25 14:25             ` Miklos Vajna
2008-08-28  4:50               ` Junio C Hamano
2008-08-30 15:42               ` [PATCH] merge-recursive: fix subtree merge Miklos Vajna
2008-08-30 16:39                 ` Junio C Hamano
2008-08-30 17:55                 ` Junio C Hamano
2008-08-31 23:49                   ` Miklos Vajna
2008-09-01  1:06         ` What's cooking in git.git (Aug 2008, #05; Tue, 19) Miklos Vajna
2008-09-01  1:09           ` [PATCH] builtin-revert: use merge_recursive_generic() Miklos Vajna
2008-09-02 20:02           ` What's cooking in git.git (Aug 2008, #05; Tue, 19) Junio C Hamano
2008-09-02 20:43             ` Junio C Hamano
2008-09-02 22:05             ` [PATCH 0/2] Move call_depth and index_only to struct merge_options Miklos Vajna
2008-09-02 22:05               ` [PATCH 1/2] merge-recursive: move call_depth " Miklos Vajna
2008-09-02 22:05                 ` [PATCH 2/2] merge-recursive: move index_only " Miklos Vajna
2008-09-02 22:13                 ` [PATCH] Makefile: add merge_recursive.h to LIB_H Miklos Vajna
2008-09-02 22:39                   ` Junio C Hamano
2008-09-02 23:49                     ` Miklos Vajna
2008-09-02 22:39               ` [PATCH 0/2] Move call_depth and index_only to struct merge_options Junio C Hamano
2008-09-03  0:16                 ` [PATCH] merge-recursive: get rid of the index_only global variable Miklos Vajna
2008-09-03  0:39                 ` [PATCH] merge-recursive: move the global obuf to struct merge_options Miklos Vajna
2008-09-03 17:34                   ` Miklos Vajna
2008-09-03 17:34                     ` [PATCH 1/2] merge-recursive: move current_{file,directory}_set " Miklos Vajna
2008-09-03 17:34                       ` [PATCH 2/2] merge-recursive: move make_virtual_commit()'s virtual_id to merge_options Miklos Vajna
2008-09-04 19:03                         ` Junio C Hamano [this message]
2008-09-05 17:26                           ` [PATCH] merge-recursive: get rid of virtual_id Miklos Vajna
2008-09-04 19:05                     ` [PATCH] merge-recursive: move the global obuf to struct merge_options Junio C Hamano

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vy7273f9v.fsf@gitster.siamese.dyndns.org \
    --to=gitster@pobox.com \
    --cc=Johannes.Schindelin@gmx.de \
    --cc=git@vger.kernel.org \
    --cc=raa.lkml@gmail.com \
    --cc=s-beyer@gmx.net \
    --cc=vmiklos@frugalware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).