--- /dev/null
+#!/bin/sh
+
+branch_name=$1
+
+exists_local=$(git branch | grep -x " $branch_name" | wc -l)
+exists_remote=$(git branch | grep -x " origin/$branch_name" | wc -l)
+
+if [[ $exists_remote -eq 0 ]] ; then
+ # Make sure we have the latest origin/stable to branch
+ git fetch
+ # Specifying stable to get the last released code
+ git checkout -b "$branch_name" origin/stable
+ # Go ahead and put the branch out on the server
+ git push origin "$branch_name"
+ # Setup the merge property so that pulls come from the right place (instead of stable)
+ git config --replace-all "branch.$branch_name.merge" "refs/heads/$branch_name"
+else
+ if [[ $exists_local -eq 0 ]] ; then
+ # Make sure we have the latest origin/$branch_name to branch
+ git fetch
+ # Do the checkout
+ git checkout -b "$branch_name" "origin/$branch_name"
+ else
+ # Just checkout
+ git checkout "$branch_name"
+ fi
+fi
+
+++ /dev/null
-#!/bin/sh
-
-new_branch_name=$1
-
-# Make sure we have the latest origin/stable to branch
-git fetch
-
-# Specifying stable to get the last released code
-git checkout -b $new_branch_name origin/stable
-
-# Go ahead and put the branch out on the server
-git push origin $new_branch_name
-
-# Setup the merge property so that pulls come from the right place (instead of stable)
-git config --replace-all "branch.$new_branch_name.merge" "refs/heads/$new_branch_name"
-
--- /dev/null
+#!/bin/sh
+
+test_description='script checkout'
+
+. ./test-lib.sh
+
+export PATH=$PATH:../../scripts
+
+test_expect_success 'setup' '
+ echo "setup" >a &&
+ git add a &&
+ git commit -m "setup" &&
+ git clone ./. server &&
+ rm -fr server/.git/hooks &&
+ git remote add origin ./server
+ git checkout -b stable &&
+ git push origin stable
+'
+
+test_expect_success 'checkout a new branch clones stable' '
+ checkout topic1 &&
+ git branch | grep topic1 &&
+ git branch -r | grep origin/topic1 &&
+ git config --list | grep "branch.topic1.merge=refs/heads/topic1"
+'
+
+test_expect_success 'checkout an existing remote branch' '
+ cd server &&
+ git checkout -b topic2 stable &&
+ echo "$test_name" >a &&
+ git commit -a -m "Made topic2 on server" &&
+ cd .. &&
+
+ checkout topic2
+ git branch | grep topic2
+ git branch -r | grep origin/topic2
+ git config --list | grep "branch.topic2.merge=refs/heads/topic2"
+'
+
+test_expect_success 'checkout an existing local branch' '
+ checkout topic1
+'
+
+test_done
+
+++ /dev/null
-#!/bin/sh
-
-test_description='script create branch'
-
-. ./test-lib.sh
-
-export PATH=$PATH:../../scripts
-
-test_expect_success 'setup' '
- echo "setup" >a &&
- git add a &&
- git commit -m "setup" &&
- git clone ./. server &&
- rm -fr server/.git/hooks &&
- git remote add origin ./server &&
- git config --add branch.master.remote origin &&
- git config --add branch.master.merge refs/heads/master &&
- git fetch
-
- git checkout -b stable
- git push origin stable
-'
-
-test_expect_success 'create branch clones stable' '
- create-branch topic1
- git branch | grep topic1
- git branch -r | grep origin/topic1
- git config --list | grep "branch.topic1.merge=refs/heads/topic1"
-'
-
-test_done
-