git-it 0.0.7 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -18,9 +18,17 @@ Might not need sudo depending on your setup. To install as /usr/bin/git-it thoug
18
18
 
19
19
  == Use
20
20
 
21
- Open current branch in the web. Use it as an easy way to issue pull request in github.
21
+ Open branch
22
22
 
23
- git it opened_in_the_web #=> open https://github.com/more-ron/git-it/tree/master
23
+ git it opened #=> https://github.com/more-ron/git-it/tree/gh-pages
24
+
25
+ Compare branches
26
+
27
+ git it compared #=> https://github.com/more-ron/git-it/compare/master...gh-pages
28
+
29
+ Issue a pull request
30
+
31
+ git it pulled #=> https://github.com/more-ron/git-it/pull/new/more-ron:master...gh-pages
24
32
 
25
33
 
26
34
 
@@ -40,9 +48,18 @@ You will need to know where git-it got installed. To do that execute the followi
40
48
 
41
49
  [Parameters]
42
50
 
43
- get it opened in the web:
51
+ get it opened:
52
+ --path=$REPO --sha=$SHA opened
53
+
54
+ get it compared:
55
+ --path=$REPO --sha=$SHA compared
56
+ get it compared to release:
57
+ --path=$REPO --sha=$SHA compared --to=release
44
58
 
45
- --path=$REPO --sha=$SHA opened_in_the_web
59
+ get it pulled:
60
+ --path=$REPO --sha=$SHA pulled
61
+ get it pulled to release:
62
+ --path=$REPO --sha=$SHA pulled --to=release
46
63
 
47
64
 
48
65
 
data/bin/git-it CHANGED
@@ -34,20 +34,35 @@ default_value false
34
34
  # = Commands =
35
35
  # ============
36
36
 
37
- desc 'Opens current branch in web browser.'
37
+ desc 'Opens current branch.'
38
+ command :opened do |c|
39
+ c.action do |global_options, options, args|
40
+ GitIt::Commander.new( global_options ).open( args, options )
41
+ end
42
+ end
38
43
 
39
- command :opened_in_the_web do |c|
44
+ desc 'Compares current branch to...'
45
+ command :compared do |c|
40
46
 
41
- c.desc 'Site: auto | github'
42
- c.default_value 'auto'
43
- c.flag :site
47
+ c.desc 'Name of the branch to compare to'
48
+ c.default_value 'master'
49
+ c.flag :to
44
50
 
45
- c.action do |global_options,options,args|
46
- GitIt::Commander.new(global_options).open_in_the_web(args, options)
51
+ c.action do |global_options, options, args|
52
+ GitIt::Commander.new( global_options ).compare( args, options )
47
53
  end
48
54
  end
49
55
 
50
- class Object # :nodoc:
56
+ desc 'Issue pull request for current branch to...'
57
+ command :pulled do |c|
58
+
59
+ c.desc 'Name of the branch to be pulled into'
60
+ c.default_value 'master'
61
+ c.flag :to
62
+
63
+ c.action do |global_options, options, args|
64
+ GitIt::Commander.new( global_options ).pull( args, options )
65
+ end
51
66
  end
52
67
 
53
68
  # ====================
@@ -75,4 +90,7 @@ on_error do |exception|
75
90
  true
76
91
  end
77
92
 
93
+ class Object # :nodoc:
94
+ end
95
+
78
96
  exit run(ARGV)
@@ -1,149 +1,207 @@
1
- # Grand central station for git it commands
2
- class GitIt::Commander
3
-
4
- # current git repository
5
- attr_reader :repository
6
-
7
- # current git object
8
- attr_reader :git_object
9
-
10
- # [global options]
11
- # --help:: Show this message
12
- # -p, --path=path:: repository path (default: {{present_working_directory}})
13
- # -s, --sha=sha:: SHA1 (default: {{current_head}})
14
- # --version:: Show gem's version
15
- def initialize(options)
16
- @global_options = options
17
- @repository = Rugged::Repository.new( get_path(options[:path]) )
18
- @git_object = get_object( options[:sha] )
19
- @test_mode = options[:test]
20
- end
1
+ module GitIt
2
+ # Grand central station for git it commands
3
+ class Commander
4
+
5
+ # current git repository
6
+ attr_reader :repository
7
+
8
+ # current git object
9
+ attr_reader :git_object
10
+
11
+ # [global options]
12
+ #
13
+ # --help:: Show this message
14
+ # -p, --path=path:: repository path (default: {{present_working_directory}})
15
+ # -s, --sha=sha:: SHA1 (default: {{current_head}})
16
+ #
17
+ # [sample usage]
18
+ #
19
+ # Open present working directory's repository branch:
20
+ # git it opened
21
+ #
22
+ # Open specified repository in the path:
23
+ # git it --path=the/path/to/the/repo opened
24
+ #
25
+ # Open specified sha1:
26
+ # git it --sha=50m35ha1 opened
27
+ #
28
+ # Open specified repository in the path and sha1:
29
+ # git it --path=the/path/to/the/repo --sha=50m35ha1 opened
30
+ #
31
+ def initialize(options)
32
+ @global_options = options
33
+ @repository = Rugged::Repository.new( get_path(options[:path]) )
34
+ @git_object = get_object( options[:sha] )
35
+ @test_mode = options[:test]
36
+
37
+ @link_generator = LinkGenerator.new( @repository.config["remote.origin.url"] )
38
+ end
21
39
 
22
40
 
23
41
 
24
- # ===========
25
- # = Actions =
26
- # ===========
27
-
28
- # [get it opened in the web]
29
- #
30
- # Opens closest branch in the web.
31
- #
32
- # [commands]
33
- #
34
- # Open present working directory's repository and head in the web:
35
- # git it opened_in_the_web
36
- #
37
- # Open specified repository in the path:
38
- # git it --path=the/path/to/the/repo opened_in_the_web
39
- #
40
- # Open specified sha1:
41
- # git it --sha=50m35ha1 opened_in_the_web
42
- #
43
- # Open specified repository in the path and sha1:
44
- # git it --path=the/path/to/the/repo --sha=50m35ha1 opened_in_the_web
45
- #
46
- # [notes]
47
- #
48
- # * Currently only supports GitHub.com
49
- #
50
- def open_in_the_web(args, options)
51
- closest_branch = closest_remote_branch || closest_local_branch
52
-
53
- if closest_branch
54
- remote_origin_url = repository.config["remote.origin.url"]
55
- #=> git@github.com:more-ron/git-it.git
56
-
57
- github_link = remote_origin_url.gsub("git@github.com:", "https://github.com/")
58
- #=> https://github.com/more-ron/git-it.git
59
-
60
- branch_name = closest_branch.name.gsub("origin/", "")
61
- #=> origin/gh-pages => gh-pages
42
+ # ===========
43
+ # = Actions =
44
+ # ===========
62
45
 
63
- branch_name = closest_remote_branch.target.gsub("refs/remotes/origin/", "") if branch_name == "HEAD"
64
- #=> refs/remotes/origin/master => master
46
+ # [get it opened]
47
+ #
48
+ # Opens the current branch
49
+ #
50
+ # [sample usage]
51
+ #
52
+ # Open the current branch:
53
+ # git it opened
54
+ #
55
+ def open(args, options)
56
+ _closest_branch = closest_branch
65
57
 
66
- github_link = github_link.gsub(".git", "/tree/#{ branch_name }")
67
- #=> https://github.com/more-ron/git-it/tree/master
58
+ if _closest_branch
59
+ branch_name = clean_branch_name_for( _closest_branch )
60
+ link = @link_generator.branch_link( branch_name )
68
61
 
69
- launch github_link
70
- else
71
- fail "Could not find closest remote branch for sha: #{@git_object.oid.inspect}"
62
+ launch link
63
+ else
64
+ fail "Could not find closest remote branch for sha: #{@git_object.oid.inspect}"
65
+ end
72
66
  end
73
- end
74
67
 
68
+ # [get it compared]
69
+ #
70
+ # Compares the current branch to another branch (default: master)
71
+ #
72
+ # [sample usage]
73
+ #
74
+ # Compare the current branch to master branch
75
+ # git it compared
76
+ #
77
+ # Compare the current branch to release branch
78
+ # git it compared --to=release
79
+ #
80
+ def compare(args, options)
81
+ _closest_branch = closest_branch
82
+
83
+ if _closest_branch
84
+ branch_name = clean_branch_name_for( _closest_branch )
85
+ link = @link_generator.compare_branches_link( branch_name, options[:to] || "master" )
86
+
87
+ launch link
88
+ else
89
+ fail "Could not find closest remote branch for sha: #{@git_object.oid.inspect}"
90
+ end
91
+ end
92
+
93
+ # [get it pulled]
94
+ #
95
+ # Issues a pull request of the current branch into another branch (default: master)
96
+ #
97
+ # [sample usage]
98
+ #
99
+ # Issue a pull request of the current branch into master branch
100
+ # git it pulled
101
+ #
102
+ # Issue a pull request of the current branch into release branch
103
+ # git it pulled --to=release
104
+ #
105
+ def pull(args, options)
106
+ _closest_branch = closest_branch
107
+
108
+ if _closest_branch
109
+ branch_name = clean_branch_name_for( _closest_branch )
110
+ link = @link_generator.pull_request_link( branch_name, options[:to] || "master" )
111
+
112
+ launch link
113
+ else
114
+ fail "Could not find closest remote branch for sha: #{@git_object.oid.inspect}"
115
+ end
116
+ end
75
117
 
76
118
 
77
- # ============
78
- # = Privates =
79
- # ============
80
119
 
81
- private
120
+ # ============
121
+ # = Privates =
122
+ # ============
82
123
 
83
- def get_path(path)
84
- path == "{{present_working_directory}}" ? Dir.pwd : path
85
- end
124
+ private
86
125
 
87
- def get_object(sha)
88
- if sha == "{{current_head}}"
89
- repository.lookup( repository.head.target )
90
- else
91
- repository.lookup( sha )
126
+ def get_path(path)
127
+ path == "{{present_working_directory}}" ? Dir.pwd : path
92
128
  end
93
- end
94
129
 
95
- def discover_repository(path)
96
- Rugged::Repository.discover( path )
97
- end
130
+ def get_object(sha)
131
+ if sha == "{{current_head}}"
132
+ repository.lookup( repository.head.target )
133
+ else
134
+ repository.lookup( sha )
135
+ end
136
+ end
98
137
 
99
- def remote_branches
100
- @remote_branches ||= Rugged::Branch.each_name(repository, :remote).sort.collect do |branch_name|
101
- Rugged::Branch.lookup(@repository, branch_name, :remote)
138
+ def discover_repository(path)
139
+ Rugged::Repository.discover( path )
102
140
  end
103
- end
104
141
 
105
- def local_branches
106
- @local_branches ||= Rugged::Branch.each_name(repository, :local).sort.collect do |branch_name|
107
- Rugged::Branch.lookup(@repository, branch_name)
142
+ def remote_branches
143
+ @remote_branches ||= Rugged::Branch.each_name(repository, :remote).sort.collect do |branch_name|
144
+ Rugged::Branch.lookup(@repository, branch_name, :remote)
145
+ end
108
146
  end
109
- end
110
147
 
111
- def closest_remote_branch
112
- remote_branches.min_by do |branch|
113
- distance_in_objects(:from => branch.tip.oid, :to => @git_object.oid)
148
+ def local_branches
149
+ @local_branches ||= Rugged::Branch.each_name(repository, :local).sort.collect do |branch_name|
150
+ Rugged::Branch.lookup(@repository, branch_name)
151
+ end
114
152
  end
115
- end
116
153
 
117
- def closest_local_branch
118
- local_branches.min_by do |branch|
119
- distance_in_objects(:from => branch.tip.oid, :to => @git_object.oid)
154
+ def closest_remote_branch
155
+ remote_branches.min_by do |branch|
156
+ distance_in_objects(:from => branch.tip.oid, :to => @git_object.oid)
157
+ end
158
+ end
159
+
160
+ def closest_local_branch
161
+ local_branches.min_by do |branch|
162
+ distance_in_objects(:from => branch.tip.oid, :to => @git_object.oid)
163
+ end
120
164
  end
121
- end
122
165
 
123
- def distance_in_objects(options = {})
124
- normal_direction_value = _distance_in_objects(options)
125
- opposite_direction_value = _distance_in_objects(:from => options[:to], :to => options[:from])
166
+ def closest_branch
167
+ closest_remote_branch || closest_local_branch
168
+ end
126
169
 
127
- [normal_direction_value, opposite_direction_value].max
128
- end
170
+ def clean_branch_name_for( branch )
171
+ branch_name = branch.name.gsub("origin/", "")
172
+ #=> origin/gh-pages => gh-pages
129
173
 
130
- def _distance_in_objects(options = {})
131
- walker = Rugged::Walker.new(repository)
132
- walker.push(options[:to])
133
- walker.hide(options[:from])
134
- walker.count
135
- end
174
+ branch_name = branch.target.gsub("refs/remotes/origin/", "") if branch_name == "HEAD"
175
+ #=> refs/remotes/origin/master => master
136
176
 
137
- def test_mode?
138
- @test_mode
139
- end
177
+ branch_name
178
+ end
179
+
180
+ def distance_in_objects(options = {})
181
+ normal_direction_value = _distance_in_objects(options)
182
+ opposite_direction_value = _distance_in_objects(:from => options[:to], :to => options[:from])
140
183
 
141
- def launch(what)
142
- if test_mode?
143
- puts "Launchy.open( #{what.inspect} )"
144
- else
145
- Launchy.open( what )
184
+ [normal_direction_value, opposite_direction_value].max
185
+ end
186
+
187
+ def _distance_in_objects(options = {})
188
+ walker = Rugged::Walker.new(repository)
189
+ walker.push(options[:to])
190
+ walker.hide(options[:from])
191
+ walker.count
192
+ end
193
+
194
+ def test_mode?
195
+ @test_mode
196
+ end
197
+
198
+ def launch(what)
199
+ if test_mode?
200
+ puts "Launchy.open( #{what.inspect} )"
201
+ else
202
+ Launchy.open( what )
203
+ end
146
204
  end
147
- end
148
205
 
206
+ end
149
207
  end
@@ -0,0 +1,35 @@
1
+ module GitIt
2
+ # Link generator compatible with GitHub like site UI
3
+ class LinkGenerator
4
+
5
+ # git@github.com:more-ron/git-it.git
6
+ attr_reader :repository_url
7
+
8
+ # all you need is the repository url
9
+ def initialize(repository_url)
10
+ @repository_url = repository_url
11
+
12
+ @repo = /^git@(?<site>.*):(?<user>.*)\/(?<proj>.*).git$/.match(@repository_url)
13
+
14
+ @site = @repo[:site]
15
+ @user = @repo[:user]
16
+ @proj = @repo[:proj]
17
+ end
18
+
19
+ # https://github.com/more-ron/git-it/tree/gh-pages
20
+ def branch_link(branch_name)
21
+ "https://#{@site}/#{@user}/#{@proj}/tree/#{branch_name}"
22
+ end
23
+
24
+ # https://github.com/more-ron/git-it/compare/master...gh-pages
25
+ def compare_branches_link(to, from = "master")
26
+ "https://#{@site}/#{@user}/#{@proj}/compare/#{from}...#{to}"
27
+ end
28
+
29
+ # https://github.com/more-ron/git-it/pull/new/more-ron:master...gh-pages
30
+ def pull_request_link(source, destination = "master")
31
+ "https://#{@site}/#{@user}/#{@proj}/pull/new/#{@user}:#{destination}...#{source}"
32
+ end
33
+
34
+ end
35
+ end
@@ -2,5 +2,5 @@
2
2
  module GitIt
3
3
 
4
4
  # Current git-it version
5
- VERSION = '0.0.7'
5
+ VERSION = '0.0.8'
6
6
  end
data/lib/git-it.rb CHANGED
@@ -1,6 +1,7 @@
1
- require 'git-it/version.rb'
2
- require 'git-it/global_helper.rb'
3
- require 'git-it/commander.rb'
1
+ require 'git-it/version'
2
+ require 'git-it/global_helper'
3
+ require 'git-it/commander'
4
+ require 'git-it/link_generator'
4
5
 
5
6
  # Add requires for other files you add to your project here, so
6
7
  # you just need to require this one file in your bin file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-it
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -116,11 +116,12 @@ extra_rdoc_files:
116
116
  - README.rdoc
117
117
  - git-it.rdoc
118
118
  files:
119
- - bin/git-it
120
119
  - lib/git-it/commander.rb
121
120
  - lib/git-it/global_helper.rb
121
+ - lib/git-it/link_generator.rb
122
122
  - lib/git-it/version.rb
123
123
  - lib/git-it.rb
124
+ - bin/git-it
124
125
  - README.rdoc
125
126
  - git-it.rdoc
126
127
  homepage: http://more-ron.github.com/git-it/