From: Junio C Hamano <gitster@pobox.com>
To: Mike Hommey <mh@glandium.org>
Cc: git@vger.kernel.org
Subject: Re: [PATCH] Allow to control the namespace for replace refs
Date: Wed, 10 Jun 2015 21:55:30 -0700 [thread overview]
Message-ID: <xmqqlhfqhmil.fsf@gitster.dls.corp.google.com> (raw)
In-Reply-To: <1433987235-17385-1-git-send-email-mh@glandium.org> (Mike Hommey's message of "Thu, 11 Jun 2015 10:47:15 +0900")
Mike Hommey <mh@glandium.org> writes:
> It can be useful to have grafts or replace refs for specific use-cases while
> keeping the default "view" of the repository pristine (or with a different
> set of grafts/replace refs).
>
> It is possible to use a different graft file with GIT_GRAFT_FILE, but while
> replace refs are more powerful, they don't have an equivalent override.
>
> Add a GIT_REPLACE_NAMESPACE environment variable to control where git is
> going to look for replace refs.
>
> Signed-off-by: Mike Hommey <mh@glandium.org>
> ---
>
> I'm not sure if I need to care about avoiding strlen in log-tree.c, or if I
> should handle the lack of a / at the end of GIT_REPLACE_NAMESPACE.
First, let me agree with you that being able to say "I usually use
refs/replace/ hierarchy as my object replacement database, but for
this particular invocation of Git (or 'all Git invocations from this
subprocess' for that matter), I want to use refs/replace-2/ hierarchy
instead" is a good thing.
I however doubt that it is a good idea to use the word "namespace"
anywhere in the name for that mechanism. Let me explain, and please
listen with skepticism, as I do not use the ref namespace mechanism
myself---it is entirely possible that my understanding of how the
ref namespace mechanism is meant to be used is faulty, and if that
is the case please correct me.
The ref namespace mechanism is to be used when you want to serve one
or more "virtual repositories" via upload-pack/receive-pack server
side programs from a single repository. By having two hierarchies,
each of which is similar to the usual HEAD, refs/heads/, refs/tags/,
etc., under refs/namespaces/a and refs/namespaces/b, you can allow
two instances of upload-pack to serve two "virtual repositories".
What is in refs/namespaces/a/{HEAD,refs/heads/*,refs/tags/*,...} is
exposed by one instance of upload-pack to its clients as if they are
the entire world (i.e. HEAD,refs/heads/*,refs/tags/*,...), the other
one does the same to its clients from refs/namespaces/b/*. And they
do share the same object store (thereby allowing you to implement a
cheap "forks" without having to worry about object borrowing).
The usual server side housekeeping such as "gc" can and must be
arranged to happen without limiting them to either namespace, so
that anything reachable by any ref from either "virtual repository"
will be retained.
Now, does the "For this invocation, please use refs/replace-2/ as
the object replacement database" feature have anything common to the
ref namespace mechanism? I do not see any commonality, and that is
why I do not think it is a good idea to use that word. It will
confuse the users and the developers alike.
To me, this mechanism looks very similar to the way you specify a
non-default notes tree is to be used with the --notes=<ref>
parameter, core.notesRef configuration and GIT_NOTES_REF environment
variable. Modeling after that, perhaps using core.replaceRef and
GIT_REPLACE_REF would be more appropriate, I think.
Thanks.
next prev parent reply other threads:[~2015-06-11 4:55 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-11 1:47 [PATCH] Allow to control the namespace for replace refs Mike Hommey
2015-06-11 4:55 ` Junio C Hamano [this message]
2015-06-11 5:13 ` Mike Hommey
2015-06-11 15:16 ` Junio C Hamano
2015-06-11 20:46 ` Mike Hommey
2015-06-11 20:55 ` Junio C Hamano
2015-06-11 21:34 ` [PATCH v2] Allow to control where the replace refs are looked for Mike Hommey
2015-06-12 22:29 ` Junio C Hamano
2015-06-12 22:36 ` 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=xmqqlhfqhmil.fsf@gitster.dls.corp.google.com \
--to=gitster@pobox.com \
--cc=git@vger.kernel.org \
--cc=mh@glandium.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.