squared 0.0.10 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -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