Re: [PATCH] Allow to control the namespace for replace refs

2015-06-11 Thread Junio C Hamano
Mike Hommey  writes:

> On Thu, Jun 11, 2015 at 08:16:02AM -0700, Junio C Hamano wrote:
>> Mike Hommey  writes:
>> 
>> > I do agree that this is all confusing, but allow me to point out that
>> > it's already plenty confusing: "namespace" is a term that has been used to
>> > designate a generic kind of namespace *and* refs/namespaces. See for
>> > example:
>> >
>> > https://github.com/git/git/blob/master/Documentation/git-describe.txt#L39
>> > https://github.com/git/git/blob/master/Documentation/git-fetch.txt#L113
>> > https://github.com/git/git/blob/master/Documentation/git-filter-branch.txt#L36
>> > (note how this one is specifically about refs/replace/)
>> > there are many more.
>> 
>> "One more breakage does not hurt" is not something we want to see.
>
> I won't disagree here, but we are in desperate need for a word for those
> namespaces that aren't refs/namespaces, and stick to it (independently
> of the replace patch), but I've never seen one.

I actually don't agree with you ;-)

All these examples you cited above are merely talking about
hierarchy and they do not have any desperate need for a new word.

They do not even need a technical term; they needed a way of saying
"subdirectory" without limiting their reference to loose refs.  If
there weren't packed-refs, they would have said ".git/refs/heads and
its subdirectories" and that would have been perfectly fine.

The "ref namespace" I mentioned in my first response is the only
special one, I would think, so if we reword everybody else to say
hierarchy instead of namespace, we are perfectly fine, I think.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Allow to control the namespace for replace refs

2015-06-11 Thread Mike Hommey
On Thu, Jun 11, 2015 at 08:16:02AM -0700, Junio C Hamano wrote:
> Mike Hommey  writes:
> 
> > I do agree that this is all confusing, but allow me to point out that
> > it's already plenty confusing: "namespace" is a term that has been used to
> > designate a generic kind of namespace *and* refs/namespaces. See for
> > example:
> >
> > https://github.com/git/git/blob/master/Documentation/git-describe.txt#L39
> > https://github.com/git/git/blob/master/Documentation/git-fetch.txt#L113
> > https://github.com/git/git/blob/master/Documentation/git-filter-branch.txt#L36
> > (note how this one is specifically about refs/replace/)
> > there are many more.
> 
> "One more breakage does not hurt" is not something we want to see.

I won't disagree here, but we are in desperate need for a word for those
namespaces that aren't refs/namespaces, and stick to it (independently
of the replace patch), but I've never seen one.

Mike
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Allow to control the namespace for replace refs

2015-06-11 Thread Junio C Hamano
Mike Hommey  writes:

> I do agree that this is all confusing, but allow me to point out that
> it's already plenty confusing: "namespace" is a term that has been used to
> designate a generic kind of namespace *and* refs/namespaces. See for
> example:
>
> https://github.com/git/git/blob/master/Documentation/git-describe.txt#L39
> https://github.com/git/git/blob/master/Documentation/git-fetch.txt#L113
> https://github.com/git/git/blob/master/Documentation/git-filter-branch.txt#L36
> (note how this one is specifically about refs/replace/)
> there are many more.

"One more breakage does not hurt" is not something we want to see.

> _REF kind of implies _one_ specific ref

I thought about suggesting GIT_REPLACE_REFS for that exact reason,
but decided against it, because (1) if you are using replace, then
you know you are not using a single ref but a group of refs in a
single hierarchy already, and (2) if you do not know what replace
and notes are, GIT_REPLACE_REFS and GIT_NOTES_REF look just being
inconsistent (even though the intention of the difference is to be
more logical).  s/S/_BASE/ would make that better, though.

> As for exposing a pref, I'm not entirely sure it makes sense to.

I don't see an immediate need for it, and it is easy to add later,
so let's limit the scope of the initial adoption of the feature.

Thanks.

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Allow to control the namespace for replace refs

2015-06-10 Thread Mike Hommey
On Wed, Jun 10, 2015 at 09:55:30PM -0700, Junio C Hamano wrote:
> Mike Hommey  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  ---
> >
> > 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.

I do agree that this is all confusing, but allow me to point out that
it's already plenty confusing: "namespace" is a term that has been used to
designate a generic kind of namespace *and* refs/namespaces. See for
example:

https://github.com/git/git/blob/master/Documentation/git-describe.txt#L39
https://github.com/git/git/blob/master/Documentation/git-fetch.txt#L113
https://github.com/git/git/blob/master/Documentation/git-filter-branch.txt#L36
(note how this one is specifically about refs/replace/)
there are many more.

> 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= 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.

_REF kind of implies _one_ specific ref. I originally wrote the patch
with _BASE but went with _NAMESPACE instead because it made it somehow
clearer to me that it was about a ref namespace (not refs/namespaces),
not a base directory. I'm not particularly attached to _NAMESPACE, but
I don't find _BASE or _REF particularly compelling. I'm open to better
suggestions.

As for exposing a pref, I'm not entirely sure it makes sense to. In any
case, if we add a pref for it, we should, for consistency, add one for
grafts, except maybe if they are planned to be phased out in favor of
replace refs.

Cheers,

Mike
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Allow to control the namespace for replace refs

2015-06-10 Thread Junio C Hamano
Mike Hommey  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 
> ---
>
> 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=
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.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html