squared 0.0.10 → 0.0.12

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.
@@ -12,58 +12,63 @@ module Squared
12
12
  include ::Rake::DSL
13
13
 
14
14
  def populate(ws, **)
15
- return if ws.series.pull.empty?
15
+ return if ws.series[:pull].empty?
16
16
 
17
+ name = ws.task_name('all')
17
18
  desc ws.task_name('all[git?=rebase|stash]', desc: true)
18
- task ws.task_name('all'), [:git] do |_, args|
19
+ task name, [:git] do |_, args|
19
20
  sync = lambda do |key|
20
21
  key = ws.task_name(key)
21
- ws.task_defined?(ret = "#{key}:sync") ? ret : key
22
+ ws.task_defined?(ret = ws.task_join(key, 'sync')) ? ret : key
22
23
  end
23
24
  cmd = [case args.git
24
25
  when 'rebase'
25
26
  sync.('rebase')
26
27
  when 'stash'
27
- invoke(sync.('stash'), exception: ws.exception, warning: ws.warning)
28
+ invoke(sync.('stash'), **ws.invokeargs)
28
29
  sync.('pull')
29
30
  else
30
31
  sync.('pull')
31
32
  end]
32
- cmd << ws.task_name(ws.dev?(global: true) && ws.series.some?(:refresh) ? 'refresh' : 'build')
33
- Common::Task.invoke(cmd, exception: ws.exception, warning: ws.warning)
33
+ cmd << ws.task_name('build')
34
+ Common::Utils.task_invoke(*cmd, **ws.invokeargs)
34
35
  end
36
+ ws.series.sync << name
37
+ ws.series.multiple << name
35
38
  end
36
39
 
37
40
  def tasks
38
41
  %i[pull rebase fetch stash status].freeze
39
42
  end
40
43
 
41
- def is_a?(val)
42
- if (val = as_path(val))
43
- val.join('.git').directory?
44
- else
45
- super
46
- end
44
+ def batchargs
45
+ [ref, { 'pull-s': %i[stash pull], 'rebase-s': %i[stash rebase] }]
46
+ end
47
+
48
+ def config?(val)
49
+ return false unless (val = as_path(val))
50
+
51
+ val.join('.git').directory?
47
52
  end
48
53
  end
49
54
 
50
55
  @@tasks[ref] = {
51
- checkout: %i[branch detach force merge],
52
- commit: %i[add amend amend-orig all no-all],
53
- diff: %i[head cached branch files],
54
- fetch: %i[all submodules unshallow],
55
- files: %i[cached modified deleted others],
56
- pull: %i[head rebase no-rebase commit no-commit submodules],
57
- stash: %i[push pop apply list clear],
58
- refs: %i[heads tags],
59
- reset: %i[head soft mixed hard merge keep submodules],
60
- restore: %i[worktree staged overlay],
61
- rev: %i[commit branch]
56
+ checkout: %i[branch detach force merge].freeze,
57
+ commit: %i[add amend amend-orig all no-all].freeze,
58
+ diff: %i[head cached branch files].freeze,
59
+ fetch: %i[all submodules unshallow].freeze,
60
+ files: %i[cached modified deleted others].freeze,
61
+ pull: %i[head rebase no-rebase commit no-commit submodules].freeze,
62
+ stash: %i[push pop apply list clear].freeze,
63
+ refs: %i[heads tags].freeze,
64
+ reset: %i[head soft mixed hard merge keep submodules].freeze,
65
+ restore: %i[worktree staged overlay].freeze,
66
+ rev: %i[commit branch].freeze
62
67
  }.freeze
63
68
 
64
69
  def initialize(*, **)
65
70
  super
66
- initialize_ref(Git.ref) if gitdir.exist?
71
+ initialize_ref(Git.ref) if gitpath.exist?
67
72
  end
68
73
 
69
74
  def ref
@@ -93,8 +98,7 @@ module Squared
93
98
  else
94
99
  desc format_desc(action, flag, 'pathspec+')
95
100
  task flag, [:pathspec] do |_, args|
96
- files = args.to_a
97
- guard_params(action, flag, args: files)
101
+ files = guard_params(action, flag, args: args.to_a)
98
102
  __send__(action, flag, files)
99
103
  end
100
104
  end
@@ -126,11 +130,7 @@ module Squared
126
130
  desc format_desc(action, flag, 'index?=0,pathspec*')
127
131
  task flag, [:pathspec] do |_, args|
128
132
  files = args.to_a
129
- diff(flag, files, index: if /^\d+$/.match?(files.first) && !git_option('index')
130
- files.shift.to_i
131
- else
132
- 0
133
- end)
133
+ diff(flag, files, index: /^\d+$/.match?(files[0]) && !option('index') ? files.shift.to_i : 0)
134
134
  end
135
135
  when :cached
136
136
  desc format_desc(action, flag, 'pathspec*')
@@ -140,15 +140,15 @@ module Squared
140
140
  when :branch
141
141
  desc format_desc(action, flag, 'name,pathspec*')
142
142
  task flag, [:name, :pathspec] do |_, args|
143
- guard_params(action, flag, args: args, key: :name)
144
- diff(flag, args.to_a[1..-1], branch: args.name)
143
+ branch = guard_params(action, flag, args: args, key: :name)
144
+ diff(flag, args.to_a[1..-1] || [], branch: branch)
145
145
  end
146
146
  when :files
147
147
  desc format_desc(action, flag, 'path1,path2')
148
148
  task flag, [:path1, :path2] do |_, args|
149
- guard_params(action, flag, args: args, key: :path1)
150
- guard_params(action, flag, args: args, key: :path2)
151
- diff(flag, [args.path1, args.path2])
149
+ path1 = guard_params(action, flag, args: args, key: :path1)
150
+ path2 = guard_params(action, flag, args: args, key: :path2)
151
+ diff(flag, [path1, path2])
152
152
  end
153
153
  end
154
154
  when :checkout
@@ -156,7 +156,7 @@ module Squared
156
156
  when :branch
157
157
  desc format_desc(action, flag, 'name,create?=b|B,commit?,detach?=d')
158
158
  task flag, [:name, :create, :commit, :detach] do |_, args|
159
- guard_params(action, flag, args: args, key: :name)
159
+ branch = guard_params(action, flag, args: args, key: :name)
160
160
  create = args.create
161
161
  if args.commit == 'd'
162
162
  detach = 'd'
@@ -174,7 +174,7 @@ module Squared
174
174
  commit = args.commit
175
175
  end
176
176
  guard_params(action, flag, args: { create: create }, key: :create, pat: /^b$/i) if create
177
- checkout(flag, branch: args.name, create: create, commit: commit, detach: detach)
177
+ checkout(flag, branch: branch, create: create, commit: commit, detach: detach)
178
178
  end
179
179
  when :detach
180
180
  desc format_desc(action, flag, 'branch/commit?')
@@ -189,10 +189,9 @@ module Squared
189
189
  end
190
190
  when :reset
191
191
  if flag == :head
192
- desc format_desc(action, flag, 'ref?=HEAD,pathspec+')
192
+ desc format_desc(action, flag, 'ref,pathspec+')
193
193
  task flag, [:ref, :pathspec] do |_, args|
194
- files = args.to_a[1..-1]
195
- guard_params(action, flag, args: files)
194
+ files = guard_params(action, flag, args: args.to_a[1..-1] || [])
196
195
  reset(flag, files, ref: args.ref)
197
196
  end
198
197
  else
@@ -210,18 +209,18 @@ module Squared
210
209
 
211
210
  def pull(flag = nil, sync: invoked_sync?('pull', flag), opts: [])
212
211
  cmd = git_session 'pull'
213
- if flag == :'no-rebase'
212
+ if flag == :'no-rebase' || option('rebase', equals: '0')
214
213
  cmd << '--no-rebase'
215
- elsif flag == :rebase || git_option('rebase')
214
+ elsif flag == :rebase || option('rebase')
216
215
  cmd << '--rebase'
217
216
  end
218
- if flag == :'no-commit'
217
+ if flag == :'no-commit' || option('commit', equals: '0')
219
218
  cmd << '--no-commit'
220
- elsif flag == :commit || git_option('commit')
219
+ elsif flag == :commit || option('commit')
221
220
  cmd << '--commit'
222
221
  end
223
222
  append_pull opts, OPT_PULL, flag
224
- source(sync: sync, **gitthread)
223
+ source(sync: sync, **threadargs)
225
224
  end
226
225
 
227
226
  def rebase
@@ -230,28 +229,28 @@ module Squared
230
229
 
231
230
  def fetch(flag = nil, opts: [])
232
231
  cmd = git_session 'fetch'
233
- cmd << '--all' if flag == :all || git_option('all')
232
+ cmd << '--all' if flag == :all || option('all')
234
233
  append_pull opts, OPT_FETCH, flag
235
- source(sync: invoked_sync?('fetch', flag), **gitthread)
234
+ source(sync: invoked_sync?('fetch', flag), **threadargs)
236
235
  end
237
236
 
238
237
  def stash(flag = nil, files = [], commit: nil)
239
- cmd = git_session 'stash', (flag || 'push').to_s
238
+ cmd = git_session 'stash', flag || 'push'
240
239
  case flag
241
240
  when :apply, :pop
242
- cmd << '--index' if git_option('index')
241
+ cmd << '--index' if option('index')
243
242
  cmd << commit
244
243
  else
245
244
  append_option %w[all staged include-untracked].freeze
246
- append_message git_option('message', 'm', zero: false)
245
+ append_message option('message', 'm', ignore: false)
247
246
  append_pathspec files
248
247
  end
249
- source(sync: invoked_sync?('stash', flag), **gitthread)
248
+ source(sync: invoked_sync?('stash', flag), **threadargs)
250
249
  end
251
250
 
252
251
  def status
253
- cmd = git_session 'status', git_option('long') ? '--long' : '--short'
254
- if (val = git_option('ignore-submodules'))
252
+ cmd = git_session 'status', option('long') ? '--long' : '--short'
253
+ if (val = option('ignore-submodules', ignore: false))
255
254
  cmd << "--ignore-submodules=#{case val
256
255
  when '0', 'none'
257
256
  'none'
@@ -269,15 +268,15 @@ module Squared
269
268
  print_item banner
270
269
  banner = nil
271
270
  end
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)
271
+ ret = write_lines(out, banner: banner, sub: if verbose
272
+ [
273
+ { pat: /^(.)([A-Z])(.+)$/, styles: :red, index: 2 },
274
+ { pat: /^([A-Z])(.+)$/, styles: :green },
275
+ { pat: /^(\?\?)(.+)$/, styles: :red },
276
+ { pat: /^(## )(.+)(\.{3})(.+)$/,
277
+ styles: [nil, :green, nil, :red], index: -1 }
278
+ ]
279
+ end)
281
280
  list_result(ret, 'files', action: 'modified')
282
281
  end
283
282
 
@@ -294,7 +293,7 @@ module Squared
294
293
  append_submodules flag
295
294
  else
296
295
  cmd << '--mixed'
297
- cmd << '--no-refresh' if git_option('refresh', equals: '0')
296
+ cmd << '--no-refresh' if option('refresh', equals: '0')
298
297
  end
299
298
  append_commit ref
300
299
  end
@@ -305,10 +304,10 @@ module Squared
305
304
  cmd = git_session 'checkout'
306
305
  case flag
307
306
  when :branch
308
- cmd << '--detach' if detach == 'd' || git_option('detach')
307
+ cmd << '--detach' if detach == 'd' || option('detach')
309
308
  if create
310
309
  cmd << "-#{create}" << branch
311
- if (val = git_option('start-point'))
310
+ if (val = option('start-point'))
312
311
  cmd << val
313
312
  end
314
313
  else
@@ -362,32 +361,32 @@ module Squared
362
361
  sha = nil
363
362
  end
364
363
  end
365
- if (val = git_option('unified')).to_i > 0
364
+ if (val = option('unified')).to_i > 0
366
365
  cmd << "--unified=#{val}"
367
366
  end
368
367
  append_nocolor
369
368
  case flag
370
369
  when :cached
371
370
  cmd << '--cached'
372
- cmd << '--merge-base' if git_option('merge-base')
371
+ cmd << '--merge-base' if option('merge-base')
373
372
  when :branch
374
373
  cmd << branch
375
374
  when :files
376
375
  cmd << '--no-index'
377
376
  else
378
- if (val = git_option('index')) || index > 0
377
+ if (val = option('index')) || index > 0
379
378
  cmd << "HEAD~#{val || index}"
380
- elsif sha && git_option('merge-base')
379
+ elsif sha && option('merge-base')
381
380
  cmd << '--merge-base'
382
381
  end
383
382
  end
384
383
  cmd << sha
385
- append_pathspec(files, pass: flag == :files)
384
+ append_pathspec(files, parent: flag == :files)
386
385
  source(exception: cmd.include?('--exit-code'))
387
386
  end
388
387
 
389
388
  def commit(flag, files = [], message: nil, pass: false)
390
- message ||= git_option('message', 'm', zero: false)
389
+ message ||= option('message', 'm', prefix: 'git', ignore: false)
391
390
  amend = flag.to_s.start_with?('amend')
392
391
  if !message && !amend
393
392
  return if pass
@@ -397,8 +396,7 @@ module Squared
397
396
  pathspec = if flag == :all || (amend && files.size == 1 && files.first == '*')
398
397
  '--all'
399
398
  else
400
- files = source_path(as_a(files))
401
- raise_error('commit', 'pathspec', hint: 'missing') if files.empty?
399
+ raise_error('commit', 'pathspec', hint: 'missing') if (files = projectmap(files)).empty?
402
400
  "-- #{files.join(' ')}"
403
401
  end
404
402
  unless push?
@@ -413,7 +411,7 @@ module Squared
413
411
  end
414
412
  raise_error('commit', 'work tree is not usable') unless push?
415
413
  cmd = git_session 'commit'
416
- cmd << '--dry-run' if git_option('dry-run')
414
+ cmd << '--dry-run' if option('dry-run')
417
415
  if amend
418
416
  cmd << '--amend'
419
417
  else
@@ -421,7 +419,7 @@ module Squared
421
419
  end
422
420
  if message
423
421
  append_message message
424
- elsif flag == :'amend-orig' || git_option('no-edit')
422
+ elsif flag == :'amend-orig' || option('no-edit')
425
423
  cmd << '--no-edit'
426
424
  end
427
425
  a = ['git add --verbose']
@@ -448,11 +446,11 @@ module Squared
448
446
 
449
447
  private
450
448
 
451
- def source(cmd = @session, exception: true, banner: true, io: false, sync: true, stdout: false, stderr: false)
452
- cmd = close_session(cmd)
449
+ def source(cmd = @session, exception: true, io: false, sync: true, stdout: false, stderr: false, banner: true)
450
+ cmd = session_done(cmd)
453
451
  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)}")
452
+ banner = format_banner(cmd.gsub(File.join(path, ''), ''), banner: banner)
453
+ cmd = cmd.sub(/^git\b/, "git --work-tree #{shell_quote(path)} --git-dir #{shell_quote(gitpath)}")
456
454
  begin
457
455
  if io
458
456
  [IO.popen(cmd), banner]
@@ -527,11 +525,6 @@ module Squared
527
525
  end
528
526
  end
529
527
 
530
- def source_path(files, pass: false)
531
- files = files.select { |val| source_path?(val) } unless pass
532
- files.map { |val| val == '.' ? '.' : shell_quote(base_path(val.strip)) }
533
- end
534
-
535
528
  def append_pull(opts, list, flag = nil)
536
529
  append_submodules flag
537
530
  opts.each do |opt|
@@ -545,18 +538,18 @@ module Squared
545
538
 
546
539
  def append_commit(val)
547
540
  val = val.to_s.strip
548
- val.empty? ? 'HEAD' : val
541
+ @session << (val.empty? ? 'HEAD' : val)
549
542
  end
550
543
 
551
- def append_pathspec(files = [], expect: false, pass: false)
552
- if files.empty? && (val = git_option('pathspec'))
544
+ def append_pathspec(files = [], expect: false, parent: false)
545
+ if files.empty? && (val = option('pathspec'))
553
546
  files = split_escape(val)
554
547
  end
555
- files = source_path(files, pass: pass)
548
+ files = projectmap(files, parent: parent)
556
549
  if !files.empty?
557
550
  @session << "-- #{files.join(' ')}"
558
551
  elsif expect
559
- raise_error(pass ? 'pathspec not present' : 'pathspec not within worktree', hint: 'invalid')
552
+ raise_error(parent ? 'pathspec not present' : 'pathspec not within worktree', hint: 'invalid')
560
553
  end
561
554
  end
562
555
 
@@ -565,50 +558,35 @@ module Squared
565
558
  end
566
559
 
567
560
  def append_head
568
- @session << (git_option('head') || git_option('tree-ish'))
561
+ @session << (option('head') || option('tree-ish'))
569
562
  end
570
563
 
571
564
  def append_ours
572
- if git_option('ours')
565
+ if option('ours')
573
566
  @session << '--ours'
574
- elsif git_option('theirs')
567
+ elsif option('theirs')
575
568
  @session << '--theirs'
576
569
  end
577
570
  end
578
571
 
579
572
  def append_submodules(flag = nil)
580
- if git_option('recurse-submodules', equals: '0')
573
+ if option('recurse-submodules', equals: '0')
581
574
  @session << '--no-recurse-submodules'
582
- elsif flag == :submodules || git_option('recurse-submodules')
575
+ elsif flag == :submodules || option('recurse-submodules')
583
576
  @session << '--recurse-submodules'
584
577
  end
585
578
  end
586
579
 
587
580
  def append_option(list)
588
- list.each { |val| @session << "--#{val}" if git_option(val) }
589
- end
590
-
591
- def git_option(*args, equals: nil, zero: true)
592
- for val in args
593
- break if (ret = ENV["GIT_#{val.gsub(/\W/, '_').upcase}"])
594
- end
595
- if !equals.nil?
596
- ret == equals.to_s
597
- elsif !ret.nil? && !ret.empty? && !(ret == '0' && zero)
598
- ret
599
- end
581
+ list.each { |val| @session << "--#{val}" if option(val) }
600
582
  end
601
583
 
602
584
  def git_session(*cmd)
603
585
  session('git', *cmd)
604
586
  end
605
587
 
606
- def gitthread
607
- { stderr: true, exception: !workspace.series.multiple? }
608
- end
609
-
610
- def gitdir
611
- base_path('.git')
588
+ def gitpath
589
+ basepath('.git')
612
590
  end
613
591
 
614
592
  def push?
@@ -618,7 +596,13 @@ module Squared
618
596
  def dry_run?
619
597
  @session.include?('--dry-run')
620
598
  end
599
+
600
+ def threadargs
601
+ { stderr: true, exception: exception || !workspace.series.multiple? }
602
+ end
621
603
  end
604
+
605
+ Application.implement Git
622
606
  end
623
607
  end
624
608
  end