git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: gitpacker progress report and a question

From
Felipe Contreras <felipe.contreras@gmail.com>
Date
Nov 26, 2012, 23:14 UTC
Message-ID
<CAMP44s2+NDyL2Vf=iKR09f-YUnp=G2BCiYj-+qKuP7JA-+YkmQ@mail.gmail.com>
In-Reply-To
<20121126220108.GB1713@thyrsus.com>
On Mon, Nov 26, 2012 at 11:01 PM, Eric S. Raymond <esr@thyrsus.com> wrote:
Show 7 quoted lines
> Felipe Contreras <felipe.contreras@gmail.com>:
>> 1) I tried it, and it doesn't seem to import (pack?) are repository
>> with sub-directories in it
>
> I'll make sure my regression test checks this case.  The options to git
> ls-files are a bit confusing and it's possible my invocation of it
> needs to change.

Might be easier to just call 'git ls-files --with-three foo', but I don't see the point of those calls:

% git --work-tree=unpacked/1 checkout master % git --work-tree=unpacked/1 add -A

Should work just fine.
Show 5 quoted lines
>> 2) Using 'git fast-import' is probably simpler, and more efficient
>
> That might well be.  I'm not worried about "efficiency" in this context
> but reducing the code size is significant and I'm willing to re-code
> to do that.
I don't see how the code-size would increase dramatically.
>> Here is a proof of concept I wrote in ruby that is half the size, and
>> seems to implement the same functionality.
>
> Not anywhere near the same.  It only handles commits, not tags.
The attached code doesn't handle tags either.
> It doesn't issue delete ops.
What do you mean?
    out.puts 'deleteall' <- All current files are removed
And then added.
> And it doesn't rebuild branch heads.

What do you mean? Your code only exports a single branch, the branch that is currently checked out. And then:

git reset --hard >/dev/null; git checkout master >/dev/null 2>&1

It's resuming to 'master', which might not be the branch the user had checkout out, and might not even exist.

> If I were willing to omit those features, I'm sure I could halve
> the size of my implementation, too.  Of course, it would then be
> almost completely useless...
That's what the code currently does.

Do you want me to show you step by step how they do *exactly the same*? Of course, I would need to fix your version first so that it doesn't crash with sub-directories.

Show 10 quoted lines
>>                           The format is exactly the
>> same, but I think it should be modified to be more efficient.
>
> I'm not wedded to the log format as it is, so I'll cheerfully
> take suggestions about it.
>
> Be aware, however, that I consider easy editability by human beings
> much more important than squeezing the last microsecond out of the
> processing time.  So, for example, I won't use data byte counts rather
> than end delimiters, the way import streams do.

Well, if there's a line with a single dot in the commit message ('.'), things would go very bad.

Personally I would prefer something like this:

tag v0.1 gst-av-0.1.tar "Release 0.1" tag v0.2 gst-av-0.2.tar "Release 0.2" tag v0.3 gst-av-0.3.tar "Release 0.3"

And the script in bash would be very simple:
#!/bin/sh
tag() {
	d=`mktemp -d` &&
	(
	cd $d &&
	tar -xf "$orig/$2" &&
	cd * &&
	git add --all &&
	git commit -q -m "$3" &&
	git tag $1) || error=1
	rm -rf $d
	test -n "$error" && exit -1
}

orig="$PWD" repo="$1"

git init -q $repo export GIT_DIR="$orig/$repo/.git"

source "$orig/$2"
cd "$orig/$repo" && git reset -q --hard
-- 
Felipe Contreras
Previous: Eric S. RaymondNext: Eric S. Raymond
Message 7 of 16 in “gitpacker progress report and a question”
  1. Eric S. RaymondNov 15, 2012
  2. Max HornNov 15, 2012
  3. Eric S. RaymondNov 15, 2012
  4. Andreas SchwabNov 16, 2012
  5. Felipe ContrerasNov 26, 2012
  6. Eric S. RaymondNov 26, 2012
  7. Felipe ContrerasNov 26, 2012
  8. Eric S. RaymondNov 26, 2012
  9. Felipe ContrerasNov 27, 2012
  10. Felipe ContrerasNov 27, 2012
  11. Felipe ContrerasNov 27, 2012
  12. Eric S. RaymondNov 27, 2012
  13. Felipe ContrerasNov 27, 2012
  14. Eric S. RaymondNov 27, 2012
  15. Felipe ContrerasNov 27, 2012
  16. Eric S. RaymondNov 27, 2012

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.