git-switcher 0.0.2 → 1.0.0

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.
metadata CHANGED
@@ -1,322 +1,100 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: git-switcher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
5
- prerelease:
4
+ version: 1.0.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Peter Vandenberk
9
8
  autorequire:
10
- bindir: bin
9
+ bindir: exe
11
10
  cert_chain: []
12
- date: 2013-01-05 00:00:00.000000000 Z
11
+ date: 2019-02-24 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
- name: methadone
14
+ name: rainbow
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
- version: '0'
19
+ version: '3.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
- version: '0'
26
+ version: '3.0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rugged
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
- version: '0'
33
+ version: '0.27'
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
- version: '0'
40
+ version: '0.27'
46
41
  - !ruby/object:Gem::Dependency
47
- name: trollop
42
+ name: bundler
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
- requirements:
51
- - - ! '>='
52
- - !ruby/object:Gem::Version
53
- version: '0'
54
- type: :runtime
55
- prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
44
  requirements:
59
- - - ! '>='
60
- - !ruby/object:Gem::Version
61
- version: '0'
62
- - !ruby/object:Gem::Dependency
63
- name: rdoc
64
- requirement: !ruby/object:Gem::Requirement
65
- none: false
66
- requirements:
67
- - - ! '>='
45
+ - - ">="
68
46
  - !ruby/object:Gem::Version
69
47
  version: '0'
70
48
  type: :development
71
49
  prerelease: false
72
50
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
51
  requirements:
75
- - - ! '>='
76
- - !ruby/object:Gem::Version
77
- version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: awesome_print
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :development
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
52
+ - - ">="
92
53
  - !ruby/object:Gem::Version
93
54
  version: '0'
94
55
  - !ruby/object:Gem::Dependency
95
56
  name: pry
96
57
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
- requirements:
99
- - - ! '>='
100
- - !ruby/object:Gem::Version
101
- version: '0'
102
- type: :development
103
- prerelease: false
104
- version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
- requirements:
107
- - - ! '>='
108
- - !ruby/object:Gem::Version
109
- version: '0'
110
- - !ruby/object:Gem::Dependency
111
- name: pry-debugger
112
- requirement: !ruby/object:Gem::Requirement
113
- none: false
114
- requirements:
115
- - - ! '>='
116
- - !ruby/object:Gem::Version
117
- version: '0'
118
- type: :development
119
- prerelease: false
120
- version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
- requirements:
123
- - - ! '>='
124
- - !ruby/object:Gem::Version
125
- version: '0'
126
- - !ruby/object:Gem::Dependency
127
- name: pry-stack_explorer
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
134
- type: :development
135
- prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- - !ruby/object:Gem::Dependency
143
- name: rspec
144
- requirement: !ruby/object:Gem::Requirement
145
- none: false
146
- requirements:
147
- - - ! '>='
148
- - !ruby/object:Gem::Version
149
- version: '0'
150
- type: :development
151
- prerelease: false
152
- version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
- requirements:
155
- - - ! '>='
156
- - !ruby/object:Gem::Version
157
- version: '0'
158
- - !ruby/object:Gem::Dependency
159
- name: cucumber
160
- requirement: !ruby/object:Gem::Requirement
161
- none: false
162
- requirements:
163
- - - ! '>='
164
- - !ruby/object:Gem::Version
165
- version: '0'
166
- type: :development
167
- prerelease: false
168
- version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
- requirements:
171
- - - ! '>='
172
- - !ruby/object:Gem::Version
173
- version: '0'
174
- - !ruby/object:Gem::Dependency
175
- name: aruba
176
- requirement: !ruby/object:Gem::Requirement
177
- none: false
178
- requirements:
179
- - - ! '>='
180
- - !ruby/object:Gem::Version
181
- version: '0'
182
- type: :development
183
- prerelease: false
184
- version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
- requirements:
187
- - - ! '>='
188
- - !ruby/object:Gem::Version
189
- version: '0'
190
- - !ruby/object:Gem::Dependency
191
- name: guard
192
- requirement: !ruby/object:Gem::Requirement
193
- none: false
194
- requirements:
195
- - - ! '>='
196
- - !ruby/object:Gem::Version
197
- version: '0'
198
- type: :development
199
- prerelease: false
200
- version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
- requirements:
203
- - - ! '>='
204
- - !ruby/object:Gem::Version
205
- version: '0'
206
- - !ruby/object:Gem::Dependency
207
- name: growl
208
- requirement: !ruby/object:Gem::Requirement
209
- none: false
210
- requirements:
211
- - - ! '>='
212
- - !ruby/object:Gem::Version
213
- version: '0'
214
- type: :development
215
- prerelease: false
216
- version_requirements: !ruby/object:Gem::Requirement
217
- none: false
218
- requirements:
219
- - - ! '>='
220
- - !ruby/object:Gem::Version
221
- version: '0'
222
- - !ruby/object:Gem::Dependency
223
- name: rb-fsevent
224
- requirement: !ruby/object:Gem::Requirement
225
- none: false
226
- requirements:
227
- - - ! '>='
228
- - !ruby/object:Gem::Version
229
- version: '0'
230
- type: :development
231
- prerelease: false
232
- version_requirements: !ruby/object:Gem::Requirement
233
- none: false
234
- requirements:
235
- - - ! '>='
236
- - !ruby/object:Gem::Version
237
- version: '0'
238
- - !ruby/object:Gem::Dependency
239
- name: rb-readline
240
- requirement: !ruby/object:Gem::Requirement
241
- none: false
242
- requirements:
243
- - - ! '>='
244
- - !ruby/object:Gem::Version
245
- version: '0'
246
- type: :development
247
- prerelease: false
248
- version_requirements: !ruby/object:Gem::Requirement
249
- none: false
250
- requirements:
251
- - - ! '>='
252
- - !ruby/object:Gem::Version
253
- version: '0'
254
- - !ruby/object:Gem::Dependency
255
- name: guard-rspec
256
- requirement: !ruby/object:Gem::Requirement
257
- none: false
258
- requirements:
259
- - - ! '>='
260
- - !ruby/object:Gem::Version
261
- version: '0'
262
- type: :development
263
- prerelease: false
264
- version_requirements: !ruby/object:Gem::Requirement
265
- none: false
266
- requirements:
267
- - - ! '>='
268
- - !ruby/object:Gem::Version
269
- version: '0'
270
- - !ruby/object:Gem::Dependency
271
- name: guard-cucumber
272
- requirement: !ruby/object:Gem::Requirement
273
- none: false
274
58
  requirements:
275
- - - ! '>='
59
+ - - ">="
276
60
  - !ruby/object:Gem::Version
277
61
  version: '0'
278
62
  type: :development
279
63
  prerelease: false
280
64
  version_requirements: !ruby/object:Gem::Requirement
281
- none: false
282
65
  requirements:
283
- - - ! '>='
66
+ - - ">="
284
67
  - !ruby/object:Gem::Version
285
68
  version: '0'
286
69
  - !ruby/object:Gem::Dependency
287
- name: rspec-pride
70
+ name: rake
288
71
  requirement: !ruby/object:Gem::Requirement
289
- none: false
290
72
  requirements:
291
- - - ! '>='
73
+ - - ">="
292
74
  - !ruby/object:Gem::Version
293
75
  version: '0'
294
76
  type: :development
295
77
  prerelease: false
296
78
  version_requirements: !ruby/object:Gem::Requirement
297
- none: false
298
79
  requirements:
299
- - - ! '>='
80
+ - - ">="
300
81
  - !ruby/object:Gem::Version
301
82
  version: '0'
302
83
  - !ruby/object:Gem::Dependency
303
- name: cucumber-pride
84
+ name: rubocop
304
85
  requirement: !ruby/object:Gem::Requirement
305
- none: false
306
86
  requirements:
307
- - - ! '>='
87
+ - - ">="
308
88
  - !ruby/object:Gem::Version
309
89
  version: '0'
310
90
  type: :development
311
91
  prerelease: false
312
92
  version_requirements: !ruby/object:Gem::Requirement
313
- none: false
314
93
  requirements:
315
- - - ! '>='
94
+ - - ">="
316
95
  - !ruby/object:Gem::Version
317
96
  version: '0'
318
- description: Git command that implements a visual CLI and REPL for easily switching
319
- between git tags and branches
97
+ description: Easily switch between git tags and branches
320
98
  email:
321
99
  - pvandenberk@mac.com
322
100
  executables:
@@ -324,55 +102,47 @@ executables:
324
102
  extensions: []
325
103
  extra_rdoc_files: []
326
104
  files:
327
- - .gitignore
328
- - .travis.yml
105
+ - ".gitignore"
106
+ - ".pryrc"
107
+ - ".rubocop.yml"
108
+ - ".ruby-version"
109
+ - ".travis.yml"
110
+ - CODE_OF_CONDUCT.md
329
111
  - Gemfile
330
- - Guardfile
112
+ - Gemfile.lock
331
113
  - LICENSE.txt
332
114
  - README.md
333
115
  - Rakefile
334
- - bin/git-switcher
335
- - features/help_and_version.feature
336
- - features/step_definitions/git-switcher_steps.rb
337
- - features/support/env.rb
116
+ - bin/console
117
+ - bin/setup
118
+ - exe/git-switcher
338
119
  - git-switcher.gemspec
339
- - lib/git-switcher.rb
340
- - lib/git-switcher/banner.rb
341
- - lib/git-switcher/copyright.rb
342
- - lib/git-switcher/menu.rb
343
- - lib/git-switcher/repo.rb
344
- - lib/git-switcher/version.rb
345
- - spec/lib/git-switcher/repo_spec.rb
346
- - spec/lib/git-switcher_spec.rb
347
- - spec/spec_helper.rb
120
+ - lib/ext/rugged.rb
121
+ - lib/git/switcher.rb
122
+ - lib/git/switcher/menu.rb
123
+ - lib/git/switcher/version.rb
348
124
  homepage: https://github.com/pvdb/git-switcher
349
- licenses: []
125
+ licenses:
126
+ - MIT
127
+ metadata: {}
350
128
  post_install_message:
351
129
  rdoc_options: []
352
130
  require_paths:
353
131
  - lib
354
132
  required_ruby_version: !ruby/object:Gem::Requirement
355
- none: false
356
133
  requirements:
357
- - - ! '>='
134
+ - - ">="
358
135
  - !ruby/object:Gem::Version
359
136
  version: '0'
360
137
  required_rubygems_version: !ruby/object:Gem::Requirement
361
- none: false
362
138
  requirements:
363
- - - ! '>='
139
+ - - ">="
364
140
  - !ruby/object:Gem::Version
365
141
  version: '0'
366
142
  requirements: []
367
143
  rubyforge_project:
368
- rubygems_version: 1.8.24
144
+ rubygems_version: 2.5.2.3
369
145
  signing_key:
370
- specification_version: 3
371
- summary: Visual CLI and REPL for switching between git tags and branches
372
- test_files:
373
- - features/help_and_version.feature
374
- - features/step_definitions/git-switcher_steps.rb
375
- - features/support/env.rb
376
- - spec/lib/git-switcher/repo_spec.rb
377
- - spec/lib/git-switcher_spec.rb
378
- - spec/spec_helper.rb
146
+ specification_version: 4
147
+ summary: The ultimate CLI git branch and tag switcher
148
+ test_files: []
data/Guardfile DELETED
@@ -1,17 +0,0 @@
1
- # A sample Guardfile
2
- # More info at https://github.com/guard/guard#readme
3
-
4
- guard 'rspec', :cli => '--format RSpec::Pride --tty' do
5
- watch(%r{^spec/.+_spec\.rb$})
6
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
- watch('spec/spec_helper.rb') { "spec" }
8
- end
9
-
10
- guard 'cucumber', :cli => '--tags ~@wip --format Cucumber::Pride::Formatter' do
11
- watch(%r{^features/.+\.feature$})
12
- watch(%r{^(bin|lib)/.+$}) { 'features' }
13
- watch(%r{^features/support/.+$}) { 'features' }
14
- watch(%r{^features/step_definitions/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'features' }
15
- end
16
-
17
- # vim:syntax=ruby
data/bin/git-switcher DELETED
@@ -1,63 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', 'lib')
4
-
5
- begin
6
- require 'git-switcher'
7
- rescue LoadError
8
- require 'rubygems'
9
- require 'git-switcher'
10
- end
11
-
12
- options = Trollop::options do
13
-
14
- version Git::Switcher::COPYRIGHT
15
- banner Git::Switcher::BANNER
16
-
17
- end
18
-
19
- raise "TTY only!" unless STDIN.tty? && STDOUT.tty?
20
-
21
- repo = Git::Switcher::Repo.new(Git::Switcher::Repo.discover(Dir.pwd))
22
-
23
- # this holds the menu item that will be selected
24
- # if the user just presses "enter" ... typically
25
- # this will be "the next thing on the list", ie.
26
- # the next branch or the next tag on the list...
27
- default_menu_item = nil
28
-
29
- running = true ; while running
30
-
31
- # clear the screen (bit of a hack)
32
- print "\e[H\e[2J"
33
-
34
- # generate and print the repo menu
35
- puts(menu = Menu.for(repo))
36
-
37
- # print prompt, read response and execute command corresponding to the menu item
38
- begin
39
- puts ; print default_menu_item ? "(#{default_menu_item}) > " : 'Your selection > '
40
- if gets
41
- case (response = $_.chomp.strip)
42
- when 'quit'
43
- running = false
44
- when *menu.shortcut_keys, ''
45
- if (menu_item = menu[response] || default_menu_item)
46
- # execute the command for the selected menu item
47
- `#{menu_item.command}`
48
- # store the menu item that succeeds the selected one
49
- default_menu_item = menu_item.next
50
- end
51
- else
52
- # invalid command... ignore!
53
- end
54
- else
55
- puts "^D" ; running = false # user has pressed ^D
56
- end
57
- rescue Interrupt
58
- puts ; running = false # user has pressed ^C
59
- end
60
-
61
- end
62
-
63
- # That's all, Folks!
@@ -1,20 +0,0 @@
1
- Feature: Help Me I've Got Versionitis
2
-
3
- Scenario: get help for the main script
4
-
5
- When I get help for "git-switcher"
6
- Then the exit status should be 0
7
- And the banner should be present
8
- And the banner should include the version
9
- And the banner should document that this app takes options
10
- And the following options should be documented:
11
- | --version, -v: |
12
- | --help, -h: |
13
-
14
- Scenario: get the version of the main script
15
-
16
- When I get the version of "git-switcher"
17
- Then the exit status should be 0
18
- And the output should include the version
19
- And the output should include the app name
20
- And the output should include a copyright notice
@@ -1,21 +0,0 @@
1
- #
2
- # Methadone/Aruba "extensions"/"customizations"
3
- #
4
-
5
- When /^I get the version of "([^"]*)"$/ do |script_name|
6
- @script_name = script_name
7
- step %(I run `#{script_name} --version`)
8
- end
9
-
10
- Then /^the output should include the version$/ do
11
- step %(the output should match /v\\d+\\.\\d+\\.\\d+/)
12
- end
13
-
14
- Then /^the output should include the app name$/ do
15
- step %(the output should match /#{Regexp.escape(@script_name)}/)
16
- end
17
-
18
- Then /^the output should include a copyright notice$/ do
19
- step %(the output should match /Copyright \\(c\\) [\\d]{4} [[\\w]+]+/)
20
- end
21
-
@@ -1,7 +0,0 @@
1
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), '..', '..', 'lib')
2
-
3
- require 'git-switcher'
4
-
5
- require 'aruba/cucumber'
6
- require 'methadone/cucumber'
7
- require 'cucumber-pride'
@@ -1,13 +0,0 @@
1
- module Git
2
- module Switcher
3
-
4
- BANNER = <<-"EOS"
5
- Usage: git-switcher [options]
6
-
7
- v#{Git::Switcher::VERSION}
8
-
9
- Options:
10
- EOS
11
-
12
- end
13
- end
@@ -1,6 +0,0 @@
1
- module Git
2
- module Switcher
3
- # TODO replace hard-coded details with data retrieved from the gemspec
4
- COPYRIGHT = "git-switcher v#{Git::Switcher::VERSION} Copyright (c) 2012 Peter Vandenberk"
5
- end
6
- end
@@ -1,99 +0,0 @@
1
- class Menu
2
-
3
- Struct.new("Submenu", :label, :menu_items) do
4
- def to_s
5
- "\n\t#{label}\n\n" + menu_items.join("\n")
6
- end
7
- end
8
-
9
- Struct.new("MenuItem", :shortcut, :label, :highlight, :command, :next) do
10
- def to_s
11
- "[%s]\t%s%s" % [shortcut.key, label, highlight ? ' ***' : '']
12
- end
13
- end
14
-
15
- Struct.new("Shortcut", :key, :calc_next_key) do
16
- def next
17
- self.class.new(self.calc_next_key.call(self.key), self.calc_next_key)
18
- end
19
- end
20
-
21
- attr_accessor :submenus
22
- attr_accessor :menu_items
23
-
24
- def initialize repo
25
- @repo = repo # a git repository!
26
- @submenus = [] # addition-ordered!
27
- @menu_items = {} # keyed on shortcut
28
- end
29
-
30
- def to_s
31
- @submenus.join("\n")
32
- end
33
-
34
- def [] key
35
- @menu_items[key]
36
- end
37
-
38
- def shortcut_keys
39
- @menu_items.keys
40
- end
41
-
42
- def self.for repo
43
- self.new(repo).tap { |menu|
44
-
45
- shortcut = Struct::Shortcut.new('1', lambda { |key| (key.to_i + 1).to_s })
46
- menu.add_submenu_for("REMOTE BRANCHES", repo.remote_branches, shortcut) unless repo.remote_branches.empty?
47
-
48
- shortcut = Struct::Shortcut.new((repo.remote_branches.count + 1).to_s, lambda { |key| (key.to_i + 1).to_s })
49
- menu.add_submenu_for("LOCAL BRANCHES", repo.local_branches, shortcut) unless repo.local_branches.empty?
50
-
51
- shortcut = Struct::Shortcut.new('a', lambda { |key| (key.ord + 1).chr })
52
- menu.add_submenu_for("REACHABLE TAGS", repo.reachable_tags, shortcut) unless repo.reachable_tags.empty?
53
-
54
- }
55
- end
56
-
57
- def add_submenu_for label, refs, shortcut
58
-
59
- # calculate the new submenu: one menu item for each one of the refs
60
- submenu = Struct::Submenu.new(label, menu_items_for(refs, shortcut))
61
-
62
- # add the submenu to the main menu
63
- self.submenus << submenu
64
-
65
- # register each menu item of the new submenu via its shortcut key
66
- submenu.menu_items.each do |menu_item|
67
- self.menu_items[menu_item.shortcut.key] = menu_item
68
- end
69
-
70
- end
71
-
72
- def menu_items_for refs, shortcut
73
-
74
- previous_menu_item = nil
75
- next_shortcut = shortcut
76
-
77
- refs.map { |ref|
78
-
79
- menu_item = Struct::MenuItem.new(
80
- next_shortcut,
81
- abbreviated_name = @repo.abbreviated_name(ref),
82
- @repo.current_head?(ref),
83
- "git checkout #{abbreviated_name}",
84
- nil
85
- )
86
-
87
- # link the menu items together, to enable default selection
88
- previous_menu_item and previous_menu_item.next = menu_item
89
-
90
- previous_menu_item = menu_item
91
- next_shortcut = next_shortcut.next
92
-
93
- menu_item
94
-
95
- }
96
-
97
- end
98
-
99
- end