X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-utils.git;a=blobdiff_plain;f=scripts%2Fgit-branchmove;h=6952727b7421614ecb8b9f1ffee9c167110b7e6e;hp=e68c47485993bbde630db68c9711b334010a15b1;hb=041833cff43c78a9c588590473977632649de31b;hpb=cf631b0c9dc0158a126ef201a309042c14beeee6 diff --git a/scripts/git-branchmove b/scripts/git-branchmove index e68c474..6952727 100755 --- a/scripts/git-branchmove +++ b/scripts/git-branchmove @@ -35,6 +35,7 @@ case "$remote" in git config remote."$remote".url || fail "no pushurl or url defined for remote $remote" )" + remotename="$remote" esac remote_spec="$(perl -e ' @@ -46,7 +47,7 @@ remote_spec="$(perl -e ' } elsif (m#^([-+_.0-9a-zA-Z\@]+):(?!//|:)#) { print "$'\''|ssh $1\n"; } elsif (m#^[/.]#) { - print "$&|sh -c $1\n"; + print "$_|sh -c $1\n"; } else { die "git-branchmove: unsupported remote url \`$_'\''\n"; } @@ -171,8 +172,30 @@ esac src_ref="${src_rm%=*}" src_obj="${src_rm##*=}" git update-ref -m "$updatemsg" -d "$src_ref" "$src_obj" - echo "move complete: $src_ref" + echo "moved: $src_ref" done ' -echo "moved ${#src_branches[@]} branches." +#----- update the remote tracking branches ----- + +if [ "x$remotename" != x ]; then + for src_rm in "${src_branches[@]}"; do + src_ref="${src_rm%=*}" + src_obj="${src_rm##*=}" + + case "$src_ref" in + refs/heads/*) ;; + *) continue ;; + esac + + branch="${src_ref#refs/heads/}" + track_ref="refs/remotes/$remotename/$branch" + case $op in + get) git update-ref -d "$track_ref" ;; + put) git update-ref "$track_ref" "$src_obj" ;; + *) fail "unknown $op ???" + esac + done +fi + +echo "git-repomove: moved ${#src_branches[@]} branches."