squared 0.0.12 → 0.1.1

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.
@@ -1,7 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'rexml/document'
4
-
5
3
  module Squared
6
4
  module Workspace
7
5
  module Repo
@@ -9,6 +7,7 @@ module Squared
9
7
 
10
8
  class << self
11
9
  def read_manifest(path)
10
+ require 'rexml/document'
12
11
  return unless (file = path.join('.repo/manifest.xml')).exist?
13
12
 
14
13
  doc = REXML::Document.new(file.read)
@@ -16,7 +15,17 @@ module Squared
16
15
  end
17
16
 
18
17
  def empty?(dir)
19
- dir.empty? || (dir.children.size == 1 && dir.join(dir.children.first).to_s == __FILE__)
18
+ return false unless dir.exist?
19
+
20
+ case dir.children.size
21
+ when 0
22
+ true
23
+ when 1
24
+ file = dir.children.first
25
+ file.to_s == __FILE__ || (file.directory? && file.basename.to_s == '.repo')
26
+ else
27
+ false
28
+ end
20
29
  end
21
30
  end
22
31
 
@@ -45,20 +54,24 @@ module Squared
45
54
  raise_error('REPO_ROOT', val, hint: 'exist') unless repo_confirm
46
55
  end
47
56
  @root.join(main).realdirpath
57
+ elsif repo_install?(@home)
58
+ @home.join(main)
59
+ elsif @home != pwd && repo_install?(pwd)
60
+ pwd.join(main)
48
61
  else
49
- repo_install?(@home) ? @home.join(main) : @home
62
+ @home
50
63
  end
51
64
  @root = @home.parent
52
65
  @manifest_url = url
53
66
  @manifest = manifest
54
- data = script_obj
67
+ data = scriptobj
55
68
  if repo?
56
69
  if script
57
70
  if (val = env('REPO_BUILD'))
58
71
  data[:script] = case val
59
72
  when 'verbose'
60
73
  @verbose = 1
61
- if script.is_a?(::Array)
74
+ if script.is_a?(Array)
62
75
  script[0] = task_join(script[0], 'verbose')
63
76
  script
64
77
  else
@@ -162,7 +175,7 @@ module Squared
162
175
  if (ws = proj.workspace).task_defined?(target = ws.task_name(task_join(proj.name, 'copy')))
163
176
  task_invoke(target, **ws.invokeargs)
164
177
  else
165
- proj.copy(sync: true)
178
+ proj.copy
166
179
  end
167
180
  end
168
181
  end
@@ -182,7 +195,7 @@ module Squared
182
195
  raise_error('repo is not initialized', "rake #{task_name('repo:init')}", kind: LoadError)
183
196
  end
184
197
  parse_opts.(args)
185
- cmd << "-j#{ENV.fetch('REPO_JOBS', ::Rake::CpuCounter.count)}"
198
+ cmd << "-j#{ENV.fetch('REPO_JOBS', Rake::CpuCounter.count)}"
186
199
  cmd << '--fail-fast' if failfast
187
200
  puts if newline && stage != 'init'
188
201
  begin
@@ -192,12 +205,13 @@ module Squared
192
205
  raise
193
206
  end
194
207
  end
208
+
209
+ series.sync.push(
210
+ task_join(name, 'all'),
211
+ task_join(name, 'init'),
212
+ task_join(name, 'sync')
213
+ )
195
214
  end
196
- series.sync.push(
197
- task_join(name, 'all'),
198
- task_join(name, 'init'),
199
- task_join(name, 'sync')
200
- )
201
215
  end
202
216
 
203
217
  def repo_confirm
@@ -218,7 +232,7 @@ module Squared
218
232
  def repo_install?(dir = root, parent: false)
219
233
  return true if Repo.empty?(dir) || dir.join('.repo').directory?
220
234
 
221
- parent && root.children.none? { |ent| ent.directory? && ent.basename.to_s[0] != '.' && ent.to_s != home.to_s }
235
+ parent && root.children.none? { |ent| ent.directory? && ent.basename.to_s[0] != '.' && ent != home }
222
236
  end
223
237
  end
224
238
 
@@ -5,25 +5,25 @@ require 'forwardable'
5
5
  module Squared
6
6
  module Workspace
7
7
  class Series
8
- include ::Rake::DSL
8
+ include Rake::DSL
9
9
  extend Forwardable
10
10
 
11
- TASK_BASE = %i[build depend graph doc test copy clean]
11
+ TASK_BASE = []
12
12
  TASK_BATCH = {}
13
13
  TASK_EXTEND = {}
14
- TASK_KEYS = TASK_BASE.dup + TASK_BATCH.keys
14
+ TASK_KEYS = []
15
15
  TASK_ALIAS = {}
16
16
  TASK_NAME = {}
17
- private_constant :TASK_BASE, :TASK_BATCH, :TASK_KEYS, :TASK_NAME, :TASK_EXTEND
17
+ private_constant :TASK_BASE, :TASK_BATCH, :TASK_EXTEND, :TASK_KEYS, :TASK_ALIAS, :TASK_NAME
18
18
 
19
19
  class << self
20
20
  def add(task, obj)
21
21
  key_set task
22
- (TASK_EXTEND[task] ||= []).push(obj)
22
+ (TASK_EXTEND[task] ||= []) << obj
23
23
  end
24
24
 
25
25
  def batch(*args, obj)
26
- if obj.is_a?(::Hash)
26
+ if obj.is_a?(Hash)
27
27
  obj.each do |key, val|
28
28
  key_set key
29
29
  data = TASK_BATCH[key] ||= {}
@@ -36,7 +36,7 @@ module Squared
36
36
  end
37
37
 
38
38
  def alias(ref, obj)
39
- if obj.is_a?(::Hash)
39
+ if obj.is_a?(Hash)
40
40
  obj.each { |key, val| (TASK_ALIAS[key] ||= {})[ref] = val }
41
41
  else
42
42
  TASK_ALIAS[obj]&.delete(ref)
@@ -47,6 +47,15 @@ module Squared
47
47
  TASK_NAME[key.to_sym] = task.to_sym
48
48
  end
49
49
 
50
+ def base_set(obj)
51
+ TASK_BASE.clear
52
+ .concat((if TASK_KEYS.empty?
53
+ obj.tasks.dup
54
+ else
55
+ obj.tasks.reject { |val| TASK_KEYS.include?(val) }
56
+ end).freeze)
57
+ end
58
+
50
59
  private
51
60
 
52
61
  def key_set(val)
@@ -72,7 +81,7 @@ module Squared
72
81
  id: []
73
82
  }
74
83
  @data = {}
75
- TASK_KEYS.each { |key| @data[key] = [] }
84
+ (TASK_BASE + TASK_KEYS).each { |key| @data[key] = [] }
76
85
  end
77
86
 
78
87
  def populate(proj)
@@ -98,7 +107,8 @@ module Squared
98
107
  end
99
108
  end
100
109
 
101
- def build(parallel: [], **)
110
+ def build(parallel: [], pattern: [], **)
111
+ subcheck = ->(val) { (ns = @workspace.task_namespace(val)) && parallel.include?(ns) }
102
112
  @data.merge!(@session[:parent]) if @session[:id].uniq.size > 1
103
113
  @data.merge!(@session[:group])
104
114
  @data.each do |key, items|
@@ -108,7 +118,7 @@ module Squared
108
118
  val = @workspace.task_name(t, desc: true)
109
119
  if items.size > 1
110
120
  @multiple << key
111
- if parallel.include?(t) || ((ns = @workspace.task_namespace(t)) && parallel.include?(ns))
121
+ if parallel.include?(t) || pattern.any? { |pat| pat.match?(t) } || subcheck.(t)
112
122
  desc "#{val} (thread)"
113
123
  multitask key => items
114
124
  @parallel << key
@@ -153,7 +163,21 @@ module Squared
153
163
  end
154
164
 
155
165
  def extend?(obj, key)
156
- TASK_EXTEND.fetch(key, []).any? { |kind| obj.is_a?(kind) && obj.ref?(kind.ref) }
166
+ return false unless (items = TASK_EXTEND[key]) && !(items = items.select { |kind| obj.is_a?(kind) }).empty?
167
+
168
+ meth = :"#{key}?"
169
+ allref = obj.allref.to_a
170
+ ret = false
171
+ items.each do |kind|
172
+ if kind.instance_methods.include?(meth)
173
+ out = obj.__send__(meth)
174
+ return true if out == 1
175
+ return out if obj.ref?(kind.ref)
176
+ elsif allref.include?(kind.ref)
177
+ ret = true
178
+ end
179
+ end
180
+ ret
157
181
  end
158
182
 
159
183
  def multiple?(val = nil)
@@ -173,7 +197,7 @@ module Squared
173
197
  def already_invoked?(list, val)
174
198
  return false if val && !list.include?(val)
175
199
 
176
- ::Rake::Task.tasks.any? { |obj| obj.already_invoked && (val ? val == obj.name : list.include?(obj.name)) }
200
+ Rake::Task.tasks.any? { |obj| obj.already_invoked && (val ? val == obj.name : list.include?(obj.name)) }
177
201
  end
178
202
  end
179
203
 
@@ -7,10 +7,10 @@ module Squared
7
7
 
8
8
  def resolve(*args)
9
9
  ret = args.map do |id|
10
- if id.is_a?(::Symbol)
10
+ if id.is_a?(Symbol)
11
11
  project id
12
12
  else
13
- id = dirpath(id) if id.is_a?(::String)
13
+ id = dirpath(id) if id.is_a?(String)
14
14
  __get__(:project).find { |_, val| val.path.to_s == id.to_s }
15
15
  end
16
16
  end
@@ -24,12 +24,6 @@ module Squared
24
24
  raise NoMethodError, "project is not initialized (#{name})"
25
25
  end
26
26
 
27
- def dirpath(val, absolute: true)
28
- Pathname.new(val).realdirpath
29
- rescue StandardError
30
- absolute ? Pathname.pwd.join(val) : Pathname.new(val)
31
- end
32
-
33
27
  def project?(name)
34
28
  !!project(name)&.enabled?
35
29
  end
@@ -39,6 +33,12 @@ module Squared
39
33
  def project(name)
40
34
  __get__(:project)[name.to_s]
41
35
  end
36
+
37
+ def dirpath(val, absolute: true)
38
+ Pathname.new(val).realdirpath
39
+ rescue StandardError
40
+ absolute ? Pathname.pwd.join(val) : Pathname.new(val)
41
+ end
42
42
  end
43
43
  end
44
44
  end
data/squared.gemspec CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
19
19
  spec.metadata["documentation_uri"] = "https://squared.readthedocs.io"
20
20
 
21
21
  spec.files = Dir["lib/**/*"] +
22
- %w[LICENSE README.md README.ruby.md squared.gemspec]
22
+ %w[CHANGELOG.md LICENSE README.md README.ruby.md squared.gemspec]
23
23
  spec.bindir = "exe"
24
24
  spec.executables = []
25
25
  spec.require_paths = ["lib"]
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.12
4
+ version: 0.1.1
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-12-01 00:00:00.000000000 Z
11
+ date: 2024-12-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -59,6 +59,7 @@ executables: []
59
59
  extensions: []
60
60
  extra_rdoc_files: []
61
61
  files:
62
+ - CHANGELOG.md
62
63
  - LICENSE
63
64
  - README.md
64
65
  - README.ruby.md