tar-tree: Introduce write_entry()
[git.git] / git-fetch.sh
index 73e57bd..6835634 100755 (executable)
@@ -17,12 +17,20 @@ append=
 force=
 verbose=
 update_head_ok=
+exec=
+upload_pack=
 while case "$#" in 0) break ;; esac
 do
        case "$1" in
        -a|--a|--ap|--app|--appe|--appen|--append)
                append=t
                ;;
+       --upl|--uplo|--uploa|--upload|--upload-|--upload-p|\
+       --upload-pa|--upload-pac|--upload-pack)
+               shift
+               exec="--exec=$1" 
+               upload_pack="-u $1"
+               ;;
        -f|--f|--fo|--for|--forc|--force)
                force=t
                ;;
@@ -40,6 +48,9 @@ do
        -v|--verbose)
                verbose=Yes
                ;;
+       -k|--k|--ke|--kee|--keep)
+               keep=--keep
+               ;;
        -*)
                usage
                ;;
@@ -153,6 +164,7 @@ fast_forward_local () {
                ;;
            *,$local)
                echo >&2 "* $1: fast forward to $3"
+               echo >&2 "  from $local to $2"
                git-update-ref "$1" "$2" "$local"
                ;;
            *)
@@ -167,6 +179,7 @@ fast_forward_local () {
                        ;;
                *)
                        echo >&2 "  not updating."
+                       exit 1
                        ;;
                esac
            }
@@ -193,7 +206,7 @@ reflist=$(get_remote_refs_for_fetch "$@")
 if test "$tags"
 then
        taglist=$(IFS=" " &&
-                 git-ls-remote --tags "$remote" |
+                 git-ls-remote $upload_pack --tags "$remote" |
                  while read sha1 name
                  do
                        case "$name" in
@@ -309,7 +322,7 @@ fetch_main () {
     ( : subshell because we muck with IFS
       IFS="    $LF"
       (
-         git-fetch-pack "$remote" $rref || echo failed "$remote"
+         git-fetch-pack $exec $keep --thin "$remote" $rref || echo failed "$remote"
       ) |
       while read sha1 remote_name
       do
@@ -357,20 +370,25 @@ fetch_main "$reflist"
 # automated tag following
 case "$no_tags$tags" in
 '')
-       taglist=$(IFS=" " &&
-       git-ls-remote --tags "$remote" |
-       sed -ne 's|^\([0-9a-f]*\)[      ]\(refs/tags/.*\)^{}$|\1 \2|p' |
-       while read sha1 name
-       do
-               test -f "$GIT_DIR/$name" && continue
-               git-check-ref-format "$name" || {
-                       echo >&2 "warning: tag ${name} ignored"
-                       continue
-               }
-               git-cat-file -t "$sha1" >/dev/null 2>&1 || continue
-               echo >&2 "Auto-following $name"
-               echo ".${name}:${name}"
-       done)
+       case "$reflist" in
+       *:refs/*)
+               # effective only when we are following remote branch
+               # using local tracking branch.
+               taglist=$(IFS=" " &&
+               git-ls-remote $upload_pack --tags "$remote" |
+               sed -ne 's|^\([0-9a-f]*\)[      ]\(refs/tags/.*\)^{}$|\1 \2|p' |
+               while read sha1 name
+               do
+                       test -f "$GIT_DIR/$name" && continue
+                       git-check-ref-format "$name" || {
+                               echo >&2 "warning: tag ${name} ignored"
+                               continue
+                       }
+                       git-cat-file -t "$sha1" >/dev/null 2>&1 || continue
+                       echo >&2 "Auto-following $name"
+                       echo ".${name}:${name}"
+               done)
+       esac
        case "$taglist" in
        '') ;;
        ?*)