On Sat, Aug 20, 2016 at 08:07:00PM +0100, Richard wrote: > Because git is not namespace aware for anything but git-upload-pack > and git-receive-pack, I've had to implement namespace parsing in cgit > for listing branches, showing logs, displaying notes and commit > decorations. It might be more useful if this support was added to git > itself, so other git servers could make use of it so there's less > duplicated code. > > I think the way to do this would be to make the low-level ref reading > functions, read_raw_ref, for_each_reflog_ent*, reflog_exists etc., > interpret the ref they are passed as being relative to the current git > namespace. At GitHub, we store many forks for a single repository, and we considered using namespaces for our storage strategy. But like you, we ran into the problem that you they only work for certain operations. :) Our solution is to use separate repositories, each with their own ref storage, but pointing to a shared object store. It works, but there are a lot of gotchas and performance issues with migrating objects around, running repacks. Michael Haggerty (cc'd) has picked up the pluggable ref-backend work started by others, and I know has some ideas on doing namespaces at that level. Basically, the concept of "namespaces" should be able to plug in between the actual storage backend and the rest of the git code. Git code wouldn't have to care whether the namespace plugin was in use, and the namespace plugin wouldn't have to care which storage backend was in use (it would just silently translate "refs/heads/foo" into "refs/namespaces/123/heads/foo", and vice versa). That's a very "complete" solution in the sense that the git code does not know about the namespaces, and cannot even access refs outside of it. But I think in general it would do what you want. Most operations would run in a certain namespace (i.e., pretend nothing outside of that namespace exists, for fetches, diffs, etc), and others would want to look at the whole namespace (e.g., repacking, pruning). I don't know of any operations that want to see both views in the same process. -Peff -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html