squared 0.0.11 → 0.0.12

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,12 +15,15 @@ module Squared
15
15
  class << self
16
16
  def populate(*); end
17
17
  def batchargs(*); end
18
- def aliasargs(*); end
19
18
 
20
19
  def tasks
21
20
  %i[outdated].freeze
22
21
  end
23
22
 
23
+ def bannerargs
24
+ %i[dependfile].freeze
25
+ end
26
+
24
27
  def config?(val)
25
28
  return false unless (val = as_path(val))
26
29
 
@@ -38,8 +41,6 @@ module Squared
38
41
  rake: nil
39
42
  }.freeze
40
43
 
41
- attr_reader :gemfile
42
-
43
44
  def initialize(*, version: nil, autodetect: false, **kwargs)
44
45
  super
45
46
  if @pass.include?(Ruby.ref)
@@ -51,8 +52,8 @@ module Squared
51
52
  end
52
53
  @version = env('BUILD', version, suffix: 'VERSION')
53
54
  @autodetect = autodetect
54
- index = GEMFILE.index { |file| base_path(file).exist? } || 0
55
- @gemfile = base_path(GEMFILE[index])
55
+ @dependindex = GEMFILE.index { |file| basepath(file).exist? }
56
+ @dependfile = basepath(GEMFILE[@dependindex || 0])
56
57
  return if !@output[0].nil? || !@copy.nil? || @version || @autodetect || (file = rakefile).nil?
57
58
 
58
59
  begin
@@ -89,9 +90,25 @@ module Squared
89
90
  when :rake
90
91
  next unless rakefile
91
92
 
92
- desc format_desc(action, nil, 'command*')
93
+ desc format_desc(action, nil, 'command*|^index,args*|#,pattern*')
93
94
  task action, [:command] do |_, args|
94
- rake(*args.to_a)
95
+ if args.command == '#'
96
+ format_list(read_rakefile, 'rake[^N]', 'tasks', grep: args.extras, from: rakefile.to_s,
97
+ each: ->(val) { val[0] + val[1].to_s })
98
+ elsif (data = indexdata(args.command))
99
+ n, opts = data
100
+ list = read_rakefile
101
+ if (item = list[n - 1])
102
+ cmd = opts ? "#{opts} #{item.first}" : item.first
103
+ elsif exception
104
+ indexerror n, list
105
+ else
106
+ next log.warn "rake task #{n} of #{list.size} (out of range)"
107
+ end
108
+ rake(args.extras.empty? ? cmd : "#{cmd}[#{args.extras.join(',')}]")
109
+ else
110
+ rake(*args.to_a)
111
+ end
95
112
  end
96
113
  end
97
114
  else
@@ -103,16 +120,14 @@ module Squared
103
120
  when :gem
104
121
  desc format_desc(action, flag, 'name+')
105
122
  task flag, [:name] do |_, args|
106
- name = args.to_a
107
- guard_params(action, flag, args: name)
108
- depend(flag, opts: name)
123
+ opts = guard_params(action, flag, args: args.to_a)
124
+ depend(flag, opts: opts)
109
125
  end
110
126
  when :with, :without
111
127
  desc format_desc(action, flag, 'group+')
112
128
  task flag, [:group] do |_, args|
113
- group = args.to_a
114
- guard_params(action, flag, args: group)
115
- depend(flag, opts: group)
129
+ opts = guard_params(action, flag, args: args.to_a)
130
+ depend(flag, opts: opts)
116
131
  end
117
132
  else
118
133
  desc format_desc(action, flag, OPT_INSTALL)
@@ -130,9 +145,8 @@ module Squared
130
145
  when :gem
131
146
  desc format_desc(action, flag, 'name+')
132
147
  task flag, [:name] do |_, args|
133
- name = args.to_a
134
- guard_params(action, flag, args: name)
135
- pristine(flag, opts: name)
148
+ opts = guard_params(action, flag, args: args.to_a)
149
+ pristine(flag, opts: opts)
136
150
  end
137
151
  when :all
138
152
  desc format_desc(action, flag, 'skip*')
@@ -142,8 +156,8 @@ module Squared
142
156
  when :version
143
157
  desc format_desc(action, flag, 'version?')
144
158
  task flag, [:version] do |_, args|
145
- guard_params(action, flag, args: args, key: :version)
146
- pristine(flag, version: args.version)
159
+ version = guard_params(action, flag, args: args, key: :version)
160
+ pristine(flag, version: version)
147
161
  end
148
162
  end
149
163
  end
@@ -192,7 +206,7 @@ module Squared
192
206
  end
193
207
  end
194
208
 
195
- def copy(from: 'lib', glob: '**/*', into: @gemdir, override: false)
209
+ def copy(from: 'lib', glob: nil, into: @gemdir, override: false)
196
210
  if @copy && !override
197
211
  return super if runnable?(@copy)
198
212
 
@@ -204,11 +218,11 @@ module Squared
204
218
 
205
219
  dest = Pathname.new(into).realpath
206
220
  print_item unless @output[0]
207
- glob = as_a(glob)
221
+ glob = as_a(glob || '**/*')
208
222
  as_a(from).each_with_index do |val, i|
209
- a = base_path(val)
223
+ a = basepath(val)
210
224
  b = dest.join(val)
211
- c = glob[i] || '**/*'
225
+ c = glob[i] || glob[0]
212
226
  log.info "cp #{a.join(c)} #{b}"
213
227
  copy_d(a, b, glob: c, verbose: verbose)
214
228
  end
@@ -245,7 +259,7 @@ module Squared
245
259
  end
246
260
  minor_set = -> { styles[0] = cur[2] == lat[2] ? :yellow : :green }
247
261
  if data.empty?
248
- semmajor(cur, lat) ? major_set.() : minor_set.()
262
+ semmajor?(cur, lat) ? major_set.() : minor_set.()
249
263
  else
250
264
  data.each do |val|
251
265
  break unless (req = /(>=?|=|~>|!=|<=?) (#{Regexp.escape(val.join)})/.match(line))
@@ -253,10 +267,10 @@ module Squared
253
267
  v = semver(val).join
254
268
  case req[1]
255
269
  when '>', '>='
256
- semmajor(cur, lat) ? major_set.() : minor_set.()
270
+ semmajor?(cur, lat) ? major_set.() : minor_set.()
257
271
  when '<', '<='
258
272
  if c <= v
259
- if semmajor(cur, lat)
273
+ if semmajor?(cur, lat)
260
274
  major_set.()
261
275
  else
262
276
  styles[0] = :yellow
@@ -269,9 +283,9 @@ module Squared
269
283
  styles[1] = :bold
270
284
  end
271
285
  when '~>'
272
- if c < v && cur[0] == val[0] && !semmajor(cur, val)
286
+ if c < v && cur[0] == val[0] && !semmajor?(cur, val)
273
287
  styles[0] = :yellow
274
- elsif semmajor(val, lat)
288
+ elsif semmajor?(val, lat)
275
289
  styles[1] = :underline
276
290
  else
277
291
  styles[1] = :bold
@@ -307,7 +321,7 @@ module Squared
307
321
  end
308
322
  if found > 0
309
323
  begin
310
- if major == 0 && (data = /\b(?:source\s+(["'])(.+?)\1|remote:\s+(\S+))/.match(@gemfile.read))
324
+ if major == 0 && (data = /\b(?:source\s+(["'])(.+?)\1|remote:\s+(\S+))/.match(dependfile.read))
311
325
  status = (data[2] || data[3]).chomp('/')
312
326
  right = true
313
327
  end
@@ -349,28 +363,13 @@ module Squared
349
363
  end
350
364
 
351
365
  def rake(*cmd)
352
- run_s(cmd.empty? ? 'rake' : cmd.map { |val| "rake #{val}" })
353
- end
354
-
355
- def rakefile
356
- file = ::Rake::Application::DEFAULT_RAKEFILES.find { |val| base_path(val).exist? }
357
- base_path(file) if file
358
- end
359
-
360
- def variable_set(key, *val, **)
361
- case key
362
- when :gemfile
363
- @gemfile = base_path(val.first)
366
+ if cmd.empty?
367
+ run_s 'rake'
364
368
  else
365
- super
369
+ run_s(*cmd.map { |val| "rake #{val}" }, banner: false)
366
370
  end
367
371
  end
368
372
 
369
- def variables
370
- ret = super + VAR_SET
371
- ret.freeze
372
- end
373
-
374
373
  def depend?
375
374
  @depend != false && (!@depend.nil? || outdated?)
376
375
  end
@@ -410,11 +409,16 @@ module Squared
410
409
  end
411
410
 
412
411
  def outdated?
413
- gemfile.exist?
412
+ dependtype > 0
414
413
  end
415
414
 
416
415
  private
417
416
 
417
+ def variables
418
+ ret = super + VAR_SET
419
+ ret.freeze
420
+ end
421
+
418
422
  def run_rb(sync: true)
419
423
  run(sync: sync, banner: !@session.include?('--quiet'))
420
424
  end
@@ -437,7 +441,7 @@ module Squared
437
441
  def gem_session(*cmd)
438
442
  ret = session('gem', *cmd)
439
443
  if (val = option('config-file', ignore: false))
440
- ret << "--config-file=#{shell_escape(base_path(val).to_s, quote: true)}"
444
+ ret << "--config-file=#{shell_escape(basepath(val), quote: true)}"
441
445
  end
442
446
  ret << '--norc' if option('norc')
443
447
  ret
@@ -449,6 +453,23 @@ module Squared
449
453
  @session
450
454
  end
451
455
 
456
+ def read_rakefile
457
+ return @rakelist if @rakelist
458
+
459
+ ret = []
460
+ IO.popen("rake -C #{shell_quote(path)} -AT").each do |line|
461
+ next unless (data = /^rake ((?:[^\[: ]+:?)+)(\[[^\]]+\])?/.match(line))
462
+
463
+ ret << [data[1], data[2]]
464
+ end
465
+ @rakelist = ret
466
+ end
467
+
468
+ def rakefile
469
+ file = ::Rake::Application::DEFAULT_RAKEFILES.find { |val| basepath(val).exist? }
470
+ basepath(file) if file
471
+ end
472
+
452
473
  def gempath
453
474
  File.join('gems', "#{project}-#{@version}")
454
475
  end
@@ -5,11 +5,7 @@ require 'rexml/document'
5
5
  module Squared
6
6
  module Workspace
7
7
  module Repo
8
- include Common
9
- include Format
10
- include Prompt
11
- include System
12
- include Utils
8
+ include Common::Format
13
9
 
14
10
  class << self
15
11
  def read_manifest(path)
@@ -147,7 +143,7 @@ module Squared
147
143
  message(@prefix, 'repo', val.sub('{0}', 'opts*=force,rebase,detach,gc,no-update,no-fail'), ver, empty: true)
148
144
  end
149
145
 
150
- namespace task_name('repo') do |repo|
146
+ namespace(name = task_name('repo')) do |repo|
151
147
  desc status.('all[{0}]')
152
148
  task 'all', [:opts] do |_, args|
153
149
  parse_opts.(args)
@@ -161,10 +157,10 @@ module Squared
161
157
  end
162
158
  .each_value do |proj|
163
159
  proj.build(sync: true)
164
- next unless proj.has?('dev') && proj.copy?
160
+ next unless proj.dev? && proj.copy?
165
161
 
166
- if (ws = proj.workspace).task_defined?(target = ws.task_name(proj.name, 'copy'))
167
- Common::Task.invoke(target, **ws.invokeargs)
162
+ if (ws = proj.workspace).task_defined?(target = ws.task_name(task_join(proj.name, 'copy')))
163
+ task_invoke(target, **ws.invokeargs)
168
164
  else
169
165
  proj.copy(sync: true)
170
166
  end
@@ -190,20 +186,25 @@ module Squared
190
186
  cmd << '--fail-fast' if failfast
191
187
  puts if newline && stage != 'init'
192
188
  begin
193
- shell("repo sync #{cmd.join(' ')}", chdir: root, exception: failfast)
189
+ Common::System.shell("repo sync #{cmd.join(' ')}", chdir: root, exception: failfast)
194
190
  rescue StandardError => e
195
191
  emphasize(e, title: "rake stash #{task_name(task_join('repo', stage || 'sync'))}")
196
192
  raise
197
193
  end
198
194
  end
199
195
  end
196
+ series.sync.push(
197
+ task_join(name, 'all'),
198
+ task_join(name, 'init'),
199
+ task_join(name, 'sync')
200
+ )
200
201
  end
201
202
 
202
203
  def repo_confirm
203
204
  return false unless root.directory?
204
205
 
205
206
  path = sub_style(root, styles: theme[:inline])
206
- @repo_override = confirm(
207
+ @repo_override = Common::Prompt.confirm(
207
208
  "#{log_title(:warn)} \"#{path}\" is not empty. Continue with installation? [y/N] ",
208
209
  'N',
209
210
  timeout: env('REPO_TIMEOUT', 15, ignore: '0')
@@ -8,10 +8,10 @@ module Squared
8
8
  include ::Rake::DSL
9
9
  extend Forwardable
10
10
 
11
- TASK_BASE = %i[build depend doc test copy clean]
11
+ TASK_BASE = %i[build depend graph doc test copy clean]
12
12
  TASK_BATCH = {}
13
13
  TASK_EXTEND = {}
14
- TASK_KEYS = TASK_BASE.dup
14
+ TASK_KEYS = TASK_BASE.dup + TASK_BATCH.keys
15
15
  TASK_ALIAS = {}
16
16
  TASK_NAME = {}
17
17
  private_constant :TASK_BASE, :TASK_BATCH, :TASK_KEYS, :TASK_NAME, :TASK_EXTEND
@@ -22,23 +22,24 @@ module Squared
22
22
  (TASK_EXTEND[task] ||= []).push(obj)
23
23
  end
24
24
 
25
- def batch(ref, obj)
25
+ def batch(*args, obj)
26
26
  if obj.is_a?(::Hash)
27
27
  obj.each do |key, val|
28
28
  key_set key
29
29
  data = TASK_BATCH[key] ||= {}
30
- (data[ref] ||= []).concat(val)
30
+ args.each { |ref| (data[ref] ||= []).concat(val) }
31
31
  end
32
- elsif (data = TASK_BATCH[obj]) && data.delete(ref) && data.empty?
33
- TASK_KEYS.delete(obj)
32
+ elsif (data = TASK_BATCH[obj])
33
+ args.each { |ref| data.delete(ref) }
34
+ TASK_KEYS.delete(obj) if data.empty?
34
35
  end
35
36
  end
36
37
 
37
38
  def alias(ref, obj)
38
39
  if obj.is_a?(::Hash)
39
40
  obj.each { |key, val| (TASK_ALIAS[key] ||= {})[ref] = val }
40
- elsif (data = TASK_ALIAS[obj])
41
- data.delete(ref)
41
+ else
42
+ TASK_ALIAS[obj]&.delete(ref)
42
43
  end
43
44
  end
44
45
 
@@ -76,13 +77,13 @@ module Squared
76
77
 
77
78
  def populate(proj)
78
79
  group, parent, id = @session.values
80
+ ws = proj.workspace
79
81
  @data.each do |key, items|
80
- ws = proj.workspace
81
82
  next if (tasks = ws.task_resolve(proj, key)).empty?
82
83
 
83
84
  if (g = proj.group)
84
85
  id << g
85
- (group[:"#{key}:#{g}"] ||= []).push(*tasks)
86
+ (group[:"#{key}:#{g}"] ||= []).concat(tasks)
86
87
  else
87
88
  items.concat(tasks)
88
89
  end
@@ -90,10 +91,10 @@ module Squared
90
91
  desc ws.task_name(t = ws.task_join(proj.name, key), desc: true)
91
92
  task ws.task_name(t) => tasks
92
93
  end
93
- next unless (b = ws.find_base(proj)) && (name = b.ref.to_s) != g
94
+ next unless (b = ws.find_base(proj)) && (n = b.ref.to_s) != g
94
95
 
95
- id << name
96
- (parent[:"#{key}:#{name}"] ||= []).push(*tasks)
96
+ id << n
97
+ (parent[:"#{key}:#{n}"] ||= []).concat(tasks)
97
98
  end
98
99
  end
99
100
 
@@ -170,7 +171,7 @@ module Squared
170
171
  private
171
172
 
172
173
  def already_invoked?(list, val)
173
- return false unless val && !list.include?(val)
174
+ return false if val && !list.include?(val)
174
175
 
175
176
  ::Rake::Task.tasks.any? { |obj| obj.already_invoked && (val ? val == obj.name : list.include?(obj.name)) }
176
177
  end
@@ -37,7 +37,7 @@ module Squared
37
37
  private
38
38
 
39
39
  def project(name)
40
- __get__(:project)[name.to_sym]
40
+ __get__(:project)[name.to_s]
41
41
  end
42
42
  end
43
43
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: squared
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.11
4
+ version: 0.0.12
5
5
  platform: ruby
6
6
  authors:
7
7
  - An Pham
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-11-29 00:00:00.000000000 Z
11
+ date: 2024-12-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -71,7 +71,6 @@ files:
71
71
  - lib/squared/common/prompt.rb
72
72
  - lib/squared/common/shell.rb
73
73
  - lib/squared/common/system.rb
74
- - lib/squared/common/task.rb
75
74
  - lib/squared/common/utils.rb
76
75
  - lib/squared/config.rb
77
76
  - lib/squared/version.rb
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'rake'
4
-
5
- module Squared
6
- module Common
7
- module Task
8
- module_function
9
-
10
- def invoke(series, *args, exception: true, warning: true)
11
- series = [series] unless series.is_a?(::Array)
12
- series.each { |name| ::Rake::Task[name].invoke(*args) }
13
- rescue StandardError => e
14
- raise if exception
15
-
16
- warn e if warning
17
- end
18
-
19
- def invoked?(*name)
20
- val = name.size > 1 ? name.join(':') : name.first.to_s
21
- ::Rake::Task.tasks.any? { |obj| obj.already_invoked && obj.name == val }
22
- end
23
- end
24
- end
25
- end