threads / discuss / 32050

Help requested - trying to build a tool doing whole-tree commits

Subject: Help requested - trying to build a tool doing whole-tree commits

## tl;dr

5 messages between Nov 9, 2012 and Nov 11, 2012.

replies: 4people: 5as markdown or json

Unknown· Nov 9, 2012, 18:20 UTC · lore
(Apologies if this arrives twice. I'm on the road, with somewhat flaky email.)

Because of my work on reposurgeon, I am sometimes asked to produce git repositories for very old projects that not only are still using CVS but have ancient releases not in the CVS repository, preserved only as tarballs. I have such a request currently pending from the robotfindskitten project.

To automate this process, I am trying to write a tool that will take a sequence of file trees and synthetic change comments in one end and emit a git repository composing them into a DAG out the other. The working name for this tool is 'gitpacker'.

I've already written the unpacking operation (git repo to tree sequence plus log). This morning I discovered that git-commit won't do quite what I need for the packing operation. I'm requesting help.

I need a command or command sequence that will commit an entire file tree to a repository...

(a) Allowing me to specify committer and author metadata, and

(b) deleting paths not present in the previous commit on the current branch, and

(c) allowing me to specify merge links from other previous commits.
git commit -a passes (a) and (b) but not (c).
Advice on how to accomplish this is requested

Advice on a better name for the tool is also requested, as I'm not happy with the way my use of 'pack' collides with existing git use of the same verb.

-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

.. a government and its agents are under no general duty to 
provide public services, such as police protection, to any 
particular individual citizen...
        -- Warren v. District of Columbia, 444 A.2d 1 (D.C. App.181)
Andreas Schwab· Nov 9, 2012, 21:50 UTC · re: Unknown · lore

Re: Help requested - trying to build a tool doing whole-tree commits

Unknown <unknown@unknown.invalid> writes:
Show 11 quoted lines
> I need a command or command sequence that will commit an entire file
> tree to a repository...
>
> (a) Allowing me to specify committer and author metadata, and
>
> (b) deleting paths not present in the previous commit on the current
> branch, and
>
> (c) allowing me to specify merge links from other previous commits.
>
> git commit -a passes (a) and (b) but not (c).

git commit -a won't add new files, so you probably want to use git add -A && git commit. I'm not quite sure what you mean with "merge links", but if you want to create merge commits the you'll need to resort to plumbing: git add -A && git write-tree && git commit-tree && git update-ref.

Andreas.
-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."
Felipe Contreras· Nov 10, 2012, 19:24 UTC · re: Andreas Schwab · lore

Re: Help requested - trying to build a tool doing whole-tree commits

On Fri, Nov 9, 2012 at 10:50 PM, Andreas Schwab <schwab@linux-m68k.org> wrote:
> Unknown <unknown@unknown.invalid> writes:

Unknown Invalid? Please don't change the original email, makes it harder for other people to reply.

Show 17 quoted lines
>> I need a command or command sequence that will commit an entire file
>> tree to a repository...
>>
>> (a) Allowing me to specify committer and author metadata, and
>>
>> (b) deleting paths not present in the previous commit on the current
>> branch, and
>>
>> (c) allowing me to specify merge links from other previous commits.
>>
>> git commit -a passes (a) and (b) but not (c).
>
> git commit -a won't add new files, so you probably want to use git add
> -A && git commit.  I'm not quite sure what you mean with "merge links",
> but if you want to create merge commits the you'll need to resort to
> plumbing: git add -A && git write-tree && git commit-tree && git
> update-ref.

I've done something similar, except that I used git hash-object instead of git commit-tree so that I can specify every single detail about the commit object.

Cheers.
-- 
Felipe Contreras
Junio C Hamano· Nov 10, 2012, 16:57 UTC · re: Unknown · lore

Re: Help requested - trying to build a tool doing whole-tree commits

Unknown <unknown@unknown.invalid> writes:
Show 6 quoted lines
> (Apologies if this arrives twice. I'm on the road, with somewhat flaky email.)
>
> Because of my work on reposurgeon, I am sometimes asked to produce git
> repositories for very old projects that not only are still using CVS
> but have ancient releases not in the CVS repository, preserved only
> as tarballs.

Perhaps not exactly what you are looking for, but don't we have import-tar somewhere in contrib/fast-import hierarchy (sorry, not on a machine yet, and I cannot give more details).

Eric S. Raymond· Nov 11, 2012, 14:47 UTC · re: Junio C Hamano · lore

Re: Help requested - trying to build a tool doing whole-tree commits

Junio C Hamano <gitster@pobox.com>:
> Perhaps not exactly what you are looking for, but don't we have
> import-tar somewhere in contrib/fast-import hierarchy (sorry, not on
> a machine yet, and I cannot give more details).
If I recall correctly, that can only be used for original import.

I think Andreas Schwab's suggestion (git add -A && git write-tree && git commit-tree && git update-ref) is probably the right thing. I'm going to try that.

-- 
		<a href="http://www.catb.org/~esr/">Eric S. Raymond</a>

← back to recent threads