squared 0.0.7 → 0.0.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.ruby.md +22 -7
- data/lib/squared/common/base.rb +10 -9
- data/lib/squared/common/format.rb +2 -2
- data/lib/squared/common/task.rb +4 -3
- data/lib/squared/config.rb +30 -26
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +123 -83
- data/lib/squared/workspace/project/base.rb +53 -24
- data/lib/squared/workspace/project/git.rb +73 -66
- data/lib/squared/workspace/project/node.rb +114 -83
- data/lib/squared/workspace/project/python.rb +47 -21
- data/lib/squared/workspace/project/ruby.rb +39 -51
- data/lib/squared/workspace/repo.rb +37 -23
- data/lib/squared/workspace/series.rb +64 -40
- data/lib/squared/workspace.rb +8 -2
- data/squared.gemspec +1 -0
- metadata +16 -2
@@ -8,6 +8,7 @@ module Squared
|
|
8
8
|
module Project
|
9
9
|
class Base
|
10
10
|
include Common
|
11
|
+
include Format
|
11
12
|
include System
|
12
13
|
include Shell
|
13
14
|
include Task
|
@@ -44,7 +45,6 @@ module Squared
|
|
44
45
|
@@tasks = {}
|
45
46
|
|
46
47
|
attr_reader :name, :project, :workspace, :group, :path, :theme
|
47
|
-
attr_accessor :warning
|
48
48
|
|
49
49
|
def initialize(name, path, workspace, *, group: nil, **kwargs)
|
50
50
|
@name = name.to_s
|
@@ -58,8 +58,6 @@ module Squared
|
|
58
58
|
@output = [kwargs[:run], nil]
|
59
59
|
@copy = kwargs[:copy]
|
60
60
|
@clean = kwargs[:clean]
|
61
|
-
@exclude = as_a(kwargs[:exclude])
|
62
|
-
@warning = workspace.warning
|
63
61
|
@theme = if !workspace.verbose
|
64
62
|
{}
|
65
63
|
elsif kwargs.fetch(:common, true)
|
@@ -67,6 +65,9 @@ module Squared
|
|
67
65
|
else
|
68
66
|
__get__(:theme)[:project][to_sym] ||= {}
|
69
67
|
end
|
68
|
+
@ref = []
|
69
|
+
@exclude = as_a(kwargs[:exclude], :to_sym).freeze
|
70
|
+
initialize_ref(Base.ref)
|
70
71
|
initialize_logger(**kwargs)
|
71
72
|
end
|
72
73
|
|
@@ -91,7 +92,7 @@ module Squared
|
|
91
92
|
raise if @workspace.exception
|
92
93
|
|
93
94
|
file = nil
|
94
|
-
warn e if @warning
|
95
|
+
warn e if @workspace.warning
|
95
96
|
end
|
96
97
|
end
|
97
98
|
log[:progname] = @name
|
@@ -118,23 +119,34 @@ module Squared
|
|
118
119
|
end
|
119
120
|
|
120
121
|
def initialize_script(ref, **)
|
122
|
+
initialize_ref(ref)
|
121
123
|
return unless (script = workspace.script(group: group, ref: ref))
|
122
124
|
|
123
125
|
@depend = script[:depend] if @depend.nil?
|
124
126
|
@doc = script[:doc] if @doc.nil?
|
125
127
|
@test = script[:test] if @test.nil?
|
126
128
|
@clean = script[:clean] if @clean.nil?
|
129
|
+
@exclude = script[:exclude] if @exclude.empty? && script.key?(:exclude)
|
127
130
|
@script = script
|
128
131
|
end
|
129
132
|
|
133
|
+
def initialize_ref(ref)
|
134
|
+
@ref << ref unless @exclude.include?(ref)
|
135
|
+
end
|
136
|
+
|
137
|
+
def ref
|
138
|
+
Base.ref
|
139
|
+
end
|
140
|
+
|
130
141
|
def populate(*)
|
131
|
-
|
142
|
+
valid = ref?(Base.ref)
|
143
|
+
series = workspace.series
|
132
144
|
|
133
145
|
namespace name do
|
134
|
-
|
135
|
-
next unless
|
146
|
+
series.each_key do |key|
|
147
|
+
next unless series.include?(key) ? has?(key) && valid : workspace.task_extend?(self, key)
|
136
148
|
|
137
|
-
desc message(name, key)
|
149
|
+
desc message(*name.split(':'), key)
|
138
150
|
task key do
|
139
151
|
__send__(key)
|
140
152
|
end
|
@@ -170,7 +182,7 @@ module Squared
|
|
170
182
|
build(sync: invoked_sync?('depend'))
|
171
183
|
key = "#{name}:copy"
|
172
184
|
if workspace.task_defined?(key)
|
173
|
-
invoke
|
185
|
+
invoke(key, exception: workspace.exception, warning: workspace.warning)
|
174
186
|
else
|
175
187
|
copy
|
176
188
|
end
|
@@ -251,6 +263,10 @@ module Squared
|
|
251
263
|
respond_to?(m = :"#{method}?") && __send__(m)
|
252
264
|
end
|
253
265
|
|
266
|
+
def ref?(val)
|
267
|
+
@ref.include?(val)
|
268
|
+
end
|
269
|
+
|
254
270
|
def build?
|
255
271
|
!!@output[0]
|
256
272
|
end
|
@@ -283,17 +299,19 @@ module Squared
|
|
283
299
|
!!@dev
|
284
300
|
end
|
285
301
|
|
286
|
-
|
302
|
+
private
|
287
303
|
|
288
304
|
def run(cmd = @session, exception: workspace.exception, banner: true, sync: true, req: nil, **)
|
289
|
-
|
290
|
-
|
305
|
+
if req && !base_path(req).exist?
|
306
|
+
log.warn "#{req} (not found)"
|
307
|
+
return
|
308
|
+
end
|
291
309
|
cmd = close_session(cmd)
|
292
310
|
log.info cmd
|
293
311
|
begin
|
294
312
|
if cmd =~ /^\S+:(\S+:?)+$/ && workspace.task_defined?(cmd)
|
295
313
|
print_item if sync
|
296
|
-
invoke(cmd, exception: exception)
|
314
|
+
invoke(cmd, exception: exception, warning: workspace.warning)
|
297
315
|
else
|
298
316
|
print_item format_banner(cmd, banner: banner) if sync
|
299
317
|
shell(cmd, chdir: path, exception: exception)
|
@@ -309,7 +327,8 @@ module Squared
|
|
309
327
|
end
|
310
328
|
|
311
329
|
def env(key, default = nil, equals: nil, ignore: ['0'].freeze, suffix: nil, strict: false)
|
312
|
-
|
330
|
+
@env ||= name.gsub(/[^\w]+/, '_').upcase
|
331
|
+
a = "#{key}_#{@env}"
|
313
332
|
b = ''
|
314
333
|
if suffix
|
315
334
|
a = [a, suffix].flatten.join('_')
|
@@ -343,12 +362,12 @@ module Squared
|
|
343
362
|
puts val unless val.empty? || (val.size == 1 && val.first.nil?)
|
344
363
|
end
|
345
364
|
|
346
|
-
def print_banner(*lines, styles: theme[:banner], border: theme[:border])
|
365
|
+
def print_banner(*lines, styles: theme[:banner], border: theme[:border], client: false)
|
347
366
|
pad = 0
|
348
367
|
if styles
|
349
368
|
if styles.any? { |s| s.to_s.end_with?('!') }
|
350
369
|
pad = 1
|
351
|
-
elsif styles.size <= 1
|
370
|
+
elsif !client && styles.size <= 1
|
352
371
|
styles = [:bold] + styles
|
353
372
|
end
|
354
373
|
end
|
@@ -381,22 +400,31 @@ module Squared
|
|
381
400
|
ret.join("\n")
|
382
401
|
end
|
383
402
|
|
384
|
-
def format_desc(action, flag, opts = nil, req: 'opts*')
|
385
|
-
opts = "#{
|
386
|
-
|
403
|
+
def format_desc(action, flag, opts = nil, req: '', arg: 'opts*')
|
404
|
+
opts = "#{arg}=#{opts.join(',')}" if opts.is_a?(::Array)
|
405
|
+
unless flag
|
387
406
|
flag = action
|
388
407
|
action = ''
|
389
408
|
end
|
390
|
-
|
409
|
+
req = opts ? "#{req}," : "[#{req}]" unless req.to_s.empty?
|
410
|
+
message(*name.split(':'), action, opts ? "#{flag}[#{req}#{opts}]" : flag.to_s + req)
|
391
411
|
end
|
392
412
|
|
393
413
|
def format_banner(cmd, banner: true, multiple: false)
|
394
414
|
return unless banner
|
395
415
|
|
416
|
+
if (data = workspace.banner(group: group, ref: ref))
|
417
|
+
client = true
|
418
|
+
else
|
419
|
+
data = { command: true, order: %i[path], styles: theme[:banner], border: theme[:border] }
|
420
|
+
end
|
396
421
|
if verbose?
|
397
|
-
|
422
|
+
out = []
|
423
|
+
out << cmd.sub(/^\S+/, &:upcase) if data[:command]
|
424
|
+
data[:order].each { |val| out << val.to_s if (val = __send__(val)) }
|
425
|
+
print_banner(*out, styles: data[:styles], border: data[:border], client: client)
|
398
426
|
elsif multiple && workspace.series.multiple?
|
399
|
-
"## #{path} ##"
|
427
|
+
"## #{__send__(data[:order].first || :path)} ##"
|
400
428
|
end
|
401
429
|
end
|
402
430
|
|
@@ -457,8 +485,9 @@ module Squared
|
|
457
485
|
workspace.pipe
|
458
486
|
end
|
459
487
|
|
460
|
-
def invoked_sync?(action)
|
461
|
-
|
488
|
+
def invoked_sync?(action, flag = nil)
|
489
|
+
action = workspace.task_name(action)
|
490
|
+
return true if !flag.nil? || workspace.series.sync?("#{action}:sync")
|
462
491
|
|
463
492
|
check = lambda do |val|
|
464
493
|
if invoked?(val)
|
@@ -4,8 +4,6 @@ module Squared
|
|
4
4
|
module Workspace
|
5
5
|
module Project
|
6
6
|
class Git < Base
|
7
|
-
include Format
|
8
|
-
|
9
7
|
OPT_PULL = %w[all tags prune ff-only autostash dry-run].freeze
|
10
8
|
OPT_FETCH = %w[tags prune prune-tags depth=n dry-run].freeze
|
11
9
|
private_constant :OPT_PULL, :OPT_FETCH
|
@@ -13,23 +11,26 @@ module Squared
|
|
13
11
|
class << self
|
14
12
|
include ::Rake::DSL
|
15
13
|
|
16
|
-
def populate(
|
17
|
-
return if
|
14
|
+
def populate(ws, **)
|
15
|
+
return if ws.series.pull.empty?
|
18
16
|
|
19
|
-
desc 'all[git?=rebase|stash]'
|
20
|
-
task 'all', [:git] do |_, args|
|
21
|
-
sync =
|
22
|
-
|
17
|
+
desc ws.task_name('all[git?=rebase|stash]', desc: true)
|
18
|
+
task ws.task_name('all'), [:git] do |_, args|
|
19
|
+
sync = lambda do |key|
|
20
|
+
key = ws.task_name(key)
|
21
|
+
ws.task_defined?(ret = "#{key}:sync") ? ret : key
|
22
|
+
end
|
23
|
+
cmd = [case args.git
|
23
24
|
when 'rebase'
|
24
|
-
sync.(
|
25
|
+
sync.('rebase')
|
25
26
|
when 'stash'
|
26
|
-
invoke
|
27
|
-
sync.(
|
27
|
+
invoke(sync.('stash'), exception: ws.exception, warning: ws.warning)
|
28
|
+
sync.('pull')
|
28
29
|
else
|
29
|
-
sync.(
|
30
|
-
end
|
31
|
-
|
32
|
-
Common::Task.invoke(
|
30
|
+
sync.('pull')
|
31
|
+
end]
|
32
|
+
cmd << ws.task_name(ws.dev? && ws.series.some?(:refresh) ? 'refresh' : 'build')
|
33
|
+
Common::Task.invoke(cmd, exception: ws.exception, warning: ws.warning)
|
33
34
|
end
|
34
35
|
end
|
35
36
|
|
@@ -60,9 +61,18 @@ module Squared
|
|
60
61
|
rev: %i[commit branch]
|
61
62
|
}.freeze
|
62
63
|
|
64
|
+
def initialize(*, **)
|
65
|
+
super
|
66
|
+
initialize_ref(Git.ref)
|
67
|
+
end
|
68
|
+
|
69
|
+
def ref
|
70
|
+
Git.ref
|
71
|
+
end
|
72
|
+
|
63
73
|
def populate(*)
|
64
74
|
super
|
65
|
-
return unless gitdir.exist? &&
|
75
|
+
return unless gitdir.exist? && ref?(Git.ref)
|
66
76
|
|
67
77
|
namespace name do
|
68
78
|
@@tasks[Git.ref].each do |action, flags|
|
@@ -121,7 +131,7 @@ module Squared
|
|
121
131
|
desc format_desc(action, flag, 'index?=0,pathspec*')
|
122
132
|
task flag, [:pathspec] do |_, args|
|
123
133
|
files = args.to_a
|
124
|
-
index = /^\d+$/.match?(files.first) && !
|
134
|
+
index = /^\d+$/.match?(files.first) && !git_option('index') ? files.shift.to_i : 0
|
125
135
|
diff(flag, files, index: index)
|
126
136
|
end
|
127
137
|
when :cached
|
@@ -202,12 +212,12 @@ module Squared
|
|
202
212
|
cmd = git_session 'pull'
|
203
213
|
if flag == :'no-rebase'
|
204
214
|
cmd << '--no-rebase'
|
205
|
-
elsif flag == :rebase ||
|
215
|
+
elsif flag == :rebase || git_option('rebase')
|
206
216
|
cmd << '--rebase'
|
207
217
|
end
|
208
218
|
if flag == :'no-commit'
|
209
219
|
cmd << '--no-commit'
|
210
|
-
elsif flag == :commit ||
|
220
|
+
elsif flag == :commit || git_option('commit')
|
211
221
|
cmd << '--commit'
|
212
222
|
end
|
213
223
|
append_pull opts, OPT_PULL, flag
|
@@ -220,28 +230,28 @@ module Squared
|
|
220
230
|
|
221
231
|
def fetch(flag = nil, opts: [])
|
222
232
|
cmd = git_session 'fetch'
|
223
|
-
cmd << '--all' if flag == :all ||
|
233
|
+
cmd << '--all' if flag == :all || git_option('all')
|
224
234
|
append_pull opts, OPT_FETCH, flag
|
225
235
|
source(sync: invoked_sync?('fetch', flag), stderr: true, exception: !workspace.series.multiple?)
|
226
236
|
end
|
227
237
|
|
228
|
-
def stash(flag =
|
229
|
-
cmd = git_session 'stash', flag.to_s
|
238
|
+
def stash(flag = nil, files = [], commit: nil)
|
239
|
+
cmd = git_session 'stash', (flag || 'push').to_s
|
230
240
|
case flag
|
231
241
|
when :apply, :pop
|
232
|
-
cmd << '--index' if
|
242
|
+
cmd << '--index' if git_option('index')
|
233
243
|
cmd << commit
|
234
244
|
else
|
235
245
|
append_option %w[all staged include-untracked]
|
236
|
-
append_message
|
246
|
+
append_message git_option('message', 'm', zero: false)
|
237
247
|
append_pathspec files
|
238
248
|
end
|
239
249
|
source(sync: invoked_sync?('stash', flag), exception: workspace.exception)
|
240
250
|
end
|
241
251
|
|
242
252
|
def status
|
243
|
-
cmd = git_session 'status',
|
244
|
-
if (val =
|
253
|
+
cmd = git_session 'status', git_option('long') ? '--long' : '--short'
|
254
|
+
if (val = git_option('ignore-submodules'))
|
245
255
|
cmd << "--ignore-submodules=#{case val
|
246
256
|
when '0', 'none'
|
247
257
|
'none'
|
@@ -259,12 +269,15 @@ module Squared
|
|
259
269
|
print_item banner
|
260
270
|
banner = nil
|
261
271
|
end
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
272
|
+
sub = if verbose?
|
273
|
+
[
|
274
|
+
{ pat: /^(.)([A-Z])(.+)$/, styles: :red, index: 2 },
|
275
|
+
{ pat: /^([A-Z])(.+)$/, styles: :green },
|
276
|
+
{ pat: /^(\?\?)(.+)$/, styles: :red },
|
277
|
+
{ pat: /^(## )(.+)(\.{3})(.+)$/, styles: [nil, :green, nil, :red], index: -1 }
|
278
|
+
]
|
279
|
+
end
|
280
|
+
ret = write_lines(out, banner: banner, sub: sub)
|
268
281
|
list_result(ret, 'files', action: 'modified')
|
269
282
|
end
|
270
283
|
|
@@ -282,7 +295,7 @@ module Squared
|
|
282
295
|
append_submodules flag
|
283
296
|
else
|
284
297
|
cmd << '--mixed'
|
285
|
-
cmd << '--no-refresh' if
|
298
|
+
cmd << '--no-refresh' if git_option('refresh', equals: '0')
|
286
299
|
end
|
287
300
|
append_commit ref
|
288
301
|
end
|
@@ -293,10 +306,10 @@ module Squared
|
|
293
306
|
cmd = git_session 'checkout'
|
294
307
|
case flag
|
295
308
|
when :branch
|
296
|
-
cmd << '--detach' if detach == 'd' ||
|
309
|
+
cmd << '--detach' if detach == 'd' || git_option('detach')
|
297
310
|
if create
|
298
311
|
cmd << "-#{create}" << branch
|
299
|
-
if (val =
|
312
|
+
if (val = git_option('start-point'))
|
300
313
|
cmd << val
|
301
314
|
end
|
302
315
|
else
|
@@ -351,22 +364,22 @@ module Squared
|
|
351
364
|
sha = nil
|
352
365
|
end
|
353
366
|
end
|
354
|
-
if (val =
|
367
|
+
if (val = git_option('unified')).to_i > 0
|
355
368
|
cmd << "--unified=#{val}"
|
356
369
|
end
|
357
370
|
append_nocolor
|
358
371
|
case flag
|
359
372
|
when :cached
|
360
373
|
cmd << '--cached'
|
361
|
-
cmd << '--merge-base' if
|
374
|
+
cmd << '--merge-base' if git_option('merge-base')
|
362
375
|
when :branch
|
363
376
|
cmd << branch
|
364
377
|
when :files
|
365
378
|
cmd << '--no-index'
|
366
379
|
else
|
367
|
-
if (val =
|
380
|
+
if (val = git_option('index')) || index > 0
|
368
381
|
cmd << "HEAD~#{val || index}"
|
369
|
-
elsif sha &&
|
382
|
+
elsif sha && git_option('merge-base')
|
370
383
|
cmd << '--merge-base'
|
371
384
|
end
|
372
385
|
end
|
@@ -376,7 +389,7 @@ module Squared
|
|
376
389
|
end
|
377
390
|
|
378
391
|
def commit(flag, files = [], message: nil, pass: false)
|
379
|
-
message ||=
|
392
|
+
message ||= git_option('message', 'm', zero: false)
|
380
393
|
amend = flag.to_s.start_with?('amend')
|
381
394
|
if !message && !amend
|
382
395
|
return if pass
|
@@ -391,7 +404,7 @@ module Squared
|
|
391
404
|
"-- #{files.join(' ')}"
|
392
405
|
end
|
393
406
|
if !push?
|
394
|
-
source('git branch -vv --list', io: true, banner: false)
|
407
|
+
source('git branch -vv --list', io: true, banner: false).first.each do |val|
|
395
408
|
origin = %r{^\* [^\[]+(?<= )\[([\w.-/]+?)/([\w.-]+)\] }.match(val)
|
396
409
|
next unless origin
|
397
410
|
|
@@ -403,7 +416,7 @@ module Squared
|
|
403
416
|
raise_error('commit', 'work tree is not usable') unless push?
|
404
417
|
|
405
418
|
cmd = git_session 'commit'
|
406
|
-
cmd << '--dry-run' if
|
419
|
+
cmd << '--dry-run' if git_option('dry-run')
|
407
420
|
if amend
|
408
421
|
cmd << '--amend'
|
409
422
|
else
|
@@ -411,7 +424,7 @@ module Squared
|
|
411
424
|
end
|
412
425
|
if message
|
413
426
|
append_message message
|
414
|
-
elsif flag == :'amend-orig' ||
|
427
|
+
elsif flag == :'amend-orig' || git_option('no-edit')
|
415
428
|
cmd << '--no-edit'
|
416
429
|
end
|
417
430
|
a = ['git add --verbose']
|
@@ -440,14 +453,14 @@ module Squared
|
|
440
453
|
source(stdout: true)
|
441
454
|
end
|
442
455
|
|
443
|
-
|
456
|
+
private
|
444
457
|
|
445
458
|
def source(cmd = @session, exception: true, banner: true, io: false, sync: true, stdout: false, stderr: false)
|
446
459
|
cmd = close_session(cmd)
|
447
460
|
log.info cmd
|
461
|
+
banner = format_banner(cmd.gsub(File.join(path, ''), ''), banner: banner, multiple: true)
|
462
|
+
cmd = cmd.sub(/^git\b/, "git --work-tree #{shell_quote(path)} --git-dir #{shell_quote(gitdir)}")
|
448
463
|
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
464
|
if io
|
452
465
|
[IO.popen(cmd), banner]
|
453
466
|
elsif pipe? ? sync : stdout
|
@@ -480,7 +493,7 @@ module Squared
|
|
480
493
|
log.error e
|
481
494
|
raise if exception
|
482
495
|
|
483
|
-
warn e
|
496
|
+
warn e if workspace.warning
|
484
497
|
end
|
485
498
|
end
|
486
499
|
|
@@ -526,14 +539,6 @@ module Squared
|
|
526
539
|
files.map { |val| val == '.' ? '.' : shell_quote(base_path(val.strip)) }
|
527
540
|
end
|
528
541
|
|
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
542
|
def append_pull(opts, list, flag = nil)
|
538
543
|
append_submodules flag
|
539
544
|
opts.each do |opt|
|
@@ -551,7 +556,7 @@ module Squared
|
|
551
556
|
end
|
552
557
|
|
553
558
|
def append_pathspec(files = [], expect: false, pass: false)
|
554
|
-
if files.empty? && (val =
|
559
|
+
if files.empty? && (val = git_option('pathspec'))
|
555
560
|
files = split_escape(val)
|
556
561
|
end
|
557
562
|
files = source_path(files, pass: pass)
|
@@ -567,30 +572,30 @@ module Squared
|
|
567
572
|
end
|
568
573
|
|
569
574
|
def append_head
|
570
|
-
@session << (
|
575
|
+
@session << (git_option('head') || git_option('tree-ish'))
|
571
576
|
end
|
572
577
|
|
573
578
|
def append_ours
|
574
|
-
if
|
579
|
+
if git_option('ours')
|
575
580
|
@session << '--ours'
|
576
|
-
elsif
|
581
|
+
elsif git_option('theirs')
|
577
582
|
@session << '--theirs'
|
578
583
|
end
|
579
584
|
end
|
580
585
|
|
581
586
|
def append_submodules(flag = nil)
|
582
|
-
if
|
587
|
+
if git_option('recurse-submodules', equals: '0')
|
583
588
|
@session << '--no-recurse-submodules'
|
584
|
-
elsif flag == :submodules ||
|
589
|
+
elsif flag == :submodules || git_option('recurse-submodules')
|
585
590
|
@session << '--recurse-submodules'
|
586
591
|
end
|
587
592
|
end
|
588
593
|
|
589
594
|
def append_option(list)
|
590
|
-
list.each { |val| @session << "--#{val}" if
|
595
|
+
list.each { |val| @session << "--#{val}" if git_option(val) }
|
591
596
|
end
|
592
597
|
|
593
|
-
def
|
598
|
+
def git_option(*args, equals: nil, zero: true)
|
594
599
|
for val in args
|
595
600
|
break if (ret = ENV["GIT_#{val.gsub(/\W/, '_').upcase}"])
|
596
601
|
end
|
@@ -606,11 +611,13 @@ module Squared
|
|
606
611
|
end
|
607
612
|
|
608
613
|
def gitdir
|
609
|
-
|
614
|
+
base_path('.git')
|
610
615
|
end
|
611
616
|
|
612
|
-
def
|
613
|
-
|
617
|
+
def source_path?(val)
|
618
|
+
return val.to_s.start_with?(File.join(path, '').to_s) if Pathname.new(val).absolute?
|
619
|
+
|
620
|
+
!val.match?(%r{^\.\.[/\\]})
|
614
621
|
end
|
615
622
|
|
616
623
|
def push?
|