Use git rev-list --stdin and cat-file --batch-check

This commit is contained in:
root 2013-02-14 00:00:00 +00:00
parent a0232a9a67
commit 1960c8ede0

View file

@ -213,7 +213,14 @@ pack_hash()
xecho "${hash_%:}" xecho "${hash_%:}"
} }
# Pass the branch/ref by pipe to git
safe_git_rev_parse()
{
local out_=
out_=$(xecho "$1" | git cat-file --batch-check)
out_=${out_%%*missing}
xecho "${out_%% *}"
}
check_recipients() check_recipients()
{ {
@ -400,7 +407,7 @@ do_push()
if isnonnull "$Branchlist" if isnonnull "$Branchlist"
then then
remote_has=$(xecho "$Branchlist" | remote_has=$(xecho "$Branchlist" |
cut -f1 -d' ' | sed -e 's/^\(.\)/^&/' | tr '\n' ' ') cut -f1 -d' ' | sed -e 's/^\(.\)/^&/')
fi fi
while read line_ # from << while read line_ # from <<
@ -409,9 +416,9 @@ do_push()
splitcolon "${line_#+}" splitcolon "${line_#+}"
if isnonnull "$prefix_" if isnonnull "$prefix_"
then then
remote_want="$remote_want$prefix_ " remote_want=$(append "$remote_want" "$prefix_")
Branchlist=$(append "$Branchlist" \ Branchlist=$(append "$Branchlist" \
"$(git rev-parse "$prefix_") $suffix_") "$(safe_git_rev_parse "$prefix_") $suffix_")
else else
: # FIXME delete branch : # FIXME delete branch
fi fi
@ -424,8 +431,10 @@ EOF
TmpPack_Encrypted="$Localdir/tmp_pack_ENCRYPTED_.$$" TmpPack_Encrypted="$Localdir/tmp_pack_ENCRYPTED_.$$"
TmpObjlist="$Localdir/tmp_packrevlist.$$" TmpObjlist="$Localdir/tmp_packrevlist.$$"
git rev-list --objects $remote_has $remote_want -- | \
tee "$TmpObjlist" | \ append "$remote_has" "$remote_want" |
git rev-list --objects --stdin -- |
tee "$TmpObjlist" |
git pack-objects --stdout | ENCRYPT > "$TmpPack_Encrypted" git pack-objects --stdout | ENCRYPT > "$TmpPack_Encrypted"
# Only send pack if we have any objects to send # Only send pack if we have any objects to send
if [ -s "$TmpObjlist" ] if [ -s "$TmpObjlist" ]