]> Nutra Git (v2) - gamesguru/git-remote-gcrypt.git/commitdiff
Support rsync://
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)
README.rst
git-remote-gcrypt

index 8b84d0ec13d9b812a124bdfae4f62360ad00436b..ffd5a818c7e471ea249ae3208dea5585a0603329 100644 (file)
@@ -16,12 +16,13 @@ Remote helper programs are invoked by git to handle network transport.
 This helper handles gcrypt:: URLs that will access a remote repository
 encrypted with GPG, using our custom format.
 
-Supported locations are `local`, `ssh://` and `sftp://`, where the
-repository is stored as a set of files. If the location instead is any
-`<giturl>`, gcrypt will store the same representation in a git
-repository, and so it can be bridged over any git transport.
+Supported locations are `local`, `ssh://`, `rsync://` and `sftp`, where
+the repository is stored as a set of files, or instead any `<giturl>`
+where gcrypt will store the same representation in a git repository,
+bridged over arbitrary git transport.
 
-.. NOTE:: Repository format MAY STILL change, incompatibly
+.. NOTE:: Repository format MAY STILL change, incompatibly. We may
+          not continue to support all types of remote transport.
 
 Quickstart
 ..........
index e7a435ccc768ce33b249abeed421021426f8468f..89308c73ed5b79a507b9d4aecb664a09ef7f1729 100755 (executable)
@@ -121,46 +121,52 @@ gitception_new_repo()
 }
 ## end gitception
 
-# Fetch repo $1, file $2
+# Fetch repo $1, file $2, tmpfile in $3
 GET()
 {
        if isurl ssh "$1"
        then
                splitcolon "${1#ssh://}"
-               (exec 0>&-; ssh "$prefix_" "cat $suffix_/$2")
+               (exec 0>&-; ssh "$prefix_" "cat $suffix_/$2") > "$3"
        elif isurl sftp "$1"
        then
-               (exec 0>&-; curl -s -S -k "$1/$2")
+               (exec 0>&-; curl -s -S -k "$1/$2") > "$3"
+       elif isurl rsync "$1"
+       then
+               (exec 0>&-; rsync -I -W "${1#rsync://}"/"$2" "$3" >&2)
        elif islocalrepo "$1"
        then
-               cat "$1/$2"
+               cat "$1/$2" > "$3"
        else
-               gitception_get "${1#gitception://}" "$2"
+               gitception_get "${1#gitception://}" "$2" > "$3"
        fi
 }
 
-# Put repo $1, file $2 or fail
+# Put repo $1, file $2 or fail, tmpfile in $3
 PUT()
 {
        if isurl ssh "$1"
        then
                splitcolon "${1#ssh://}"
-               ssh "$prefix_" "cat > $suffix_/$2"
+               ssh "$prefix_" "cat > $suffix_/$2" < "$3"
        elif isurl sftp "$1"
        then
-               curl -s -S -k --ftp-create-dirs -T - "$1/$2"
+               curl -s -S -k --ftp-create-dirs -T "$3" "$1/$2"
+       elif isurl rsync "$1"
+       then
+               rsync -I -W "$3" "${1#rsync://}"/"$2" >&2
        elif islocalrepo "$1"
        then
-               cat > "$1/$2"
+               cat > "$1/$2" < "$3"
        else
-               gitception_put "${1#gitception://}" "$2"
+               gitception_put "${1#gitception://}" "$2" < "$3"
        fi
 }
 
 # Put all PUT changes for repo $1 at once
 PUT_FINAL()
 {
-       if isurl ssh "$1" || isurl sftp "$1" || islocalrepo "$1"
+       if isurl ssh "$1" || isurl sftp "$1" || islocalrepo "$1" || isurl rsync "$1"
        then
                :
        else
@@ -178,6 +184,9 @@ PUTREPO()
        elif isurl sftp "$1"
        then
                :
+       elif isurl rsync "$1"
+       then
+               rsync -q -r --exclude='*' "$Localdir/" "${1#rsync://}" >&2
        elif islocalrepo "$1"
        then
                mkdir -p "$1"
@@ -188,7 +197,7 @@ PUTREPO()
 
 CLEAN_FINAL()
 {
-       if isurl ssh "$1" || isurl sftp "$1" || islocalrepo "$1"
+       if isurl ssh "$1" || isurl sftp "$1" || islocalrepo "$1" || isurl rsync "$1"
        then
                :
        else
@@ -330,7 +339,7 @@ ensure_connected()
 
        TmpManifest_Enc="$Localdir/manifest.$$"
        trap 'rm -f "$TmpManifest_Enc"' EXIT
-       GET "$URL" "$Repoid" 2>/dev/null > "$TmpManifest_Enc" ||
+       GET "$URL" "$Repoid" "$TmpManifest_Enc" 2>/dev/null ||
                echo_die "Repository not found: $url_id at $URL"
 
        Did_find_repo=yes
@@ -413,8 +422,8 @@ do_fetch()
        do
                isnonnull "$packline_" || continue
                pack_=${packline_#"$Packpfx"}
-               rcv_id="$(GET "$URL" "$pack_" | \
-                       tee "$TmpPack_Encrypted" | pack_hash)"
+               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!"
@@ -490,7 +499,7 @@ EOF
        then
                pack_id=$(pack_hash < "$TmpPack_Encrypted")
                Packlist=$(append "$Packlist" "$Packpfx$pack_id $key_")
-               PUT "$URL" "$pack_id" "$TmpPack_Encrypted"
+               PUT "$URL" "$pack_id" "$TmpPack_Encrypted"
        fi
 
        rm -f "$TmpPack_Encrypted"
@@ -508,7 +517,7 @@ EOF
        repoidstr; xecho "$Extension_list") |
                PRIVENCRYPT "$Recipients" > "$TmpManifest_Enc"
 
-       PUT "$URL" "$Repoid" "$TmpManifest_Enc"
+       PUT "$URL" "$Repoid" "$TmpManifest_Enc"
 
        PUT_FINAL "$URL"