Merge branch 'master' into jc/globfetch
authorJunio C Hamano <junkio@cox.net>
Sat, 25 Nov 2006 09:04:54 +0000 (01:04 -0800)
committerJunio C Hamano <junkio@cox.net>
Sat, 25 Nov 2006 09:07:15 +0000 (01:07 -0800)
This is to pick up the fix made on master:

git-fetch: exit with non-zero status when fast-forward check fails

1  2 
git-fetch.sh
diff --combined git-fetch.sh
index 06b66b968d6d839cae923a76f9cc956f9de1e0a2,44255620983fde6bdbcb7d75d8b1d10bf8db6583..4eecf148ea90c02bfe9f2aa018118ccbd26f8e97
@@@ -88,10 -88,6 +88,10 @@@ the
        : >"$GIT_DIR/FETCH_HEAD"
  fi
  
 +# Global that is reused later
 +ls_remote_result=$(git ls-remote $upload_pack "$remote") ||
 +      die "Cannot find the reflist at $remote"
 +
  append_fetch_head () {
      head_="$1"
      remote_="$2"
@@@ -237,7 -233,10 +237,7 @@@ reflist=$(get_remote_refs_for_fetch "$@
  if test "$tags"
  then
        taglist=`IFS="  " &&
 -                (
 -                      git-ls-remote $upload_pack --tags "$remote" ||
 -                      echo fail ouch
 -                ) |
 +                echo "$ls_remote_result" |
                  while read sha1 name
                  do
                        case "$sha1" in
                        esac
                        case "$name" in
                        *^*) continue ;;
 +                      refs/tags/*) ;;
 +                      *) continue ;;
                        esac
                        if git-check-ref-format "$name"
                        then
@@@ -307,20 -304,22 +307,20 @@@ fetch_main () 
                "`git-repo-config --bool http.noEPSV`" = true ]; then
              noepsv_opt="--disable-epsv"
          fi
 -        max_depth=5
 -        depth=0
 -        head="ref: $remote_name"
 -        while (expr "z$head" : "zref:" && expr $depth \< $max_depth) >/dev/null
 -        do
 -          remote_name_quoted=$(@@PERL@@ -e '
 -            my $u = $ARGV[0];
 -              $u =~ s/^ref:\s*//;
 -            $u =~ s{([^-a-zA-Z0-9/.])}{sprintf"%%%02x",ord($1)}eg;
 -            print "$u";
 -        ' "$head")
 -          head=$(curl -nsfL $curl_extra_args $noepsv_opt "$remote/$remote_name_quoted")
 -          depth=$( expr \( $depth + 1 \) )
 -        done
 +
 +        # Find $remote_name from ls-remote output.
 +        head=$(
 +              IFS='   '
 +              echo "$ls_remote_result" |
 +              while read sha1 name
 +              do
 +                      test "z$name" = "z$remote_name" || continue
 +                      echo "$sha1"
 +                      break
 +              done
 +        )
          expr "z$head" : "z$_x40\$" >/dev/null ||
 -            die "Failed to fetch $remote_name from $remote"
 +              die "No such ref $remote_name at $remote"
          echo >&2 "Fetching $remote_name from $remote using $proto"
          git-http-fetch -v -a "$head" "$remote/" || exit
          ;;
        esac
  
        append_fetch_head "$head" "$remote" \
-         "$remote_name" "$remote_nick" "$local_name" "$not_for_merge"
+         "$remote_name" "$remote_nick" "$local_name" "$not_for_merge" || exit
  
    done
  
          done
          local_name=$(expr "z$found" : 'z[^:]*:\(.*\)')
          append_fetch_head "$sha1" "$remote" \
-                 "$remote_name" "$remote_nick" "$local_name" "$not_for_merge"
-       done
+                 "$remote_name" "$remote_nick" "$local_name" \
+                 "$not_for_merge" || exit
+       done &&
        if [ "$pack_lockfile" ]; then rm -f "$pack_lockfile"; fi
      ) || exit ;;
    esac
  
  }
  
- fetch_main "$reflist"
+ fetch_main "$reflist" || exit
  
  # automated tag following
  case "$no_tags$tags" in
                # effective only when we are following remote branch
                # using local tracking branch.
                taglist=$(IFS=" " &&
 -              git-ls-remote $upload_pack --tags "$remote" |
 +              echo "$ls_remote_result" |
                sed -n  -e 's|^\('"$_x40"'\)    \(refs/tags/.*\)^{}$|\1 \2|p' \
                        -e 's|^\('"$_x40"'\)    \(refs/tags/.*\)$|\1 \2|p' |
                while read sha1 name
        case "$taglist" in
        '') ;;
        ?*)
-               fetch_main "$taglist" ;;
+               fetch_main "$taglist" || exit ;;
        esac
  esac