Subject: Re: fixing workdirs

From: Pierre Habouzit <[email-masked]>
Date: Mon, 19 Jul 2010 11:02:48 +0200

On Fri, Jul 09, 2010 at 03:25:15PM -0700, Junio C Hamano wrote:
> Pierre Habouzit <[email-masked]> writes:
> 
> > On Thu, Jul 08, 2010 at 12:40:11PM -0700, Junio C Hamano wrote:
> >> Pierre Habouzit <[email-masked]> writes:
> >> 
> >> > for the first one, the fix is simple: workdirs have now a name, and
> >> > their HEAD reflog lives in the "master" git repository reflog namespace
> >> > under logs/workdir/$workdir_name/HEAD. The workdir HEAD reflog is then a
> >> > symlink to the masters.
> >> 
> >> I think this is a sane thing to do, except for the "symlink" part but that
> >> would be just a minor implementation detail.
> >
> > What would you suggest instead of the symlink then ? (knowing that all
> > the workdir is just a full symlink farm at them moment).
> 
> I can imagine that we may want to have a general mechanism to help an
> object store that belongs to one "primary" repository be aware of ref-like
> things that live outside of the repoistory itself, and not just a special
> purpose hack suitable only to handle the workdirs.  E.g., we have talked
> about a "fork" created by "clone -s" wanting the forkee repository to be
> aware of its refs, so that rewinding the refs in the forkee repository and
> then running gc there won't remove the objects now unnecessary in the
> forkee but still needed by the forker repository.
> 
> It shouldn't be hard to do something similar to "gitdir: " support for
> this without using a symlink, no?

Sorry for the delay, I was on vacation.

Okay, I see, this makes sense. I'll see what I can do on this path,
though it's probably harder than simply extending gitfiles. We still
want a .git/ directory as we want most of the top level stuff to be
local to each repository (HEAD, ORIG_HEAD, ...) but not:

  - subdirectories (most of them being references, logs, ...)
  - the lock (which is kind of the weak point in my proposal atm, yours
    is nicer)
  - config (or do we want a cascading semantics: local workdir config,
    master repository config, user .gitconfig, /etc/.... ? I think not
    but ...)
  - packed-refs

Plus, to make everything work, the reflogs of a given "workdir" (or
shared clone) must be put in a different namespace to avoid clashes.
Though this is probably the simplest bit.

All in all, I'm afraid to have to look at every single git script that
for now writes without thinking twice under .git/ :/
-- 
·O·  Pierre Habouzit
··O                                                [email-masked]
OOO                                                http://www.madism.org