squared 0.0.6 → 0.0.8
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 +4 -4
- data/README.ruby.md +48 -13
- data/lib/squared/common/base.rb +22 -16
- data/lib/squared/common/class.rb +5 -1
- data/lib/squared/common/format.rb +48 -45
- data/lib/squared/common/shell.rb +3 -3
- data/lib/squared/common/system.rb +35 -3
- data/lib/squared/common/task.rb +3 -11
- data/lib/squared/config.rb +21 -18
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +136 -128
- data/lib/squared/workspace/project/base.rb +131 -72
- data/lib/squared/workspace/project/git.rb +73 -73
- data/lib/squared/workspace/project/node.rb +88 -63
- data/lib/squared/workspace/project/python.rb +48 -33
- data/lib/squared/workspace/project/ruby.rb +196 -64
- data/lib/squared/workspace/project.rb +4 -0
- data/lib/squared/workspace/repo.rb +41 -28
- data/lib/squared/workspace/series.rb +54 -43
- data/lib/squared/workspace.rb +11 -3
- data/squared.gemspec +1 -0
- metadata +16 -2
@@ -4,31 +4,33 @@ module Squared
|
|
4
4
|
module Workspace
|
5
5
|
module Project
|
6
6
|
class Git < Base
|
7
|
-
include Format
|
8
|
-
|
9
|
-
REF = :git
|
10
7
|
OPT_PULL = %w[all tags prune ff-only autostash dry-run].freeze
|
11
8
|
OPT_FETCH = %w[tags prune prune-tags depth=n dry-run].freeze
|
12
|
-
private_constant :
|
9
|
+
private_constant :OPT_PULL, :OPT_FETCH
|
13
10
|
|
14
11
|
class << self
|
15
|
-
|
12
|
+
include ::Rake::DSL
|
13
|
+
|
14
|
+
def populate(workspace, **)
|
16
15
|
return if workspace.series.pull.empty?
|
17
16
|
|
18
17
|
desc 'all[git?=rebase|stash]'
|
19
18
|
task 'all', [:git] do |_, args|
|
20
|
-
|
19
|
+
exception = workspace.exception
|
20
|
+
warning = workspace.warning
|
21
|
+
sync = ->(key) { workspace.task_defined?(s = "#{key}:sync") ? s : key }
|
21
22
|
pull = case args.git
|
22
23
|
when 'rebase'
|
23
|
-
sync.(
|
24
|
+
sync.('rebase')
|
24
25
|
when 'stash'
|
25
|
-
invoke
|
26
|
-
sync.(
|
26
|
+
invoke(sync.('stash'), exception: exception, warning: warning)
|
27
|
+
sync.('pull')
|
27
28
|
else
|
28
|
-
sync.(
|
29
|
+
sync.('pull')
|
29
30
|
end
|
30
|
-
invoke(pull, exception:
|
31
|
-
invoke(workspace.dev? ? :refresh : :build,
|
31
|
+
Common::Task.invoke(pull, exception: exception, warning: warning)
|
32
|
+
Common::Task.invoke(workspace.dev? && workspace.series.has?(:refresh) ? :refresh : :build,
|
33
|
+
exception: exception, warning: warning)
|
32
34
|
end
|
33
35
|
end
|
34
36
|
|
@@ -45,7 +47,7 @@ module Squared
|
|
45
47
|
end
|
46
48
|
end
|
47
49
|
|
48
|
-
@@tasks[
|
50
|
+
@@tasks[ref] = {
|
49
51
|
checkout: %i[branch detach force merge],
|
50
52
|
commit: %i[add amend amend-orig all no-all],
|
51
53
|
diff: %i[head cached branch files],
|
@@ -59,26 +61,29 @@ module Squared
|
|
59
61
|
rev: %i[commit branch]
|
60
62
|
}.freeze
|
61
63
|
|
64
|
+
def initialize(*, **)
|
65
|
+
super
|
66
|
+
initialize_ref(Git.ref)
|
67
|
+
end
|
68
|
+
|
62
69
|
def populate(*)
|
63
70
|
super
|
64
|
-
return unless gitdir.exist?
|
71
|
+
return unless gitdir.exist? && ref?(Git.ref)
|
65
72
|
|
66
73
|
namespace name do
|
67
|
-
@@tasks[
|
74
|
+
@@tasks[Git.ref].each do |action, flags|
|
68
75
|
namespace action do
|
69
76
|
flags.each do |flag|
|
70
77
|
case action
|
71
78
|
when :pull
|
72
79
|
desc format_desc(action, flag, OPT_PULL)
|
73
80
|
task flag, [:opts] do |_, args|
|
74
|
-
|
75
|
-
pull(flag, opts: opts)
|
81
|
+
pull(flag, opts: args.to_a)
|
76
82
|
end
|
77
83
|
when :fetch
|
78
84
|
desc format_desc(action, flag, OPT_FETCH)
|
79
85
|
task flag, [:opts] do |_, args|
|
80
|
-
|
81
|
-
fetch(flag, opts: opts)
|
86
|
+
fetch(flag, opts: args.to_a)
|
82
87
|
end
|
83
88
|
when :commit, :restore
|
84
89
|
if flag == :all
|
@@ -89,15 +94,16 @@ module Squared
|
|
89
94
|
else
|
90
95
|
desc format_desc(action, flag, 'pathspec+')
|
91
96
|
task flag, [:pathspec] do |_, args|
|
92
|
-
|
93
|
-
|
97
|
+
files = args.to_a
|
98
|
+
guard_params(action, flag, args: files)
|
99
|
+
__send__(action, flag, files)
|
94
100
|
end
|
95
101
|
end
|
96
102
|
when :stash
|
97
103
|
if flag == :push
|
98
104
|
desc format_desc(action, flag, 'pathspec*')
|
99
105
|
task flag, [:pathspec] do |_, args|
|
100
|
-
stash(flag,
|
106
|
+
stash(flag, args.to_a)
|
101
107
|
end
|
102
108
|
else
|
103
109
|
desc format_desc(action, flag, 'commit?')
|
@@ -120,20 +126,20 @@ module Squared
|
|
120
126
|
when :head
|
121
127
|
desc format_desc(action, flag, 'index?=0,pathspec*')
|
122
128
|
task flag, [:pathspec] do |_, args|
|
123
|
-
files =
|
124
|
-
index = /^\d+$/.match?(files.first) && !
|
129
|
+
files = args.to_a
|
130
|
+
index = /^\d+$/.match?(files.first) && !git_option('index') ? files.shift.to_i : 0
|
125
131
|
diff(flag, files, index: index)
|
126
132
|
end
|
127
133
|
when :cached
|
128
134
|
desc format_desc(action, flag, 'pathspec*')
|
129
135
|
task flag, [:pathspec] do |_, args|
|
130
|
-
diff(flag,
|
136
|
+
diff(flag, args.to_a)
|
131
137
|
end
|
132
138
|
when :branch
|
133
139
|
desc format_desc(action, flag, 'name,pathspec*')
|
134
140
|
task flag, [:name, :pathspec] do |_, args|
|
135
141
|
guard_params(action, flag, args: args, key: :name)
|
136
|
-
diff(flag,
|
142
|
+
diff(flag, args.to_a[1..-1], branch: args.name)
|
137
143
|
end
|
138
144
|
when :files
|
139
145
|
desc format_desc(action, flag, 'path1,path2')
|
@@ -165,7 +171,7 @@ module Squared
|
|
165
171
|
detach = args.detach
|
166
172
|
commit = args.commit
|
167
173
|
end
|
168
|
-
guard_params(
|
174
|
+
guard_params(action, flag, args: { create: create }, key: :create, pat: /^b$/i) if create
|
169
175
|
checkout(flag, branch: args.name, create: create, commit: commit, detach: detach)
|
170
176
|
end
|
171
177
|
when :detach
|
@@ -176,15 +182,14 @@ module Squared
|
|
176
182
|
else
|
177
183
|
desc format_desc(action, flag, 'pathspec*')
|
178
184
|
task flag, [:pathspec] do |_, args|
|
179
|
-
checkout(flag,
|
185
|
+
checkout(flag, args.to_a)
|
180
186
|
end
|
181
187
|
end
|
182
188
|
when :reset
|
183
189
|
if flag == :head
|
184
190
|
desc format_desc(action, flag, 'ref?=HEAD,pathspec+')
|
185
191
|
task flag, [:ref, :pathspec] do |_, args|
|
186
|
-
|
187
|
-
reset(flag, collect_args(args, :pathspec), ref: args.ref)
|
192
|
+
reset(flag, args.to_a[1..-1], ref: args.ref)
|
188
193
|
end
|
189
194
|
else
|
190
195
|
desc format_desc(action, flag, 'ref?=HEAD')
|
@@ -203,12 +208,12 @@ module Squared
|
|
203
208
|
cmd = git_session 'pull'
|
204
209
|
if flag == :'no-rebase'
|
205
210
|
cmd << '--no-rebase'
|
206
|
-
elsif flag == :rebase ||
|
211
|
+
elsif flag == :rebase || git_option('rebase')
|
207
212
|
cmd << '--rebase'
|
208
213
|
end
|
209
214
|
if flag == :'no-commit'
|
210
215
|
cmd << '--no-commit'
|
211
|
-
elsif flag == :commit ||
|
216
|
+
elsif flag == :commit || git_option('commit')
|
212
217
|
cmd << '--commit'
|
213
218
|
end
|
214
219
|
append_pull opts, OPT_PULL, flag
|
@@ -221,28 +226,28 @@ module Squared
|
|
221
226
|
|
222
227
|
def fetch(flag = nil, opts: [])
|
223
228
|
cmd = git_session 'fetch'
|
224
|
-
cmd << '--all' if flag == :all ||
|
229
|
+
cmd << '--all' if flag == :all || git_option('all')
|
225
230
|
append_pull opts, OPT_FETCH, flag
|
226
231
|
source(sync: invoked_sync?('fetch', flag), stderr: true, exception: !workspace.series.multiple?)
|
227
232
|
end
|
228
233
|
|
229
|
-
def stash(flag =
|
230
|
-
cmd = git_session 'stash', flag.to_s
|
234
|
+
def stash(flag = nil, files = [], commit: nil)
|
235
|
+
cmd = git_session 'stash', (flag || 'push').to_s
|
231
236
|
case flag
|
232
237
|
when :apply, :pop
|
233
|
-
cmd << '--index' if
|
238
|
+
cmd << '--index' if git_option('index')
|
234
239
|
cmd << commit
|
235
240
|
else
|
236
241
|
append_option %w[all staged include-untracked]
|
237
|
-
append_message
|
242
|
+
append_message git_option('message', 'm', zero: false)
|
238
243
|
append_pathspec files
|
239
244
|
end
|
240
245
|
source(sync: invoked_sync?('stash', flag), exception: workspace.exception)
|
241
246
|
end
|
242
247
|
|
243
248
|
def status
|
244
|
-
cmd = git_session 'status',
|
245
|
-
if (val =
|
249
|
+
cmd = git_session 'status', git_option('long') ? '--long' : '--short'
|
250
|
+
if (val = git_option('ignore-submodules'))
|
246
251
|
cmd << "--ignore-submodules=#{case val
|
247
252
|
when '0', 'none'
|
248
253
|
'none'
|
@@ -272,6 +277,7 @@ module Squared
|
|
272
277
|
def reset(flag, files = [], ref: nil)
|
273
278
|
cmd = git_session 'reset'
|
274
279
|
if flag == :head
|
280
|
+
guard_params('reset', flag, args: files)
|
275
281
|
append_commit ref
|
276
282
|
append_pathspec files
|
277
283
|
else
|
@@ -282,7 +288,7 @@ module Squared
|
|
282
288
|
append_submodules flag
|
283
289
|
else
|
284
290
|
cmd << '--mixed'
|
285
|
-
cmd << '--no-refresh' if
|
291
|
+
cmd << '--no-refresh' if git_option('refresh', equals: '0')
|
286
292
|
end
|
287
293
|
append_commit ref
|
288
294
|
end
|
@@ -293,10 +299,10 @@ module Squared
|
|
293
299
|
cmd = git_session 'checkout'
|
294
300
|
case flag
|
295
301
|
when :branch
|
296
|
-
cmd << '--detach' if detach == 'd' ||
|
302
|
+
cmd << '--detach' if detach == 'd' || git_option('detach')
|
297
303
|
if create
|
298
304
|
cmd << "-#{create}" << branch
|
299
|
-
if (val =
|
305
|
+
if (val = git_option('start-point'))
|
300
306
|
cmd << val
|
301
307
|
end
|
302
308
|
else
|
@@ -351,22 +357,22 @@ module Squared
|
|
351
357
|
sha = nil
|
352
358
|
end
|
353
359
|
end
|
354
|
-
if (val =
|
360
|
+
if (val = git_option('unified')).to_i > 0
|
355
361
|
cmd << "--unified=#{val}"
|
356
362
|
end
|
357
363
|
append_nocolor
|
358
364
|
case flag
|
359
365
|
when :cached
|
360
366
|
cmd << '--cached'
|
361
|
-
cmd << '--merge-base' if
|
367
|
+
cmd << '--merge-base' if git_option('merge-base')
|
362
368
|
when :branch
|
363
369
|
cmd << branch
|
364
370
|
when :files
|
365
371
|
cmd << '--no-index'
|
366
372
|
else
|
367
|
-
if (val =
|
373
|
+
if (val = git_option('index')) || index > 0
|
368
374
|
cmd << "HEAD~#{val || index}"
|
369
|
-
elsif sha &&
|
375
|
+
elsif sha && git_option('merge-base')
|
370
376
|
cmd << '--merge-base'
|
371
377
|
end
|
372
378
|
end
|
@@ -376,7 +382,7 @@ module Squared
|
|
376
382
|
end
|
377
383
|
|
378
384
|
def commit(flag, files = [], message: nil, pass: false)
|
379
|
-
message ||=
|
385
|
+
message ||= git_option('message', 'm', zero: false)
|
380
386
|
amend = flag.to_s.start_with?('amend')
|
381
387
|
if !message && !amend
|
382
388
|
return if pass
|
@@ -391,7 +397,7 @@ module Squared
|
|
391
397
|
"-- #{files.join(' ')}"
|
392
398
|
end
|
393
399
|
if !push?
|
394
|
-
source('git branch -vv --list', io: true, banner: false)
|
400
|
+
source('git branch -vv --list', io: true, banner: false).first.each do |val|
|
395
401
|
origin = %r{^\* [^\[]+(?<= )\[([\w.-/]+?)/([\w.-]+)\] }.match(val)
|
396
402
|
next unless origin
|
397
403
|
|
@@ -403,7 +409,7 @@ module Squared
|
|
403
409
|
raise_error('commit', 'work tree is not usable') unless push?
|
404
410
|
|
405
411
|
cmd = git_session 'commit'
|
406
|
-
cmd << '--dry-run' if
|
412
|
+
cmd << '--dry-run' if git_option('dry-run')
|
407
413
|
if amend
|
408
414
|
cmd << '--amend'
|
409
415
|
else
|
@@ -411,7 +417,7 @@ module Squared
|
|
411
417
|
end
|
412
418
|
if message
|
413
419
|
append_message message
|
414
|
-
elsif flag == :'amend-orig' ||
|
420
|
+
elsif flag == :'amend-orig' || git_option('no-edit')
|
415
421
|
cmd << '--no-edit'
|
416
422
|
end
|
417
423
|
a = ['git add --verbose']
|
@@ -440,14 +446,14 @@ module Squared
|
|
440
446
|
source(stdout: true)
|
441
447
|
end
|
442
448
|
|
443
|
-
|
449
|
+
private
|
444
450
|
|
445
451
|
def source(cmd = @session, exception: true, banner: true, io: false, sync: true, stdout: false, stderr: false)
|
446
452
|
cmd = close_session(cmd)
|
447
453
|
log.info cmd
|
454
|
+
banner = format_banner(cmd.gsub(File.join(path, ''), ''), banner: banner, multiple: true)
|
455
|
+
cmd = cmd.sub(/^git\b/, "git --work-tree #{shell_quote(path)} --git-dir #{shell_quote(gitdir)}")
|
448
456
|
begin
|
449
|
-
banner = format_banner(cmd.gsub(File.join(path, ''), ''), banner: banner, multiple: true)
|
450
|
-
cmd = cmd.sub(/^git\b/, "git --work-tree #{shell_quote(path)} --git-dir #{shell_quote(gitdir)}")
|
451
457
|
if io
|
452
458
|
[IO.popen(cmd), banner]
|
453
459
|
elsif pipe? ? sync : stdout
|
@@ -480,7 +486,7 @@ module Squared
|
|
480
486
|
log.error e
|
481
487
|
raise if exception
|
482
488
|
|
483
|
-
warn e
|
489
|
+
warn e if workspace.warning
|
484
490
|
end
|
485
491
|
end
|
486
492
|
|
@@ -526,14 +532,6 @@ module Squared
|
|
526
532
|
files.map { |val| val == '.' ? '.' : shell_quote(base_path(val.strip)) }
|
527
533
|
end
|
528
534
|
|
529
|
-
def source_path?(val)
|
530
|
-
return val.to_s.start_with?(File.join(path, '').to_s) if Pathname.new(val).absolute?
|
531
|
-
|
532
|
-
!val.match?(%r{^\.\.[/\\]})
|
533
|
-
end
|
534
|
-
|
535
|
-
private
|
536
|
-
|
537
535
|
def append_pull(opts, list, flag = nil)
|
538
536
|
append_submodules flag
|
539
537
|
opts.each do |opt|
|
@@ -551,7 +549,7 @@ module Squared
|
|
551
549
|
end
|
552
550
|
|
553
551
|
def append_pathspec(files = [], expect: false, pass: false)
|
554
|
-
if files.empty? && (val =
|
552
|
+
if files.empty? && (val = git_option('pathspec'))
|
555
553
|
files = split_escape(val)
|
556
554
|
end
|
557
555
|
files = source_path(files, pass: pass)
|
@@ -567,30 +565,30 @@ module Squared
|
|
567
565
|
end
|
568
566
|
|
569
567
|
def append_head
|
570
|
-
@session << (
|
568
|
+
@session << (git_option('head') || git_option('tree-ish'))
|
571
569
|
end
|
572
570
|
|
573
571
|
def append_ours
|
574
|
-
if
|
572
|
+
if git_option('ours')
|
575
573
|
@session << '--ours'
|
576
|
-
elsif
|
574
|
+
elsif git_option('theirs')
|
577
575
|
@session << '--theirs'
|
578
576
|
end
|
579
577
|
end
|
580
578
|
|
581
579
|
def append_submodules(flag = nil)
|
582
|
-
if
|
580
|
+
if git_option('recurse-submodules', equals: '0')
|
583
581
|
@session << '--no-recurse-submodules'
|
584
|
-
elsif flag == :submodules ||
|
582
|
+
elsif flag == :submodules || git_option('recurse-submodules')
|
585
583
|
@session << '--recurse-submodules'
|
586
584
|
end
|
587
585
|
end
|
588
586
|
|
589
587
|
def append_option(list)
|
590
|
-
list.each { |val| @session << "--#{val}" if
|
588
|
+
list.each { |val| @session << "--#{val}" if git_option(val) }
|
591
589
|
end
|
592
590
|
|
593
|
-
def
|
591
|
+
def git_option(*args, equals: nil, zero: true)
|
594
592
|
for val in args
|
595
593
|
break if (ret = ENV["GIT_#{val.gsub(/\W/, '_').upcase}"])
|
596
594
|
end
|
@@ -606,11 +604,13 @@ module Squared
|
|
606
604
|
end
|
607
605
|
|
608
606
|
def gitdir
|
609
|
-
|
607
|
+
base_path('.git')
|
610
608
|
end
|
611
609
|
|
612
|
-
def
|
613
|
-
|
610
|
+
def source_path?(val)
|
611
|
+
return val.to_s.start_with?(File.join(path, '').to_s) if Pathname.new(val).absolute?
|
612
|
+
|
613
|
+
!val.match?(%r{^\.\.[/\\]})
|
614
614
|
end
|
615
615
|
|
616
616
|
def push?
|