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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +55 -0
- data/README.md +9 -2
- data/README.ruby.md +6 -4
- data/lib/squared/common/class.rb +2 -2
- data/lib/squared/common/format.rb +1 -1
- data/lib/squared/common/system.rb +7 -3
- data/lib/squared/common/utils.rb +6 -2
- data/lib/squared/config.rb +34 -34
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +68 -36
- data/lib/squared/workspace/project/base.rb +232 -161
- data/lib/squared/workspace/project/git.rb +115 -61
- data/lib/squared/workspace/project/node.rb +189 -102
- data/lib/squared/workspace/project/python.rb +11 -9
- data/lib/squared/workspace/project/ruby.rb +31 -27
- data/lib/squared/workspace/repo.rb +28 -14
- data/lib/squared/workspace/series.rb +36 -12
- data/lib/squared/workspace.rb +8 -8
- data/squared.gemspec +1 -1
- metadata +3 -2
@@ -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
|
-
|
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
|
-
|
62
|
+
@home
|
50
63
|
end
|
51
64
|
@root = @home.parent
|
52
65
|
@manifest_url = url
|
53
66
|
@manifest = manifest
|
54
|
-
data =
|
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?(
|
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
|
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',
|
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
|
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
|
8
|
+
include Rake::DSL
|
9
9
|
extend Forwardable
|
10
10
|
|
11
|
-
TASK_BASE =
|
11
|
+
TASK_BASE = []
|
12
12
|
TASK_BATCH = {}
|
13
13
|
TASK_EXTEND = {}
|
14
|
-
TASK_KEYS =
|
14
|
+
TASK_KEYS = []
|
15
15
|
TASK_ALIAS = {}
|
16
16
|
TASK_NAME = {}
|
17
|
-
private_constant :TASK_BASE, :TASK_BATCH, :TASK_KEYS, :
|
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] ||= [])
|
22
|
+
(TASK_EXTEND[task] ||= []) << obj
|
23
23
|
end
|
24
24
|
|
25
25
|
def batch(*args, obj)
|
26
|
-
if obj.is_a?(
|
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?(
|
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) ||
|
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
|
-
|
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
|
-
|
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
|
|
data/lib/squared/workspace.rb
CHANGED
@@ -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?(
|
10
|
+
if id.is_a?(Symbol)
|
11
11
|
project id
|
12
12
|
else
|
13
|
-
id = dirpath(id) if id.is_a?(
|
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.
|
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-
|
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
|