#!/bin/bash

usage() {
    echo "Usage: $0 <branch> [<remote>]"
    exit 2
}

[[ $# -gt 0 ]] || usage
branch=$1
remotebranch=${2:-origin}/$branch
remotebranchpath=remotes/$remotebranch

if [[ -z `git branch -r --list $remotebranch` ]]; then
    echo "Remote branch $remotebranch does not exist!"
    exit 1
fi

if [[ -z `git branch --list $branch` ]]; then
    git checkout -b "$branch" "$remotebranchpath"
else
    if ! git show -s "$branch" | grep -q '^git-svn-id:'; then
        backupnum=
        backupbranch=$branch.bak
        while [[ -n `git branch --list "$backupbranch"` ]]; do
            let backupnum+=1
            backupbranch=$branch.bak.$backupnum
            if [[ $backupnum -gt 9 ]]; then
                echo "Local $branch has unpushed changes, unable to backup"
                echo "Clean up your old $branch.bak* branches"
                exit 1
            fi
        done
        echo "local branch $branch has unpushed changes, saving as $backupbranch"
        git branch "$backupbranch" "$branch"
    fi
    git checkout -B "$branch" "$remotebranchpath"
fi

