Supporting Namespaces in cgit
richard.maw at gmail.com
Sun Jun 26 02:44:03 CEST 2016
On Sat, Jun 25, 2016 at 04:46:26PM +0100, Richard Maw wrote:
> On Tue, May 10, 2016 at 02:21:36PM +0100, John Keeping wrote:
> > On Mon, May 09, 2016 at 10:54:44PM +0100, Daniel Silverstone wrote:
> > > On Mon, May 09, 2016 at 22:31:37 +0100, John Keeping wrote:
> > > > Implementation-wise, it looks like using a namespace should just be a
> > > > matter of setting GIT_NAMESPACE in the environment near the top of
> > > > cgit.c::prepare_repo_cmd().
> > >
> > > This is certainly the basic starting point.
> > >
> > > > Discovering namespaces is more interesting, since we can't know what
> > > > exactly is a namespace. For example, if we have:
> > > >
> > > > refs/namespaces/foo/bar/baz
> > > >
> > > > is the namespace "foo" or "foo/bar"? Maybe checking for "heads" and
> > > > "tags" subdirectories is enough, but I'm not familiar enough with
> > > > namespaces to know if those will definitely exist, and obviously users
> > > > can create or delete any directories anywhere in the hierarchy.
> Having looked at it in more detail,
> I'd check for the presence of a HEAD symbolic ref,
> if we were going to try it.
It turns out that symbolic refs don't get packed,
so it's always file system traversal rather than packed ref reading.
However, HEAD symbolic refs in namespaces don't get automatically created,
but they are needed to clone with the dumb-http transport.
This is mostly just an annoying extra step to using namespaces,
though it might be worth trying repo.defbranch in the absence of a HEAD file.
More information about the CGit