diff --git a/lib/whiskey_disk.rb b/lib/whiskey_disk.rb index 5d13e1a..698ea11 100644 --- a/lib/whiskey_disk.rb +++ b/lib/whiskey_disk.rb @@ -206,7 +206,9 @@ def if_task_defined(task, cmd) end def safe_branch_checkout(path, my_branch) - %Q(cd #{path} && git checkout -b #{my_branch} origin/#{my_branch} || git checkout #{my_branch} origin/#{my_branch} || git checkout #{my_branch}) + %Q(cd #{path} && ) + + %Q((branch=`git symbolic-ref HEAD`; [ $branch == "refs/heads/#{my_branch}" ]) || ) + + %Q(git checkout -b #{my_branch} origin/#{my_branch} || git checkout #{my_branch} origin/#{my_branch} || git checkout #{my_branch}) end def clone_repository(repo, path, my_branch) diff --git a/spec/whiskey_disk_spec.rb b/spec/whiskey_disk_spec.rb index 38d1621..e37688a 100644 --- a/spec/whiskey_disk_spec.rb +++ b/spec/whiskey_disk_spec.rb @@ -273,7 +273,12 @@ def system(*args) it 'does branch checkouts from the repository path' do @whiskey_disk.checkout_main_repository - @whiskey_disk.buffer.join(' ').should.match(%r{cd /path/to/main/repo && git checkout}) + @whiskey_disk.buffer.join(' ').should.match(%r{git checkout}) + end + + it 'should verify if branch is already checked out' do + @whiskey_disk.checkout_main_repository + @whiskey_disk.buffer.join(' ').should.match(%r{cd /path/to/main/repo && \(branch=\`git symbolic-ref HEAD\`; \[ \$branch == "refs/heads/master" \]\) \|\| git checkout}) end end