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

Re: [PATCH] git-bundle - bundle objects and references for disconnected transfer.

From
Johannes Schindelin <johannes.schindelin@gmx.de>
Date
Feb 14, 2007, 21:58 UTC
Message-ID
<Pine.LNX.4.63.0702142238310.22628@wbgn013.biozentrum.uni-wuerzburg.de>
In-Reply-To
<11714622292295-git-send-email-mdl123@verizon.net>
Hi,
On Wed, 14 Feb 2007, Mark Levedahl wrote:
Show 5 quoted lines
> +bfile=bundle.zip
> +for arg in $myargs ; do
> +	case "$arg" in
> +		--bare)
> +			export GIT_DIR=.;;
This is not necessary. You should do this instead:
	. git-sh-setup

It should autodetect if you are running in a bare repo. Also, it gives you the nice die and help functions.

Show 5 quoted lines
> +		-h|--h|--he|--hel|--help)
> +			echo "$USAGE"
> +			exit;;
> +		--output=*)
> +			bfile=${arg##--output=};;

Throughout git, we seem to do both "--output=<bla>" _and_ "--output <bla>" forms, or just the latter.

> +GIT_DIR=$(git-rev-parse --git-dir) || die "Not in a git directory"
Again, this is done by git-sh-setup
> +git-show-ref $refs > .gitBundleReferences

Would it not be better to say explicitely which refs are expected to be present already (they start with "^" in the output of `git-rev-parse`, but you would need to do a bit more work, since you cannot just take the symbolic names).

Some general remarks:

It would be so much nicer if you worked without temporary files (you could do that by starting the file with the refs, then have an empty line, and then just pipe the pack after that).

IMHO reliance on $(git fsck | grep ^missing) is not good. The file check might take very, very long, or use much memory. And you _can_ do better [*1*].

Also, your use of shallow is incorrect. If the boundary commits are present, you might just leave them as-are, but if they are not present, you have to mark them as shallow. Otherwise, you end up with a corrupt (not shallow) repository.

Ciao, Dscho

[*1*] Instead of providing a list "<hash> <refname>" with just the refs to be updated, append a list "<hash> ^<refname>" with the refs which _have_ to be present in order to succeed. You get this list by

	gitrevnotargs=$(git-rev-parse --symbolic --revs-only --not $*)
	git show-ref $gitrevnotargs | sed 's/^\(.\{41\}\)/&^/'
Previous: Shawn O. PearceNext: Mark Levedahl
Message 12 of 32 in “Scripts to use "bundles" for moving data between repositories”
  1. Mark LevedahlFeb 14, 2007
  2. git-bundle - bundle objects and references for disconnected transfer.Mark Levedahl, Feb 14, 2007
  3. git-unbundle - unbundle objects and references for disconnected transfer.Mark Levedahl, Feb 14, 2007
  4. Create a man page for git-bundle.Mark Levedahl, Feb 14, 2007
  5. Create a man page for git-unbundle.Mark Levedahl, Feb 14, 2007
  6. Shawn O. PearceFeb 14, 2007
  7. Mark LevedahlFeb 14, 2007
  8. Shawn O. PearceFeb 14, 2007
  9. Mark LevedahlFeb 14, 2007
  10. Nicolas PitreFeb 14, 2007
  11. Shawn O. PearceFeb 14, 2007
  12. Johannes SchindelinFeb 14, 2007
  13. Mark LevedahlFeb 14, 2007
  14. Mark LevedahlFeb 14, 2007
  15. Johannes SchindelinFeb 15, 2007
  16. Mark LevedahlFeb 15, 2007
  17. Johannes SchindelinFeb 15, 2007
  18. Johannes SchindelinFeb 15, 2007
  19. Mark LevedahlFeb 15, 2007
  20. Johannes SchindelinFeb 15, 2007
  21. Mark LevedahlFeb 16, 2007
  22. Johannes SchindelinFeb 16, 2007
  23. Mark LevedahlFeb 16, 2007
  24. Matthieu MoyFeb 14, 2007
  25. Mark LevedahlFeb 14, 2007
  26. Johannes SchindelinFeb 14, 2007
  27. Junio C HamanoFeb 14, 2007
  28. Mark LevedahlFeb 14, 2007
  29. Junio C HamanoFeb 14, 2007
  30. Mark LevedahlFeb 14, 2007
  31. Junio C HamanoFeb 14, 2007
  32. Junio C HamanoFeb 14, 2007

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.