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.
- checksums.yaml +7 -0
- data/.gitignore +8 -19
- data/.pryrc +8 -0
- data/.rubocop.yml +41 -0
- data/.ruby-version +1 -0
- data/.travis.yml +5 -4
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +0 -7
- data/Gemfile.lock +49 -0
- data/LICENSE.txt +17 -18
- data/README.md +7 -5
- data/Rakefile +21 -20
- data/bin/console +9 -0
- data/bin/setup +15 -0
- data/exe/git-switcher +55 -0
- data/git-switcher.gemspec +30 -48
- data/lib/ext/rugged.rb +15 -0
- data/lib/git/switcher/menu.rb +102 -0
- data/lib/git/switcher/version.rb +10 -0
- data/lib/git/switcher.rb +15 -0
- metadata +47 -277
- data/Guardfile +0 -17
- data/bin/git-switcher +0 -63
- data/features/help_and_version.feature +0 -20
- data/features/step_definitions/git-switcher_steps.rb +0 -21
- data/features/support/env.rb +0 -7
- data/lib/git-switcher/banner.rb +0 -13
- data/lib/git-switcher/copyright.rb +0 -6
- data/lib/git-switcher/menu.rb +0 -99
- data/lib/git-switcher/repo.rb +0 -93
- data/lib/git-switcher/version.rb +0 -5
- data/lib/git-switcher.rb +0 -17
- data/spec/lib/git-switcher/repo_spec.rb +0 -9
- data/spec/lib/git-switcher_spec.rb +0 -7
- data/spec/spec_helper.rb +0 -8
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
|
5
|
-
prerelease:
|
4
|
+
version: 1.0.0
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Peter Vandenberk
|
9
8
|
autorequire:
|
10
|
-
bindir:
|
9
|
+
bindir: exe
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2019-02-24 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
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:
|
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:
|
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:
|
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:
|
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
|
-
- .
|
105
|
+
- ".gitignore"
|
106
|
+
- ".pryrc"
|
107
|
+
- ".rubocop.yml"
|
108
|
+
- ".ruby-version"
|
109
|
+
- ".travis.yml"
|
110
|
+
- CODE_OF_CONDUCT.md
|
329
111
|
- Gemfile
|
330
|
-
-
|
112
|
+
- Gemfile.lock
|
331
113
|
- LICENSE.txt
|
332
114
|
- README.md
|
333
115
|
- Rakefile
|
334
|
-
- bin/
|
335
|
-
-
|
336
|
-
-
|
337
|
-
- features/support/env.rb
|
116
|
+
- bin/console
|
117
|
+
- bin/setup
|
118
|
+
- exe/git-switcher
|
338
119
|
- git-switcher.gemspec
|
339
|
-
- lib/
|
340
|
-
- lib/git
|
341
|
-
- lib/git
|
342
|
-
- lib/git
|
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:
|
144
|
+
rubygems_version: 2.5.2.3
|
369
145
|
signing_key:
|
370
|
-
specification_version:
|
371
|
-
summary:
|
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
|
-
|
data/features/support/env.rb
DELETED
data/lib/git-switcher/banner.rb
DELETED
data/lib/git-switcher/menu.rb
DELETED
@@ -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
|