git_er_done 0.1.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -2,3 +2,5 @@
2
2
  .bundle
3
3
  Gemfile.lock
4
4
  pkg/*
5
+ .idea/*
6
+ tmp/*
data/.rvmrc CHANGED
@@ -1 +1 @@
1
- rvm use 1.9.2
1
+ rvm use 1.9.2@rails3.0
data/Gemfile CHANGED
@@ -2,3 +2,11 @@ source "http://rubygems.org"
2
2
 
3
3
  # Specify your gem's dependencies in git_er_done.gemspec
4
4
  gemspec
5
+
6
+ group :development do
7
+ gem 'rake'
8
+ end
9
+ group :test do
10
+ gem 'cucumber'
11
+ gem 'aruba'
12
+ end
data/README.md CHANGED
@@ -9,6 +9,14 @@ This project exists for a few reasons:
9
9
  3. Gives an interesting test case for my Thor talk at DCRUG and Arlington RUG.
10
10
  4. Make doing the 'right' thing easy (i.e. feature branches should be simple. Smaller projects)
11
11
 
12
+ ## Installation
13
+
14
+ ```
15
+ gem install git_er_done
16
+ ```
17
+
18
+ This makes the `gd` command available on your system.
19
+
12
20
  ## Syntax
13
21
 
14
22
  Things you can do:
data/Rakefile CHANGED
@@ -1 +1,9 @@
1
1
  require 'bundler/gem_tasks'
2
+
3
+ require 'cucumber/rake/task'
4
+ Cucumber::Rake::Task.new
5
+
6
+ desc 'Run all tests'
7
+ task :test => :cucumber
8
+
9
+ task :default => :test
@@ -0,0 +1,30 @@
1
+ Feature: CLI
2
+
3
+ In order to make doing the right thing easier in Git
4
+ As a programmer with a bad memory
5
+ I should be able to use a commandline tool to simplify my interface.
6
+
7
+ Scenario: Show the Version of the Gem
8
+ When I run `gd version`
9
+ Then the output should contain "Git-Er-Done"
10
+ And should display the current version
11
+
12
+ Scenario: Show version using -v
13
+ When I run `gd -v`
14
+ Then the output should contain "Git-Er-Done"
15
+ And should display the current version
16
+
17
+ Scenario: Start a New Feature
18
+ Given I am working on a git project
19
+ When I run `gd feature new_widget`
20
+ Then the output should contain "Switched to a new branch 'features/new_widget'"
21
+
22
+ Scenario: Sync a Branch
23
+ Given I am working on a git project
24
+ And I am working on the "features/new_widget" branch
25
+ When I run `gd sync`
26
+ Then the output should contain "Switched to branch 'master'"
27
+ And the output should contain "Switched to branch 'features/new_widget"
28
+ And the output should contain "Current branch features/new_widget is up to date"
29
+
30
+
@@ -0,0 +1,15 @@
1
+ Given /^I am working on a git project$/ do
2
+ steps %Q{
3
+ Given I run `git init .`
4
+ And an empty file named "README"
5
+ And I run `git add README`
6
+ And I run `git commit -m 'First commit'`
7
+ }
8
+ end
9
+
10
+ Given /^I am working on the "(.*)" branch$/ do |branch|
11
+ steps "Given I run `git checkout -b #{branch}`"
12
+ end
13
+ When /^should display the current version$/ do
14
+ assert_partial_output(Git::Er::Done::VERSION, all_output)
15
+ end
@@ -0,0 +1,5 @@
1
+ require 'aruba/cucumber'
2
+
3
+ # For loading the library in tests.
4
+ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__) + '/../../lib'))
5
+ require 'git_er_done'
data/git_er_done.gemspec CHANGED
@@ -18,7 +18,7 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
- [['thor', '~> 0.14.6'], ['rails', '~> 3.0.9'], ['grit', '~>2.4']].each do |gem, version|
21
+ [['thor', '~> 0.14.6'], ['grit', '~>2.4']].each do |gem, version|
22
22
  s.add_dependency(gem, version)
23
23
  end
24
24
  end
@@ -0,0 +1,21 @@
1
+ module Git
2
+ module Er
3
+ module Done
4
+ module Actions
5
+
6
+ # Run a git command.
7
+ # This is basically a straight copy/paste from http://api.rubyonrails.org/classes/Rails/Generators/Actions.html#method-i-git
8
+ # Avoids dragging in the entire rails stack for this one command.
9
+ def git(command={})
10
+ if command.is_a?(Symbol)
11
+ run "git #{command}"
12
+ else
13
+ command.each do |cmd, options|
14
+ run "git #{cmd} #{options}"
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -1,6 +1,6 @@
1
1
  require 'thor'
2
- require 'rails/generators/actions'
3
2
  require 'grit'
3
+ require 'git_er_done/actions'
4
4
 
5
5
  module Git
6
6
  module Er
@@ -8,7 +8,7 @@ module Git
8
8
  class App < Thor
9
9
 
10
10
  include Thor::Actions
11
- include Rails::Generators::Actions
11
+ include Git::Er::Done::Actions
12
12
 
13
13
  FEATURES_PATH = "features/"
14
14
 
@@ -36,25 +36,46 @@ module Git
36
36
 
37
37
  desc 'squash', 'Squash all commits from the current branch into a single commit.'
38
38
  def squash
39
+ new_commits = commits_in_feature_branch.size
40
+ if new_commits < 2
41
+ puts "Only '#{new_commits}' new commits in this branch, so no squashing necessary."
42
+ return
43
+ end
39
44
  # Squash all changes since we branched away from master
40
45
  git :rebase => "-i master"
41
46
  end
42
47
 
48
+ desc 'info', "Report information about the current feature branch you are in."
49
+ def info
50
+ commits = commits_in_feature_branch
51
+ puts "There are #{commits.size} new commits for #{current_branch_name}"
52
+ end
53
+
43
54
  desc 'sync', 'Update your branch with the latest from master.'
44
55
  def sync
45
- return_to_branch = current_branch
56
+ return_to_branch = current_branch_name
46
57
  git :checkout => :master
47
58
  git :pull
48
59
  git :checkout => return_to_branch
49
60
  git :rebase => :master
50
61
  end
51
-
62
+
63
+ desc 'version', 'Show the Git-Er-Done version and quit. (gd -v works too)'
64
+ map "-v" => :version
65
+ def version
66
+ puts "Git-Er-Done #{Git::Er::Done::VERSION}"
67
+ end
52
68
  private
53
69
 
70
+ # Returns a list of all commits for the current branch since it was forked from master.
71
+ def commits_in_feature_branch
72
+ repo.commits_between(master_branch.name, current_branch.name)
73
+ end
74
+
54
75
  # Returns the name of the feature for the current branch
55
76
  # @return [String] Name of feature (not include features/)
56
77
  def current_feature
57
- b = current_branch
78
+ b = current_branch_name
58
79
  if b.start_with?(FEATURES_PATH)
59
80
  return b[FEATURES_PATH.length, b.length]
60
81
  end
@@ -62,13 +83,24 @@ module Git
62
83
  end
63
84
 
64
85
  def current_branch
65
- repo.head.name
86
+ repo.head
87
+ end
88
+
89
+ def current_branch_name
90
+ current_branch.name
66
91
  end
67
92
 
68
93
  def repo
69
94
  repo ||= Grit::Repo.new('.')
70
95
  end
71
96
 
97
+ def master_branch
98
+ repo.heads.each do |head|
99
+ return head if head.name == "master"
100
+ end
101
+ raise "No branch named 'master' found."
102
+ end
103
+
72
104
  def feature_branch(name)
73
105
  "#{FEATURES_PATH}#{name}"
74
106
  end
@@ -1,7 +1,7 @@
1
1
  module Git
2
2
  module Er
3
3
  module Done
4
- VERSION = "0.1.0"
4
+ VERSION = "0.3.0"
5
5
  end
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git_er_done
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-07-28 00:00:00.000000000Z
12
+ date: 2012-01-13 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
16
- requirement: &2153491080 !ruby/object:Gem::Requirement
16
+ requirement: &70179246615980 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,21 +21,10 @@ dependencies:
21
21
  version: 0.14.6
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2153491080
25
- - !ruby/object:Gem::Dependency
26
- name: rails
27
- requirement: &2153490500 !ruby/object:Gem::Requirement
28
- none: false
29
- requirements:
30
- - - ~>
31
- - !ruby/object:Gem::Version
32
- version: 3.0.9
33
- type: :runtime
34
- prerelease: false
35
- version_requirements: *2153490500
24
+ version_requirements: *70179246615980
36
25
  - !ruby/object:Gem::Dependency
37
26
  name: grit
38
- requirement: &2153490080 !ruby/object:Gem::Requirement
27
+ requirement: &70179246615400 !ruby/object:Gem::Requirement
39
28
  none: false
40
29
  requirements:
41
30
  - - ~>
@@ -43,7 +32,7 @@ dependencies:
43
32
  version: '2.4'
44
33
  type: :runtime
45
34
  prerelease: false
46
- version_requirements: *2153490080
35
+ version_requirements: *70179246615400
47
36
  description: A gem to assist with git workflow, similar to git-flow.
48
37
  email:
49
38
  - peakpg@gmail.com
@@ -58,8 +47,12 @@ files:
58
47
  - README.md
59
48
  - Rakefile
60
49
  - bin/gd
50
+ - features/cli.feature
51
+ - features/step_definitions/cli_steps.rb
52
+ - features/support.rb/env.rb
61
53
  - git_er_done.gemspec
62
54
  - lib/git_er_done.rb
55
+ - lib/git_er_done/actions.rb
63
56
  - lib/git_er_done/app.rb
64
57
  - lib/git_er_done/version.rb
65
58
  homepage: ''
@@ -82,8 +75,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
82
75
  version: '0'
83
76
  requirements: []
84
77
  rubyforge_project: git_er_done
85
- rubygems_version: 1.8.5
78
+ rubygems_version: 1.8.10
86
79
  signing_key:
87
80
  specification_version: 3
88
81
  summary: A gem to assist with git workflow.
89
- test_files: []
82
+ test_files:
83
+ - features/cli.feature
84
+ - features/step_definitions/cli_steps.rb
85
+ - features/support.rb/env.rb