Subject: Re: [PATCH/v2] git-basis, a script to manage bases for git-bundle

From: Mark Levedahl <[email-masked]>
Date: Tue, 01 Jul 2008 20:16:32 -0400

Junio C Hamano wrote:

> 
> Well, I have a moderately strong objection to this.
> 
> This very much feels like adding a missing feature to "git bundle" command
> itself.  Why isn't it a new option to it?
> 

I have implemented (in script form) a different approach: basically, I just keep 
a local copy of the refs pushed out via bundle in refs/remotes/*, just as for 
any other remote, and then use those as the basis for later bundles. My longer 
term goal is to integrate this into git push, so that with a properly configured 
remote "git push foo" will create a bundle based upon the local knowledge of the 
remote's basis and update the local copy of the refs.

For reference, this is the script I currently use ...

#!/bin/sh
# usage
if test $# -lt 4
then
     echo "usage: $0 repoDirectory bundleName remote [git-for-each-ref args]"
     exit 1
fi

# must be at toplevel
cd $1 || exit 1
cd ./$(git rev-parse --show-cdup) || exit 1

bundleName=$2
remote=$3
shift 3

# get list of what we want to bundle up
newrefs=$(git for-each-ref --format="%(refname)" $*)

# get list of the current bundle
basis=$(git for-each-ref --format="^%(objectname)" refs/remotes/$remote)

# create the bundle
if git bundle create "$bundleName" $newrefs $basis
then
     # update our record of basis from the bundle
     git bundle list-heads "$bundleName" | \
     while read sha1 refname
     do
         git update-ref refs/remotes/"$remote"/"${refname##refs/}" $sha1
     done
else
     rm -f "$bundleName"
fi

Mark