Browse Source

[PATCH] Allow "+remote:local" refspec to cause --force when fetching.

With this we could say:

    Pull: master:ko-master +pu:ko-pu

to mean "fast forward ko-master with master, overwrite ko-pu with pu",
and the latter one does not require the remote "pu" to be descendant
of local "ko-pu".

Signed-off-by: Junio C Hamano <junkio@cox.net>
maint
Junio C Hamano 20 years ago
parent
commit
efe9bf0f3b
  1. 16
      git-fetch-script
  2. 9
      git-parse-remote-script

16
git-fetch-script

@ -104,8 +104,8 @@ fast_forward_local () {
;; ;;
esac || { esac || {
echo >&2 "* $1: does not fast forward to $4" echo >&2 "* $1: does not fast forward to $4"
case "$force" in case "$force,$single_force" in
t) t,* | *,t)
echo >&2 " from $3; forcing update." echo >&2 " from $3; forcing update."
;; ;;
*) *)
@ -130,6 +130,13 @@ do


# These are relative path from $GIT_DIR, typically starting at refs/ # These are relative path from $GIT_DIR, typically starting at refs/
# but may be HEAD # but may be HEAD
if expr "$ref" : '\+' >/dev/null
then
single_force=t
ref=$(expr "$ref" : '\+\(.*\)')
else
single_force=
fi
remote_name=$(expr "$ref" : '\([^:]*\):') remote_name=$(expr "$ref" : '\([^:]*\):')
local_name=$(expr "$ref" : '[^:]*:\(.*\)') local_name=$(expr "$ref" : '[^:]*:\(.*\)')


@ -175,9 +182,14 @@ http://* | https://* | rsync://* )
while read sha1 remote_name while read sha1 remote_name
do do
found= found=
single_force=
for ref in $refs for ref in $refs
do do
case "$ref" in case "$ref" in
+$remote_name:*)
single_force=t
found="$ref"
break ;;
$remote_name:*) $remote_name:*)
found="$ref" found="$ref"
break ;; break ;;

9
git-parse-remote-script

@ -69,6 +69,13 @@ get_remote_default_refs_for_push () {
canon_refs_list_for_fetch () { canon_refs_list_for_fetch () {
for ref for ref
do do
force=
case "$ref" in
+*)
ref=$(expr "$ref" : '\+\(.*\)')
force=+
;;
esac
expr "$ref" : '.*:' >/dev/null || ref="${ref}:" expr "$ref" : '.*:' >/dev/null || ref="${ref}:"
remote=$(expr "$ref" : '\([^:]*\):') remote=$(expr "$ref" : '\([^:]*\):')
local=$(expr "$ref" : '[^:]*:\(.*\)') local=$(expr "$ref" : '[^:]*:\(.*\)')
@ -80,7 +87,7 @@ canon_refs_list_for_fetch () {
'') local= ;; '') local= ;;
*) local="refs/heads/$local" ;; *) local="refs/heads/$local" ;;
esac esac
echo "${remote}:${local}" echo "${force}${remote}:${local}"
done done
} }



Loading…
Cancel
Save