Subject: Re: Mozilla version control requirements and git

From: Jakub Narebski <[email-masked]>
Date: Sun, 3 Sep 2006 17:42:13 +0200

On 03-09-2006 15:46, Jon Smirl wrote:
> On 9/3/06, Jakub Narebski <[email-masked]> wrote:
> > Jon Smirl wrote:
> >
> > >> Oh, and "partial tree pulls for localisers". Perhaps git-cvsserver can
> > >> help there? Localisers can just use TortoiseCVS and get a checkout of
> > >> the language pack subdir.
> > >
> > > Partial repo pulls and an issue to. The mozilla repo has much more
> > > than a browser in it, it also has a large mail/news program. A partial
> > > repo pull may not be what is needed for git, instead git needs a
> > > partial repo checkout.
> >
> > Or better support for subprojects.
> >
> > I think you can fake subproject support using separate repositories
> > for subprojects, in the directory matching the one in the whole project,
> > and the project repository, where we pull/push subprojects into.
> 
> You can't really fake it. Many of the projects in Mozilla are
> dependent on each other. If you break them up into separate
> repositories you lose the ability to do a cross project commit. This
> is common when you are changing an interface between the subprojects.
> 
> Would it make sense for git to treat a tree of projects like you
> describe as a single entity? So a commit would transparently commit to
> all of the subprojects. Maybe the commit entry's sha1 could be set up
> so that it would be identical in all subprojects. That would let you
> string them back together.

Scratch that. You can fake subproject support using something similar
to the way Junio works with TODO branch. Namely, separate repositories
for subprojects, each as if it would start from it's own directory
(although you can manage without that, it only would be slightly harder
to set it up), and main repository working directory composed from
subproject repositories checked out to correct place. Add to this
ingnoring object database (i.e. .git repositories), and you have whole
repository... where you can do whole repository commits to.

E.g. the following directory structure

	main-project/
	main-project/.git
	main-project/subproject/
	main-project/subproject/.git
	main-project/subproject/...subproject files...

where second .git is in .gitignore or info/excludes, but the subrpoject/
directory itself isn't.

If this is not enough, check out ideas in Subpro.txt in the 'todo' branch
in git repository. It adds additional 'bind' header... the implementation
(search for 'gitlink') were if I remember correctly never fully implemented
and is not in git, although parts of it like git-read-tree and 
git-write-tree --prefix option made it.
  http://www.kernel.org/git/?p=git/git.git;a=blob;f=Subpro.txt;hb=todo

As commit id depends on the contents, including _parents_ and _tree_,
it is I think impossible to set commit entry sha1 to be identical.

P.S. I just hope that it would pass VGER filter. I don't have much luck
with it lately...
-- 
Jakub Narebski
Poland

-- 
VGER BF report: S 0.994192