webmat-git_remote_branch 0.2.6 → 0.2.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,158 @@
1
+ = Why git_remote_branch?
2
+
3
+ The basic idea for git_remote_branch is to trivialize the interaction with
4
+ remote branches in simple situations.
5
+
6
+ For now git_remote_branch assumes that the local and remote branches have the
7
+ same name. Multiple origins are supported.
8
+
9
+ Another goal of git_remote_branch is to help teach the real underlying git
10
+ commands. Each operation done on your behalf is displayed at the console.
11
+
12
+
13
+
14
+ = Installation
15
+
16
+ sudo gem install git_remote_branch
17
+
18
+ If you have an older version of Rubygems (older than 1.2), you will have to manually install the "colored" gem.
19
+ sudo gem install colored
20
+
21
+ If you're on Windows, you must install "colored" and "win32console" manually (before or after installing git_remote_branch doesn't matter).
22
+ gem install win32console colored
23
+
24
+
25
+ See the "Bleeding edge and development" section the end of this document for more details about fiddling with the source of git_remote_branch.
26
+
27
+ = Usage
28
+
29
+ Notes:
30
+ - parts between brackets are optional
31
+ - When 'origin_server' is not specified, the name 'origin' is assumed.
32
+
33
+ Available commands (with aliases):
34
+
35
+
36
+ === Help
37
+
38
+ $ grb [-h|help] #=> Displays help
39
+
40
+ === create (alias: new)
41
+
42
+ Create a new local branch as well as a corresponding remote branch from the
43
+ branch you are currently on.
44
+ Automatically track the new remote branch (useful for pulling and merging).
45
+ Switch to the new branch.
46
+
47
+ $ grb create branch_name [origin_server]
48
+
49
+
50
+ === publish (aliases: remotize)
51
+
52
+ Publish an existing local branch to the remote server.
53
+ Set up the local branch to track the new remote branch.
54
+ Switch to the new branch.
55
+
56
+ $ grb publish branch_name [origin_server]
57
+
58
+
59
+ === delete (aliases: destroy, kill, remove)
60
+
61
+ Delete the remote branch then delete the local branch.
62
+ The local branch is not deleted if there are pending changes.
63
+
64
+ $ grb delete branch_name [origin_server]
65
+
66
+
67
+ === track (aliases: follow grab fetch)
68
+
69
+ Track an existing remote branch locally.
70
+
71
+ $ grb track branch_name [origin_server]
72
+
73
+
74
+ === rename (aliases: rn, mv, move)
75
+ To rename the branch you're currently on.
76
+ Rename the remote branch by copying then deleting the old name.
77
+ Checkout a new local tracking branch with the new name and delete the local
78
+ branch with the old name.
79
+
80
+ $ grb rename branch_name [origin_server]
81
+
82
+
83
+ === explain
84
+
85
+ All commands can be prepended by the word 'explain'. Instead of executing the
86
+ command, git_remote_branch will simply output the list of commands you need to
87
+ run to accomplish that goal.
88
+ Examples:
89
+
90
+ $ grb explain create
91
+ git_remote_branch version 0.2.7
92
+
93
+ List of operations to do to create a new remote branch and track it locally:
94
+
95
+ git push origin master:refs/heads/branch_to_create
96
+ git fetch origin
97
+ git branch --track branch_to_create origin/branch_to_create
98
+ git checkout branch_to_create
99
+
100
+
101
+ $ grb explain create my_branch github
102
+ git_remote_branch version 0.2.7
103
+
104
+ List of operations to do to create a new remote branch and track it locally:
105
+
106
+ git push github master:refs/heads/my_branch
107
+ git fetch github
108
+ git branch --track my_branch github/my_branch
109
+ git checkout my_branch
110
+
111
+
112
+
113
+ = More on git_remote_branch
114
+
115
+ - Documentation: http://grb.rubyforge.org
116
+ - News: http://programblings.com/category/git/git_remote_branch/
117
+ - Bug tracker: http://git-remote-branch.lighthouseapp.com/projects/19198-git_remote_branch/overview
118
+ - Code: http://github.com/webmat/git_remote_branch
119
+ - Mailing list: http://groups.google.com/group/git_remote_branch
120
+
121
+
122
+ == History
123
+
124
+ git_remote_branch in its current form was inspired by a script created by Carl Mercier and made public on his blog
125
+ here:
126
+
127
+ {No nonsense GIT, part 1: git-remote-branch}[http://blog.carlmercier.com/2008/01/25/no-nonsense-git-part-1-git-remote-branch/]
128
+
129
+
130
+ == Contributors
131
+
132
+ - Mathieu Martin webmat@gmail.com
133
+ - Caio Chassot dev@caiochassot.com
134
+ - Axelson github.com/axelson
135
+ - Carl Mercier github.com/cmer
136
+
137
+
138
+ == Legalese
139
+
140
+ git_remote_branch is licensed under the MIT License. See the file COPYING for details.
141
+
142
+ == Bleeding edge and development
143
+
144
+ (Notice the keyword "bleeding")
145
+
146
+ Installing from GitHub
147
+ sudo gem install webmat-git_remote_branch --source=http://gems.github.com
148
+
149
+ Cloning the repo and installing from your copy
150
+ git clone git://github.com/webmat/git_remote_branch.git
151
+ rake install
152
+
153
+ Note that git_remote_branch uses a few more gems for tests. Running any rake task will try to load them due to the way Rake::TestTask works.
154
+
155
+ sudo gem install thoughtbot-shoulda --source http://gems.github.com
156
+ sudo gem install mocha
157
+
158
+ An attempt is made to require 2 more optional gems: redgreen and ruby-debug
data/Rakefile CHANGED
@@ -2,11 +2,16 @@ require 'rubygems'
2
2
 
3
3
  require 'rake'
4
4
 
5
- HERE = File.dirname(__FILE__)
6
- windows = (RUBY_PLATFORM =~ /win32|cygwin/) rescue nil
7
- SUDO = windows ? "" : "sudo"
5
+ GRB_ROOT = File.dirname(__FILE__)
6
+
7
+ #So we can use GitRemoteBranch::NAME, VERSION and so on.
8
+ require "#{GRB_ROOT}/lib/git_remote_branch"
9
+
10
+ SUDO = WINDOWS ? "" : "sudo"
8
11
 
9
- require "#{HERE}/lib/git_remote_branch"
10
12
  Dir['tasks/**/*.rake'].each { |rake| load rake }
11
13
 
14
+ desc 'Default: run all tests.'
12
15
  task :default => :test
16
+
17
+ task :clean => [:clobber_package, :clobber_rdoc]
@@ -1,5 +1,18 @@
1
1
  require 'rubygems'
2
- require 'colored'
2
+
3
+ if RUBY_VERSION =~ /1\.8/
4
+ gem 'colored', '>= 1.1'
5
+ require 'colored'
6
+ else
7
+ class String
8
+ def red; self; end
9
+ end
10
+ end
11
+
12
+ begin
13
+ WINDOWS = (RUBY_PLATFORM =~ /win32|cygwin/)
14
+ rescue Exception
15
+ end
3
16
 
4
17
  grb_app_root = File.expand_path( File.dirname(__FILE__) + '/..' )
5
18
 
@@ -7,6 +20,8 @@ $LOAD_PATH.unshift( grb_app_root + '/vendor' )
7
20
  require 'capture_fu'
8
21
 
9
22
  $LOAD_PATH.unshift( grb_app_root + '/lib' )
23
+ require 'string_ext'
24
+ require 'state'
10
25
  require 'param_reader'
11
26
  require 'version'
12
27
 
@@ -28,7 +43,7 @@ module GitRemoteBranch
28
43
 
29
44
  :publish => {
30
45
  :description => 'publish an exiting local branch',
31
- :aliases => %w{publish remotize},
46
+ :aliases => %w{publish remotize share},
32
47
  :commands => [
33
48
  '"git push #{origin} #{branch_name}:refs/heads/#{branch_name}"',
34
49
  '"git fetch #{origin}"',
@@ -65,9 +80,14 @@ module GitRemoteBranch
65
80
  :description => 'track an existing remote branch',
66
81
  :aliases => %w{track follow grab fetch},
67
82
  :commands => [
83
+ # This string programming thing is getting old. Not flexible enough anymore.
68
84
  '"git fetch #{origin}"',
69
- '"git checkout master" if current_branch == branch_name',
70
- '"git branch --track #{branch_name} #{origin}/#{branch_name}"'
85
+ 'if local_branches.include?(branch_name)
86
+ "git config branch.#{branch_name}.remote #{origin}\n" +
87
+ "git config branch.#{branch_name}.merge refs/heads/#{branch_name}"
88
+ else
89
+ "git branch --track #{branch_name} #{origin}/#{branch_name}"
90
+ end'
71
91
  ]
72
92
  }
73
93
  } unless defined?(COMMANDS)
@@ -1,5 +1,4 @@
1
1
  module GitRemoteBranch
2
- include ::CaptureFu
3
2
 
4
3
  private
5
4
  HELP_PARAMS = {:action => :help}
@@ -61,24 +60,4 @@ module GitRemoteBranch
61
60
  def get_origin(origin)
62
61
  return origin || 'origin'
63
62
  end
64
-
65
- private
66
- BRANCH_LISTING_COMMAND = 'git branch -l'.freeze
67
-
68
- public
69
- def get_current_branch
70
- #This is sensitive to checkouts of branches specified with wrong case
71
-
72
- listing = capture_process_output("#{BRANCH_LISTING_COMMAND}")[1]
73
- raise(NotOnGitRepositoryError, listing.chomp) if listing =~ /Not a git repository/i
74
-
75
- current_branch = listing.scan(/^\*\s+(.+)/).flatten.first
76
-
77
- if current_branch =~ /\(no branch\)/
78
- raise InvalidBranchError, ["Couldn't identify the current local branch. The branch listing was:",
79
- BRANCH_LISTING_COMMAND.red,
80
- listing].join("\n")
81
- end
82
- current_branch.strip
83
- end
84
63
  end
@@ -0,0 +1,40 @@
1
+ module GitRemoteBranch
2
+ include ::CaptureFu
3
+
4
+ private
5
+ LOCAL_BRANCH_LISTING_COMMAND = 'git branch -l'.freeze
6
+
7
+ public
8
+ def get_current_branch
9
+ local_branch_information[0]
10
+ end
11
+
12
+ def local_branches
13
+ local_branch_information[1]
14
+ end
15
+
16
+ private
17
+ # Returns an array of 2 elements: [current_branch, [all local branches]]
18
+ def local_branch_information
19
+ #This is sensitive to checkouts of branches specified with wrong case
20
+
21
+ listing = capture_process_output("#{LOCAL_BRANCH_LISTING_COMMAND}")[1]
22
+
23
+ raise(NotOnGitRepositoryError, listing.chomp) if listing =~ /Not a git repository/i
24
+ if listing =~ /\(no branch\)/
25
+ raise InvalidBranchError, ["Couldn't identify the current local branch. The branch listing was:",
26
+ LOCAL_BRANCH_LISTING_COMMAND.red,
27
+ listing].join("\n")
28
+ end
29
+
30
+ current_branch = nil
31
+ branches = listing.split("\n").map do |line|
32
+ current = line.include? '*'
33
+ clean_line = line.gsub('*','').strip
34
+ current_branch = clean_line if current
35
+ clean_line
36
+ end
37
+
38
+ return current_branch, branches
39
+ end
40
+ end
@@ -0,0 +1,5 @@
1
+ class String
2
+ def path_for_os
3
+ WINDOWS ? self.gsub('/', '\\') : self
4
+ end
5
+ end
@@ -2,7 +2,7 @@ module GitRemoteBranch
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 2
5
- TINY = 6
5
+ TINY = 7
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.').freeze
8
8
  end
@@ -2,8 +2,6 @@ require 'yaml'
2
2
 
3
3
  require 'rake/gempackagetask'
4
4
 
5
- task :clean => :clobber_package
6
-
7
5
  spec = Gem::Specification.new do |s|
8
6
  s.name = GitRemoteBranch::NAME
9
7
  s.version = GitRemoteBranch::VERSION::STRING
@@ -16,10 +14,12 @@ spec = Gem::Specification.new do |s|
16
14
  s.homepage = "http://github.com/webmat/git_remote_branch"
17
15
  s.rubyforge_project = 'grb'
18
16
 
19
- s.has_rdoc = false
17
+ s.has_rdoc = true
18
+ s.extra_rdoc_files << 'README.rdoc'
19
+ s.rdoc_options << '--main' << 'README.rdoc' << '--exclude' << 'lib'
20
20
 
21
- s.test_files = Dir['test/**/*']
22
- s.files = Dir['**/*'].reject{|f| f =~ /\Apkg|\Acoverage|\.gemspec\Z/}
21
+ s.test_files = Dir['test/**/*'].reject{|f| f =~ /test_runs/}
22
+ s.files = Dir['**/*'].reject{|f| f =~ /\Apkg|\Acoverage|\Ardoc|test_runs|\.gemspec\Z/}
23
23
 
24
24
  s.executable = 'grb'
25
25
  s.bindir = "bin"
@@ -59,15 +59,30 @@ namespace :gem do
59
59
  desc 'Upload gem to rubyforge.org'
60
60
  task :rubyforge => :gem do
61
61
  sh 'rubyforge login'
62
- sh "rubyforge add_release grb grb 'release #{GitRemoteBranch::VERSION::STRING}' pkg/#{spec.full_name}.gem"
62
+ sh "rubyforge add_release grb grb '#{GitRemoteBranch::VERSION::STRING}' pkg/#{spec.full_name}.gem"
63
63
  sh "rubyforge add_file grb grb #{GitRemoteBranch::VERSION::STRING} pkg/#{spec.full_name}.gem"
64
64
  end
65
- end
66
-
67
- task :install => [:clean, :gem] do
68
- sh "#{SUDO} gem install pkg/#{spec.full_name}.gem"
69
- end
70
-
71
- task :uninstall do
72
- sh "#{SUDO} gem uninstall -v #{GitRemoteBranch::VERSION::STRING} -x #{GitRemoteBranch::NAME}"
65
+
66
+ desc 'Install the gem built locally'
67
+ task :install => [:clean, :gem] do
68
+ sh "#{SUDO} gem install pkg/#{spec.full_name}.gem"
69
+ end
70
+
71
+ desc "Uninstall version #{GitRemoteBranch::VERSION::STRING} of the gem"
72
+ task :uninstall do
73
+ sh "#{SUDO} gem uninstall -v #{GitRemoteBranch::VERSION::STRING} -x #{GitRemoteBranch::NAME}"
74
+ end
75
+
76
+ if WINDOWS
77
+ win_spec = spec.dup
78
+ win_spec.platform = Gem::Platform::CURRENT
79
+ win_spec.add_dependency( 'win32console', '~> 1.1' ) # Missing dependency in the 'colored' gem
80
+
81
+ desc "Generate the Windows version of the gem"
82
+ namespace :windows do
83
+ Rake::GemPackageTask.new(win_spec) do |p|
84
+ p.gem_spec = win_spec
85
+ end
86
+ end
87
+ end
73
88
  end
@@ -0,0 +1,15 @@
1
+ require 'rake/rdoctask'
2
+
3
+ desc 'Generate rdoc documentation'
4
+ Rake::RDocTask.new(:rdoc) do |rdoc|
5
+ rdoc.rdoc_dir = 'rdoc'
6
+ rdoc.title = GitRemoteBranch::NAME
7
+ rdoc.rdoc_files.include('README.rdoc')
8
+ end
9
+
10
+ namespace :rdoc do
11
+ desc 'Upload documentation to rubyforge'
12
+ task :upload => :rdoc do
13
+ sh "scp -r #{GRB_ROOT}/rdoc/* webmat@rubyforge.org:/var/www/gforge-projects/grb/"
14
+ end
15
+ end
@@ -1,10 +1,7 @@
1
1
  require 'rake/testtask'
2
2
 
3
3
  desc "Run all tests"
4
- Rake::TestTask.new(:test) do |t|
5
- t.pattern = 'test/**/*_test.rb'
6
- t.verbose = true
7
- end
4
+ task :test => ["test:unit", "test:functional"]
8
5
 
9
6
  namespace :test do
10
7
  desc "Run functional tests"
@@ -20,13 +20,35 @@ class GRBTest < Test::Unit::TestCase
20
20
  should_have_branch 'new_branch', :local
21
21
  end
22
22
 
23
- context "the other local clone, tracking the new branch" do
23
+ context "the other local clone" do
24
24
  setup do
25
25
  in_directory_for :local2
26
- run_grb_with 'track new_branch'
27
26
  end
28
27
 
29
- should_have_branch 'new_branch', :local, :remote
28
+ context "not already having a branch of the same name" do
29
+ setup do
30
+ @output = run_grb_with 'track new_branch'
31
+ end
32
+
33
+ should_have_branch 'new_branch', :local, :remote
34
+
35
+ should "use the branch --track command" do
36
+ assert_match %r{branch --track}, @output
37
+ end
38
+ end
39
+
40
+ context "having a branch of the same name" do
41
+ setup do
42
+ execute "git branch new_branch"
43
+ @output = run_grb_with 'track new_branch'
44
+ end
45
+
46
+ should_have_branch 'new_branch', :local, :remote
47
+
48
+ should "use git config to connect the branches" do
49
+ assert_match %r{git\sconfig}, @output
50
+ end
51
+ end
30
52
  end
31
53
 
32
54
  context "then deleting the branch" do
@@ -0,0 +1,15 @@
1
+ REGULAR_BRANCH_LISTING = <<-STR
2
+ other_user/master
3
+ * stubbed_current_branch
4
+ rubyforge
5
+ STR
6
+
7
+ BRANCH_LISTING_WHEN_NOT_ON_BRANCH = <<-STR
8
+ * (no branch)
9
+ other_user/master
10
+ master
11
+ rubyforge
12
+ STR
13
+
14
+ WHEN_NOT_ON_GIT_REPOSITORY = "fatal: Not a git repository\n"
15
+
@@ -1,5 +1,4 @@
1
- require 'fileutils'
2
- require 'tmpdir'
1
+ require File.dirname(__FILE__) + '/in_dir'
3
2
  require File.dirname(__FILE__) + '/temp_dir_helper'
4
3
 
5
4
  # Instantiating a GitHelper object creates a temp directory containing 3 repos.
@@ -8,12 +7,12 @@ require File.dirname(__FILE__) + '/temp_dir_helper'
8
7
  # Once instantiated you can access the 3 full repo locations through attribute readers
9
8
  # remote, local1 and local2.
10
9
  class GitHelper < TempDirHelper
11
-
10
+ include InDir
11
+
12
12
  attr_reader :remote, :local1, :local2
13
13
 
14
14
  def initialize
15
- super('grb_test')
16
-
15
+ super("#{TEST_DIR}/test_runs")
17
16
  @remote = init_repo(directory, 'remote')
18
17
  @local1 = clone_repo(@remote, directory, 'local1')
19
18
  @local2 = clone_repo(@remote, directory, 'local2')
@@ -22,12 +21,19 @@ class GitHelper < TempDirHelper
22
21
  protected
23
22
  def init_repo(path, name)
24
23
  repo_dir = File.join(path, name)
25
- `mkdir #{repo_dir}; cd $_; git init; touch file.txt; git add .; git commit -a -m "dummy file"`
24
+ mkdir_p repo_dir
25
+
26
+ in_dir repo_dir do
27
+ `git init && echo "foo" > file.txt && git add . && git commit -a -m "dummy file"`
28
+ end
29
+ raise "Error setting up repository #{name}" unless $?.exitstatus == 0
26
30
  repo_dir
27
31
  end
28
32
 
29
33
  def clone_repo(origin_path, clone_path, name)
30
- `cd #{clone_path}; git clone #{File.join(origin_path, '.git')} #{name}`
34
+ in_dir clone_path do
35
+ `git clone #{File.join(origin_path, '.git').path_for_os} #{name}`
36
+ end
31
37
  return File.join(clone_path, name)
32
38
  end
33
39
  end
@@ -0,0 +1,10 @@
1
+ module InDir
2
+ def in_dir(dir, &block)
3
+ prev_dir = Dir.pwd
4
+ Dir.chdir dir
5
+
6
+ yield
7
+ ensure
8
+ Dir.chdir prev_dir
9
+ end
10
+ end
@@ -1,6 +1,21 @@
1
1
  module ShouldaFunctionalHelpers
2
2
  include CaptureFu
3
- GRB_COMMAND = File.expand_path(File.dirname(__FILE__) + '/../../bin/grb') unless defined?(GRB_COMMAND)
3
+ include InDir
4
+
5
+ def self.ruby_prefix
6
+ if ENV['RUBY']
7
+ warn " Forcing execution of grb with ruby interpreter #{ENV['RUBY']}"
8
+ ENV['RUBY'] + ' '
9
+ elsif WINDOWS
10
+ 'ruby '
11
+ else
12
+ ''
13
+ end
14
+ end
15
+
16
+ # Here we're only prepending with 'ruby'.
17
+ # When run as a gem, RubyGems takes care of generating a batch file that does this stuff.
18
+ GRB_COMMAND = ruby_prefix + File.expand_path(File.dirname(__FILE__) + '/../../bin/grb') unless defined?(GRB_COMMAND)
4
19
 
5
20
  def self.included(base)
6
21
  base.extend ClassMethods
@@ -38,8 +53,10 @@ module ShouldaFunctionalHelpers
38
53
  end
39
54
 
40
55
  def execute(command)
41
- errno, returned_string = capture_process_output("cd #{current_dir} ; #{command}")
42
- returned_string
56
+ in_dir current_dir do
57
+ errno, returned_string = capture_process_output(command)
58
+ returned_string
59
+ end
43
60
  end
44
61
 
45
62
  private
@@ -6,8 +6,8 @@ class TempDirHelper
6
6
 
7
7
  attr_reader :directory
8
8
 
9
- def initialize(namespace='temp_dir_helper')
10
- @directory = get_temp_dir!(namespace)
9
+ def initialize(force_temp_dir=nil)
10
+ @directory = get_temp_dir!(force_temp_dir)
11
11
  end
12
12
 
13
13
  def cleanup
@@ -19,14 +19,14 @@ class TempDirHelper
19
19
  end
20
20
 
21
21
  private
22
- def get_temp_dir!(namespace='')
23
- wd = File.expand_path( File.join( Dir::tmpdir, namespace) )
24
- mkdir wd unless File.exists? wd
22
+ def get_temp_dir!(parent_dir=nil)
23
+ temp_root = File.expand_path( File.join( parent_dir || Dir::tmpdir) )
24
+ mkdir_p temp_root
25
25
 
26
26
  #Create new subdir with a random name
27
27
  new_dir=''
28
28
  begin
29
- new_dir = File.join( wd, "#{rand(10000)}" )
29
+ new_dir = File.join( temp_root, "#{rand(10000)}" )
30
30
  mkdir new_dir
31
31
 
32
32
  rescue
@@ -1,22 +1,30 @@
1
1
  require 'rubygems'
2
2
  require 'test/unit'
3
3
 
4
- test_dir = File.dirname(__FILE__)
4
+ TEST_DIR = File.dirname(__FILE__)
5
5
 
6
- # Install the non-Rails shoulda gem with 'gem install Shoulda'
7
- # Notice the capitalization in the name.
6
+ # Install version 2 the shoulda gem with
7
+ # gem install thoughtbot-shoulda --source http://gems.github.com
8
+ # Shoulda depends on ActiveSupport 2.0, so if you don't have Rails 2.x installed, install ActiveSupport before Shoulda:
9
+ # gem install activesupport
10
+ gem 'thoughtbot-shoulda', '~> 2.0'
8
11
  require 'shoulda'
12
+ gem 'mocha', '~> 0.5'
9
13
  require 'mocha'
10
14
 
11
15
  # Just load redgreen if not running tests from TextMate
12
16
  IN_TM = !ENV['TM_DIRECTORY'].nil? unless defined?(IN_TM)
13
- require 'redgreen' unless IN_TM
14
-
15
- require 'ruby-debug'
17
+ begin
18
+ require 'redgreen' unless IN_TM
19
+ require 'ruby-debug'
20
+ rescue LoadError => ex
21
+ puts "Couldn't load optional test dependencies.\n #{ex.inspect}"
22
+ end
16
23
 
17
- require File.join( [test_dir] + %w{ .. lib git_remote_branch} )
24
+ require File.join( [TEST_DIR] + %w{ .. lib git_remote_branch} )
18
25
 
19
- Dir[test_dir+'/helpers/**/*.rb'].each{|f| require f}
26
+ require "#{TEST_DIR}/helpers/in_dir"
27
+ Dir[TEST_DIR+'/helpers/**/*.rb'].each{|f| require f}
20
28
 
21
29
  class Test::Unit::TestCase
22
30
  include MoreAssertions
@@ -1,19 +1,5 @@
1
1
  require File.join( File.dirname(__FILE__), '..', 'test_helper')
2
-
3
- REGULAR_BRANCH_LISTING = <<-STR
4
- other_user/master
5
- * stubbed_current_branch
6
- rubyforge
7
- STR
8
-
9
- BRANCH_LISTING_WHEN_NOT_ON_BRANCH = <<-STR
10
- * (no branch)
11
- other_user/master
12
- master
13
- rubyforge
14
- STR
15
-
16
- WHEN_NOT_ON_GIT_REPOSITORY = "fatal: Not a git repository\n"
2
+ require "#{TEST_DIR}/helpers/constants"
17
3
 
18
4
  class ParamReaderTest < Test::Unit::TestCase
19
5
  include ShouldaUnitHelpers
@@ -168,38 +154,6 @@ class ParamReaderTest < Test::Unit::TestCase
168
154
  end
169
155
  end
170
156
 
171
- context 'get_current_branch' do
172
- context "when not on a git repository" do
173
- setup do
174
- grb.stubs(:capture_process_output).returns([128, WHEN_NOT_ON_GIT_REPOSITORY])
175
- end
176
-
177
- should "raise an exception" do
178
- assert_raise(GitRemoteBranch::NotOnGitRepositoryError) { grb.get_current_branch }
179
- end
180
- end
181
-
182
- context "when on an invalid branch" do
183
- setup do
184
- grb.stubs(:capture_process_output).returns([0, BRANCH_LISTING_WHEN_NOT_ON_BRANCH])
185
- end
186
-
187
- should "raise an exception" do
188
- assert_raise(GitRemoteBranch::InvalidBranchError) { grb.get_current_branch }
189
- end
190
- end
191
-
192
- context "when on a valid branch" do
193
- setup do
194
- grb.stubs(:capture_process_output).returns([0, REGULAR_BRANCH_LISTING])
195
- end
196
-
197
- should "return the current branch name" do
198
- assert_equal 'stubbed_current_branch', grb.get_current_branch
199
- end
200
- end
201
- end
202
-
203
157
  context 'explain_mode!' do
204
158
  context "when it receives an array beginning with 'explain'" do
205
159
  setup do
@@ -0,0 +1,56 @@
1
+ require File.join( File.dirname(__FILE__), '..', 'test_helper')
2
+ require "#{TEST_DIR}/helpers/constants"
3
+
4
+ class ParamReaderTest < Test::Unit::TestCase
5
+ include ShouldaUnitHelpers
6
+
7
+ def self.craps_out_in_invalid_situations
8
+ context "when not on a git repository" do
9
+ setup do
10
+ grb.stubs(:capture_process_output).returns([128, WHEN_NOT_ON_GIT_REPOSITORY])
11
+ end
12
+
13
+ should "raise an exception" do
14
+ assert_raise(GitRemoteBranch::NotOnGitRepositoryError) { grb.get_current_branch }
15
+ end
16
+ end
17
+
18
+ context "when on an invalid branch" do
19
+ setup do
20
+ grb.stubs(:capture_process_output).returns([0, BRANCH_LISTING_WHEN_NOT_ON_BRANCH])
21
+ end
22
+
23
+ should "raise an exception" do
24
+ assert_raise(GitRemoteBranch::InvalidBranchError) { grb.get_current_branch }
25
+ end
26
+ end
27
+ end
28
+
29
+ context 'get_current_branch' do
30
+ craps_out_in_invalid_situations
31
+
32
+ context "when on a valid branch" do
33
+ setup do
34
+ grb.stubs(:capture_process_output).returns([0, REGULAR_BRANCH_LISTING])
35
+ end
36
+
37
+ should "return the current branch name" do
38
+ assert_equal 'stubbed_current_branch', grb.get_current_branch
39
+ end
40
+ end
41
+ end
42
+
43
+ context 'local_branches' do
44
+ craps_out_in_invalid_situations
45
+
46
+ context "when on a valid branch" do
47
+ setup do
48
+ grb.stubs(:capture_process_output).returns([0, REGULAR_BRANCH_LISTING])
49
+ end
50
+
51
+ should "return all the local branch names" do
52
+ assert_array_content %w{stubbed_current_branch other_user/master rubyforge}, grb.local_branches
53
+ end
54
+ end
55
+ end
56
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: webmat-git_remote_branch
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mathieu Martin
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2008-08-05 21:00:00 -07:00
13
+ date: 2008-11-11 21:00:00 -08:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -29,8 +29,8 @@ executables:
29
29
  - grb
30
30
  extensions: []
31
31
 
32
- extra_rdoc_files: []
33
-
32
+ extra_rdoc_files:
33
+ - README.rdoc
34
34
  files:
35
35
  - bin
36
36
  - bin/grb
@@ -39,20 +39,24 @@ files:
39
39
  - lib
40
40
  - lib/git_remote_branch.rb
41
41
  - lib/param_reader.rb
42
+ - lib/state.rb
43
+ - lib/string_ext.rb
42
44
  - lib/version.rb
43
45
  - Rakefile
44
- - README
46
+ - README.rdoc
45
47
  - tasks
46
48
  - tasks/gem.rake
49
+ - tasks/rdoc.rake
47
50
  - tasks/test.rake
48
51
  - test
49
52
  - test/functional
50
53
  - test/functional/grb_test.rb
51
54
  - test/helpers
52
55
  - test/helpers/array_extensions.rb
53
- - test/helpers/dir_stack.rb
56
+ - test/helpers/constants.rb
54
57
  - test/helpers/extractable.rb
55
58
  - test/helpers/git_helper.rb
59
+ - test/helpers/in_dir.rb
56
60
  - test/helpers/more_assertions.rb
57
61
  - test/helpers/shoulda_functional_helpers.rb
58
62
  - test/helpers/shoulda_unit_helpers.rb
@@ -62,14 +66,17 @@ files:
62
66
  - test/unit/git_helper_test.rb
63
67
  - test/unit/git_remote_branch_test.rb
64
68
  - test/unit/param_reader_test.rb
65
- - TODO
69
+ - test/unit/state_test.rb
66
70
  - vendor
67
71
  - vendor/capture_fu.rb
68
- has_rdoc: false
72
+ has_rdoc: true
69
73
  homepage: http://github.com/webmat/git_remote_branch
70
74
  post_install_message:
71
- rdoc_options: []
72
-
75
+ rdoc_options:
76
+ - --main
77
+ - README.rdoc
78
+ - --exclude
79
+ - lib
73
80
  require_paths:
74
81
  - lib
75
82
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -96,9 +103,10 @@ test_files:
96
103
  - test/functional/grb_test.rb
97
104
  - test/helpers
98
105
  - test/helpers/array_extensions.rb
99
- - test/helpers/dir_stack.rb
106
+ - test/helpers/constants.rb
100
107
  - test/helpers/extractable.rb
101
108
  - test/helpers/git_helper.rb
109
+ - test/helpers/in_dir.rb
102
110
  - test/helpers/more_assertions.rb
103
111
  - test/helpers/shoulda_functional_helpers.rb
104
112
  - test/helpers/shoulda_unit_helpers.rb
@@ -108,3 +116,4 @@ test_files:
108
116
  - test/unit/git_helper_test.rb
109
117
  - test/unit/git_remote_branch_test.rb
110
118
  - test/unit/param_reader_test.rb
119
+ - test/unit/state_test.rb
data/README DELETED
@@ -1,140 +0,0 @@
1
- ==== Why git_remote_branch? ====
2
-
3
- The basic idea for git_remote_branch is to trivialize the interaction with
4
- remote branches in simple situations.
5
-
6
- For now git_remote_branch assumes that the local and remote branches have the
7
- same name. Multiple origins are supported.
8
-
9
- Another goal of git_remote_branch is to help teach the real underlying git
10
- commands. Each operation done on your behalf is displayed at the console.
11
-
12
-
13
-
14
- ==== Installation ====
15
-
16
- sudo gem install grb
17
-
18
-
19
- Or if you want the bleeding edge from GitHub
20
- You may try
21
- sudo gem install webmat-git_remote_branch --source=http://gems.github.com
22
-
23
- But you're probably better off with
24
- git clone git://github.com/webmat/git_remote_branch.git
25
- rake install
26
-
27
-
28
-
29
- ==== Usage ====
30
-
31
- Notes:
32
- - parts between brackets are optional
33
- - When 'origin_server' is not specified, the name 'origin' is assumed.
34
-
35
- Available commands (with aliases):
36
-
37
-
38
- == Help ==
39
-
40
- $ grb [-h|help] #=> Displays help
41
-
42
- == create (alias: new) ==
43
- Create a new local branch as well as a corresponding remote branch from the
44
- branch you are currently on.
45
- Automatically track the new remote branch (useful for pulling and merging).
46
- Switch to the new branch.
47
-
48
- $ grb create branch_name [origin_server]
49
-
50
-
51
- == publish (aliases: remotize) ==
52
- Publish an existing local branch to the remote server.
53
- Set up the local branch to track the new remote branch.
54
- Switch to the new branch.
55
-
56
- $ grb publish branch_name [origin_server]
57
-
58
-
59
- == delete (aliases: destroy, kill, remove) ==
60
- Delete the remote branch then delete the local branch.
61
- The local branch is not deleted if there are pending changes.
62
-
63
- $ grb delete branch_name [origin_server]
64
-
65
-
66
- == track (aliases: follow grab fetch) ==
67
- Track an existing remote branch locally.
68
-
69
- $ grb track branch_name [origin_server]
70
-
71
-
72
- == rename (aliases: rn, mv, move) ==
73
- To rename the branch you're currently on.
74
- Rename the remote branch by copying then deleting the old name.
75
- Checkout a new local tracking branch with the new name and delete the local
76
- branch with the old name.
77
-
78
- $ grb rename branch_name [origin_server]
79
-
80
-
81
- == explain ==
82
-
83
- All commands can be prepended by the word 'explain'. Instead of executing the
84
- command, git_remote_branch will simply output the list of commands you need to
85
- run to accomplish that goal.
86
- Examples:
87
-
88
- $ grb explain create
89
- git_remote_branch version 0.2.6
90
-
91
- List of operations to do to create a new remote branch and track it locally:
92
-
93
- git push origin master:refs/heads/branch_to_create
94
- git fetch origin
95
- git branch --track branch_to_create origin/branch_to_create
96
- git checkout branch_to_create
97
-
98
-
99
- $ grb explain create my_branch github
100
- git_remote_branch version 0.2.6
101
-
102
- List of operations to do to create a new remote branch and track it locally:
103
-
104
- git push github master:refs/heads/my_branch
105
- git fetch github
106
- git branch --track my_branch github/my_branch
107
- git checkout my_branch
108
-
109
-
110
-
111
- ==== More on git_remote_branch ====
112
-
113
- Site: http://github.com/webmat/git_remote_branch
114
- Mailing list: http://groups.google.com/group/git_remote_branch
115
-
116
-
117
-
118
- ==== History ====
119
-
120
- This script was originally created by Carl Mercier and made public on his blog
121
- here:
122
-
123
- No nonsense GIT, part 1: git-remote-branch
124
- http://blog.carlmercier.com/2008/01/25/no-nonsense-git-part-1-git-remote-branch/
125
-
126
-
127
- I'm using it as a starting point to make it even easier to interact with remote
128
- repositories.
129
-
130
-
131
- == Contributors ==
132
-
133
- - Mathieu Martin webmat@gmail.com
134
- - Carl Mercier (Carl: want your email here?)
135
- - Caio Chassot dev@caiochassot.com
136
-
137
-
138
- == Legalese ==
139
-
140
- git_remote_branch is licensed under the MIT License. See the file COPYING for details.
data/TODO DELETED
@@ -1,16 +0,0 @@
1
- - tests :-)
2
- - offer help when branch -d fails
3
- - connect (new remote repo)
4
- - Make remotize work when not specifying the local branch (and use this one by default)
5
- - avoid deleting local branches when tracking with the help of git-config ?
6
-
7
- - drop assumption that master can be treated differently than other branches (e.g. considered as a safe checkout)
8
- - reliance on current_branch
9
- - is it even necessary to be on a branch per se? I think not...
10
- - survive checkouts with wrong case
11
- e.g.: branch "Bob" checked out branch 'bob'. git branch -l won't correctly flag branch Bob as current.
12
-
13
- - better exit status behavior
14
- - Add verification if remote delete didn't work
15
- - add support for different remote name (--remote-name)
16
-
@@ -1,25 +0,0 @@
1
- class DirStack
2
- attr_reader :dir_stack
3
-
4
- def current_dir
5
- dir_stack.size == 0 ? Dir.pwd : dir_stack.last
6
- end
7
-
8
- def pushd(dirname)
9
- dir_stack.push(File.expand_path(dirname))
10
- end
11
-
12
- def popd
13
- return [] if dir_stack.size==0
14
- dir_stack.pop
15
- dir_stack
16
- end
17
-
18
- def to_s
19
- dir_stack.inspect
20
- end
21
-
22
- def initialize
23
- @dir_stack = []
24
- end
25
- end