]> Nutra Git (v1) - gamesguru/git-remote-gcrypt.git/commitdiff
Factor out common code in do_fetch and repack
authorroot <root@localhost>
Thu, 14 Feb 2013 00:00:00 +0000 (00:00 +0000)
committerroot <root@localhost>
Thu, 14 Feb 2013 00:00:00 +0000 (00:00 +0000)
git-remote-gcrypt

index aec5fa261c8b011f792a55d9c930f7287e3e97b7..f4735c1145b67555f7e9c0ce86b4af87bac2f1b3 100755 (executable)
@@ -410,11 +410,22 @@ ensure_connected()
        iseq "$(repoidstr)" "$rcv_repoid" || echo_die "Repository id mismatch!"
 }
 
+fetch_decrypt_pack()
+{
+       local key_= rcv_id=
+       GET "$URL" "$1" "$TmpPack_Encrypted" &&
+       rcv_id=$(pack_hash < "$TmpPack_Encrypted") &&
+       iseq "$rcv_id" "$1" ||
+               echo_die "Packfile $1 does not match digest!"
+       key_=$(xecho "$Packlist" | grep "$1" | cut -f 3 -d ' ')
+       DECRYPT "$key_" < "$TmpPack_Encrypted"
+}
+
 # $1 is new pack id $2 key
 # set did_repack=yes if repacked
 repack_if_needed()
 {
-       local pack_= rcv_id= packline_= premote_= key_= pkeep_= n_=
+       local pack_= packline_= premote_= key_= pkeep_= n_=
 
        # $TmpPack_Encrypted set in caller
 
@@ -448,14 +459,7 @@ repack_if_needed()
                        continue
                fi
                pack_=${packline_#"$Packpfx"}
-               GET "$URL" "$pack_" "$TmpPack_Encrypted"
-               rcv_id=$(pack_hash < "$TmpPack_Encrypted")
-               if isnoteq "$rcv_id" "$pack_"
-               then
-                       echo_die "Packfile $pack_ does not match digest!"
-               fi
-               key_=$(xecho "$Packlist" | grep "$pack_" | cut -f 3 -d ' ')
-               DECRYPT "$key_" < "$TmpPack_Encrypted" |
+               fetch_decrypt_pack "$pack_" |
                git index-pack -v --stdin "$Localdir/pack/${pack_}.pack" >/dev/null
        done
        key_=$(genkey "$Packkey_bytes")
@@ -511,11 +515,10 @@ do_list()
 
 do_fetch()
 {
-       # Security protocol:
        # The PACK id is the hash of the encrypted git packfile.
        # We only download packs mentioned in the encrypted manifest,
        # and check their digest when received.
-       local pack_= rcv_id= packline_= pneed_= pboth_= phave_= premote_= key_=
+       local pack_= packline_= pneed_= phave_= premote_=
 
        ensure_connected
 
@@ -529,24 +532,15 @@ do_fetch()
        trap 'rm -f "$TmpPack_Encrypted"' EXIT
 
        premote_=$(xecho "$Packlist" | cut -f 1-2 -d ' ')
-       # Needed packs is  Packlist - (phave & Packlist)
        # The `+` for $GITCEPTION is pointless but we will be safe for stacking
        phave_="$(cat "$Localdir/have_packs+" 2>/dev/null || :)"
-       pboth_="$(xecho "$premote_" | xgrep -F  -x -e "$phave_")"
        pneed_="$(xecho "$premote_" | xgrep -F -vx -e "$phave_")"
 
        xecho "$pneed_" | while read packline_
        do
                isnonnull "$packline_" || continue
                pack_=${packline_#"$Packpfx"}
-               GET "$URL" "$pack_" "$TmpPack_Encrypted"
-               rcv_id=$(pack_hash < "$TmpPack_Encrypted")
-               if isnoteq "$rcv_id" "$pack_"
-               then
-                       echo_die "Packfile $pack_ does not match digest!"
-               fi
-               key_=$(xecho "$Packlist" | grep "$pack_" | cut -f 3 -d ' ')
-               DECRYPT "$key_" < "$TmpPack_Encrypted" |
+               fetch_decrypt_pack "$pack_" |
                        git index-pack -v --stdin >/dev/null
                # add to local pack list
                xecho "$Packpfx$pack_" >> "$Localdir/have_packs$GITCEPTION"