Code

Merge branch 'maint-1.6.0' into maint-1.6.1
[git.git] / t / t5505-remote.sh
index 0103e1a18046b6a156721da0036155b2f707b9f6..bc5b7ce4a6b5fd898d1ea5a9f3e6a148d45f0535 100755 (executable)
@@ -28,7 +28,7 @@ tokens_match () {
 }
 
 check_remote_track () {
-       actual=$(git remote show "$1" | sed -n -e '$p') &&
+       actual=$(git remote show "$1" | sed -e '1,/Tracked/d') &&
        shift &&
        tokens_match "$*" "$actual"
 }
@@ -107,6 +107,32 @@ test_expect_success 'remove remote' '
 )
 '
 
+test_expect_success 'remove remote protects non-remote branches' '
+(
+       cd test &&
+       (cat >expect1 <<EOF
+Note: A non-remote branch was not removed; to delete it, use:
+  git branch -d master
+EOF
+    cat >expect2 <<EOF
+Note: Non-remote branches were not removed; to delete them, use:
+  git branch -d foobranch
+  git branch -d master
+EOF
+) &&
+       git tag footag
+       git config --add remote.oops.fetch "+refs/*:refs/*" &&
+       git remote rm oops 2>actual1 &&
+       git branch foobranch &&
+       git config --add remote.oops.fetch "+refs/*:refs/*" &&
+       git remote rm oops 2>actual2 &&
+       git branch -d foobranch &&
+       git tag -d footag &&
+       test_cmp expect1 actual1 &&
+       test_cmp expect2 actual2
+)
+'
+
 cat > test/expect << EOF
 * remote origin
   URL: $(pwd)/one
@@ -115,9 +141,11 @@ cat > test/expect << EOF
   New remote branch (next fetch will store in remotes/origin)
     master
   Tracked remote branches
-    side master
+    side
+    master
   Local branches pushed with 'git push'
-    master:upstream +refs/tags/lastbackup
+    master:upstream
+    +refs/tags/lastbackup
 EOF
 
 test_expect_success 'show' '
@@ -144,9 +172,11 @@ cat > test/expect << EOF
   Remote branch merged with 'git pull' while on branch master
     master
   Tracked remote branches
-    master side
+    master
+    side
   Local branches pushed with 'git push'
-    master:upstream +refs/tags/lastbackup
+    master:upstream
+    +refs/tags/lastbackup
 EOF
 
 test_expect_success 'show -n' '
@@ -324,4 +354,52 @@ test_expect_success 'reject adding remote with an invalid name' '
 
 '
 
+# The first three test if the tracking branches are properly renamed,
+# the last two ones check if the config is updated.
+
+test_expect_success 'rename a remote' '
+
+       git clone one four &&
+       (cd four &&
+        git remote rename origin upstream &&
+        rmdir .git/refs/remotes/origin &&
+        test "$(git symbolic-ref refs/remotes/upstream/HEAD)" = "refs/remotes/upstream/master" &&
+        test "$(git rev-parse upstream/master)" = "$(git rev-parse master)" &&
+        test "$(git config remote.upstream.fetch)" = "+refs/heads/*:refs/remotes/upstream/*" &&
+        test "$(git config branch.master.remote)" = "upstream")
+
+'
+
+cat > remotes_origin << EOF
+URL: $(pwd)/one
+Push: refs/heads/master:refs/heads/upstream
+Pull: refs/heads/master:refs/heads/origin
+EOF
+
+test_expect_success 'migrate a remote from named file in $GIT_DIR/remotes' '
+       git clone one five &&
+       origin_url=$(pwd)/one &&
+       (cd five &&
+        git remote rm origin &&
+        mkdir -p .git/remotes &&
+        cat ../remotes_origin > .git/remotes/origin &&
+        git remote rename origin origin &&
+        ! test -f .git/remotes/origin &&
+        test "$(git config remote.origin.url)" = "$origin_url" &&
+        test "$(git config remote.origin.push)" = "refs/heads/master:refs/heads/upstream" &&
+        test "$(git config remote.origin.fetch)" = "refs/heads/master:refs/heads/origin")
+'
+
+test_expect_success 'migrate a remote from named file in $GIT_DIR/branches' '
+       git clone one six &&
+       origin_url=$(pwd)/one &&
+       (cd six &&
+        git remote rm origin &&
+        echo "$origin_url" > .git/branches/origin &&
+        git remote rename origin origin &&
+        ! test -f .git/branches/origin &&
+        test "$(git config remote.origin.url)" = "$origin_url" &&
+        test "$(git config remote.origin.fetch)" = "refs/heads/master:refs/heads/origin")
+'
+
 test_done