squared 0.4.36 → 0.5.0
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 +64 -529
- data/README.md +1283 -663
- data/README.ruby.md +722 -0
- data/lib/squared/common/base.rb +8 -9
- data/lib/squared/common/format.rb +26 -39
- data/lib/squared/common/prompt.rb +46 -51
- data/lib/squared/common/shell.rb +50 -70
- data/lib/squared/common/system.rb +34 -37
- data/lib/squared/common/utils.rb +3 -28
- data/lib/squared/common.rb +2 -1
- data/lib/squared/config.rb +30 -33
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +82 -122
- data/lib/squared/workspace/project/base.rb +432 -578
- data/lib/squared/workspace/project/docker.rb +186 -214
- data/lib/squared/workspace/project/git.rb +368 -512
- data/lib/squared/workspace/project/node.rb +195 -315
- data/lib/squared/workspace/project/python.rb +125 -355
- data/lib/squared/workspace/project/ruby.rb +258 -340
- data/lib/squared/workspace/project/support/class.rb +92 -313
- data/lib/squared/workspace/project.rb +0 -10
- data/lib/squared/workspace/repo.rb +58 -99
- data/lib/squared/workspace/series.rb +41 -47
- data/lib/squared/workspace/support/data.rb +3 -2
- data/lib/squared/workspace/support.rb +0 -1
- data/lib/squared/workspace.rb +3 -5
- data/squared.gemspec +5 -5
- metadata +7 -8
- data/lib/squared/common/class.rb +0 -186
- data/lib/squared/workspace/support/base.rb +0 -32
|
@@ -57,10 +57,10 @@ module Squared
|
|
|
57
57
|
when 'verbose'
|
|
58
58
|
@verbose = 1
|
|
59
59
|
if script.is_a?(Array)
|
|
60
|
-
script[0] = task_join
|
|
60
|
+
script[0] = task_join script[0], 'verbose'
|
|
61
61
|
script
|
|
62
62
|
else
|
|
63
|
-
task_join
|
|
63
|
+
task_join script, 'verbose'
|
|
64
64
|
end
|
|
65
65
|
when 'silent'
|
|
66
66
|
@verbose = false
|
|
@@ -81,8 +81,8 @@ module Squared
|
|
|
81
81
|
data[:run] = run
|
|
82
82
|
end
|
|
83
83
|
data[:global] = true
|
|
84
|
-
data[:dev] = env_match
|
|
85
|
-
data[:prod] = env_match
|
|
84
|
+
data[:dev] = env_match 'REPO_DEV', dev
|
|
85
|
+
data[:prod] = env_match 'REPO_PROD', prod
|
|
86
86
|
if (val = env('REPO_GROUP'))
|
|
87
87
|
script_set(data, group: val.split(','))
|
|
88
88
|
found = true
|
|
@@ -113,39 +113,56 @@ module Squared
|
|
|
113
113
|
def __repo__(**kwargs)
|
|
114
114
|
kwargs.delete(:parallel) if env('REPO_SYNC', ignore: '0')
|
|
115
115
|
|
|
116
|
-
namespace task_name('repo') do |
|
|
117
|
-
path = ns.scope.path
|
|
116
|
+
namespace(name = task_name('repo')) do |repo|
|
|
118
117
|
branch = env('REPO_MANIFEST') || Repo.read_manifest(root)
|
|
119
118
|
target = branch || manifest
|
|
120
119
|
stage = nil
|
|
121
|
-
|
|
120
|
+
failfast = true
|
|
121
|
+
cmd = []
|
|
122
|
+
newline = ARGV.index { |val| val.start_with?('repo:') }.to_i > 0
|
|
123
|
+
parse_opts = lambda do |args|
|
|
124
|
+
args.to_a.each do |val|
|
|
125
|
+
case val
|
|
126
|
+
when 'no-fail'
|
|
127
|
+
failfast = false
|
|
128
|
+
when 'force'
|
|
129
|
+
cmd << '--force-checkout'
|
|
130
|
+
when 'rebase'
|
|
131
|
+
cmd << '--rebase'
|
|
132
|
+
when 'detach'
|
|
133
|
+
cmd << '--detach'
|
|
134
|
+
when 'gc'
|
|
135
|
+
cmd << '--auto-gc'
|
|
136
|
+
when 'no-update'
|
|
137
|
+
cmd << '--no-manifest-update'
|
|
138
|
+
end
|
|
139
|
+
end
|
|
140
|
+
end
|
|
122
141
|
desc = lambda do |val, alt = nil|
|
|
123
142
|
if (ver = branch || alt)
|
|
124
|
-
val = val.sub('{0}',
|
|
125
|
-
task_desc(
|
|
143
|
+
val = val.sub('{0}', 'opts*=force,rebase,detach,gc,no-update,no-fail')
|
|
144
|
+
task_desc(task_name('repo'), val, ver)
|
|
126
145
|
else
|
|
127
146
|
task_desc 'inactive'
|
|
128
147
|
end
|
|
129
148
|
end
|
|
130
149
|
|
|
131
150
|
desc.call('all[{0}]')
|
|
132
|
-
task 'all' do |_, args|
|
|
151
|
+
task 'all', [:opts] do |_, args|
|
|
152
|
+
parse_opts.call(args)
|
|
133
153
|
stage ||= 'all'
|
|
134
|
-
|
|
135
|
-
next if
|
|
154
|
+
repo['sync'].invoke
|
|
155
|
+
next if env('REPO_DRYRUN', equals: '2')
|
|
136
156
|
|
|
137
157
|
@project.select do |_, proj|
|
|
138
|
-
next unless proj.enabled?(proj.workspace.baseref)
|
|
158
|
+
next unless proj.enabled?(proj.workspace.baseref)
|
|
139
159
|
|
|
140
160
|
proj.depend(sync: true) if proj.depend?
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
proj.build?
|
|
161
|
+
proj.build? unless env('REPO_DRYRUN', ignore: '0')
|
|
144
162
|
end
|
|
145
163
|
.each_value do |proj|
|
|
146
164
|
proj.build(sync: true)
|
|
147
|
-
next
|
|
148
|
-
next unless proj.copy? && (proj.dev? || n == '4')
|
|
165
|
+
next unless proj.dev? && proj.copy?
|
|
149
166
|
|
|
150
167
|
if (ws = proj.workspace).task_defined?(target = task_join(proj.name, 'copy'))
|
|
151
168
|
task_invoke(target, **ws.invokeargs)
|
|
@@ -155,71 +172,39 @@ module Squared
|
|
|
155
172
|
end
|
|
156
173
|
end
|
|
157
174
|
|
|
158
|
-
desc.call("init[manifest?=#{target},
|
|
159
|
-
task 'init' do |_, args|
|
|
160
|
-
args
|
|
161
|
-
u = env('REPO_GIT') || manifest_url
|
|
162
|
-
m = args.first && !opts.include?(args.first) ? args.shift : target
|
|
163
|
-
g = args.first && !opts.include?(args.first) ? args.shift : nil
|
|
164
|
-
g = case (val = env('REPO_GROUPS'))
|
|
165
|
-
when '', NilClass
|
|
166
|
-
g
|
|
167
|
-
when '0', 'false'
|
|
168
|
-
nil
|
|
169
|
-
else
|
|
170
|
-
val
|
|
171
|
-
end
|
|
175
|
+
desc.call("init[manifest?=#{target},{0}]", target)
|
|
176
|
+
task 'init', [:manifest, :opts] do |_, args|
|
|
177
|
+
parse_opts.call(args)
|
|
172
178
|
stage = 'init'
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
repo_run "#{repo_bin} init #{opts.uniq.join(' ')}"
|
|
177
|
-
next if env('REPO_STAGE', equals: '0')
|
|
178
|
-
|
|
179
|
-
ns['all'].invoke(*args)
|
|
179
|
+
puts if newline
|
|
180
|
+
system("repo init -u #{env('REPO_URL') || manifest_url} -m #{args.manifest || target}.xml", chdir: root)
|
|
181
|
+
repo['all'].invoke
|
|
180
182
|
end
|
|
181
183
|
|
|
182
184
|
desc.call('sync[{0}]')
|
|
183
|
-
task 'sync' do |
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
else
|
|
187
|
-
raise_error 'repo not initialized' unless branch
|
|
188
|
-
repo_opts
|
|
189
|
-
end
|
|
190
|
-
args.to_a.each do |val|
|
|
191
|
-
case val
|
|
192
|
-
when 'force'
|
|
193
|
-
opts << '--force-checkout'
|
|
194
|
-
when 'rebase', 'detach'
|
|
195
|
-
opts << "--#{val}"
|
|
196
|
-
when 'submodules'
|
|
197
|
-
opts << '--fetch-submodules' if repo_submodules?(true)
|
|
198
|
-
when 'fail'
|
|
199
|
-
opts << '--fail-fast'
|
|
200
|
-
when 'no-update'
|
|
201
|
-
opts << '--no-manifest-update'
|
|
202
|
-
when 'gc'
|
|
203
|
-
opts << '--auto-gc'
|
|
204
|
-
end
|
|
185
|
+
task 'sync', [:opts] do |_, args|
|
|
186
|
+
unless branch || stage == 'init'
|
|
187
|
+
raise_error('repo not initialized', hint: task_name('repo:init'), kind: LoadError)
|
|
205
188
|
end
|
|
206
|
-
|
|
207
|
-
|
|
189
|
+
parse_opts.call(args)
|
|
190
|
+
cmd << "-j#{ENV.fetch('REPO_JOBS', Rake::CpuCounter.count)}"
|
|
191
|
+
cmd << '--fail-fast' if failfast
|
|
192
|
+
puts if newline && stage != 'init'
|
|
208
193
|
begin
|
|
209
|
-
|
|
194
|
+
Common::System.shell("repo sync #{cmd.join(' ')}", chdir: root, exception: failfast)
|
|
210
195
|
rescue Errno::ENOENT => e
|
|
211
196
|
emphasize(e, title: root)
|
|
212
197
|
raise
|
|
213
198
|
rescue StandardError => e
|
|
214
|
-
emphasize(e, title: "rake stash #{
|
|
199
|
+
emphasize(e, title: "rake stash #{task_name(task_join('repo', stage || 'sync'))}")
|
|
215
200
|
raise
|
|
216
201
|
end
|
|
217
202
|
end
|
|
218
203
|
|
|
219
|
-
series.sync.
|
|
220
|
-
task_join(
|
|
221
|
-
task_join(
|
|
222
|
-
task_join(
|
|
204
|
+
series.sync.append(
|
|
205
|
+
task_join(name, 'all'),
|
|
206
|
+
task_join(name, 'init'),
|
|
207
|
+
task_join(name, 'sync')
|
|
223
208
|
)
|
|
224
209
|
end
|
|
225
210
|
end
|
|
@@ -228,41 +213,15 @@ module Squared
|
|
|
228
213
|
return false unless root.directory?
|
|
229
214
|
|
|
230
215
|
path = sub_style(root, styles: theme[:inline])
|
|
231
|
-
timeout = env('REPO_TIMEOUT').to_i
|
|
232
|
-
timeout = 15 unless timeout > 0
|
|
233
216
|
@repo_override = Common::Prompt.confirm(
|
|
234
|
-
"#{log_title(:warn)} \"#{path}\" is not empty. Continue with installation? [y/N] ",
|
|
217
|
+
"#{log_title(:warn)} \"#{path}\" is not empty. Continue with installation? [y/N] ",
|
|
218
|
+
'N',
|
|
219
|
+
timeout: env('REPO_TIMEOUT', 15, ignore: '0')
|
|
235
220
|
)
|
|
236
221
|
end
|
|
237
222
|
|
|
238
|
-
def repo_run(cmd, exception: false)
|
|
239
|
-
puts log_message(Logger::INFO, cmd, subject: main, hint: root) if verbose
|
|
240
|
-
Common::System.shell(cmd, chdir: root, exception: exception)
|
|
241
|
-
end
|
|
242
|
-
|
|
243
|
-
def repo_bin
|
|
244
|
-
Common::Shell.shell_bin('repo')
|
|
245
|
-
end
|
|
246
|
-
|
|
247
|
-
def repo_opts(*args)
|
|
248
|
-
return args unless (n = ARGV.index('--'))
|
|
249
|
-
|
|
250
|
-
ARGV[(n + 1)..-1].concat(args)
|
|
251
|
-
end
|
|
252
|
-
|
|
253
223
|
def repo?
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
repo_install? || @repo_override == true
|
|
257
|
-
end
|
|
258
|
-
|
|
259
|
-
def repo_submodules?(val = false)
|
|
260
|
-
case (s = env('REPO_SUBMODULES'))
|
|
261
|
-
when '0', 'false'
|
|
262
|
-
false
|
|
263
|
-
else
|
|
264
|
-
s ? true : val
|
|
265
|
-
end
|
|
224
|
+
!manifest_url.nil? && (repo_install? || @repo_override == true)
|
|
266
225
|
end
|
|
267
226
|
|
|
268
227
|
def repo_install?(dir = root, parent: false)
|
|
@@ -10,16 +10,16 @@ module Squared
|
|
|
10
10
|
|
|
11
11
|
TASK_BASE = []
|
|
12
12
|
TASK_BATCH = {}
|
|
13
|
-
TASK_EXTEND =
|
|
13
|
+
TASK_EXTEND = {}
|
|
14
14
|
TASK_KEYS = []
|
|
15
|
-
TASK_ALIAS =
|
|
15
|
+
TASK_ALIAS = {}
|
|
16
16
|
TASK_NAME = {}
|
|
17
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] << obj
|
|
22
|
+
(TASK_EXTEND[task] ||= []) << obj
|
|
23
23
|
end
|
|
24
24
|
|
|
25
25
|
def batch(*args, obj)
|
|
@@ -31,19 +31,15 @@ module Squared
|
|
|
31
31
|
end
|
|
32
32
|
elsif (data = TASK_BATCH[obj])
|
|
33
33
|
args.each { |ref| data.delete(ref) }
|
|
34
|
-
if data.empty?
|
|
35
|
-
TASK_KEYS.delete(obj)
|
|
36
|
-
TASK_BATCH.delete(obj)
|
|
37
|
-
end
|
|
34
|
+
TASK_KEYS.delete(obj) if data.empty?
|
|
38
35
|
end
|
|
39
36
|
end
|
|
40
37
|
|
|
41
38
|
def alias(ref, obj)
|
|
42
39
|
if obj.is_a?(Hash)
|
|
43
|
-
obj.each { |key, val| TASK_ALIAS[key][ref] = val }
|
|
44
|
-
|
|
45
|
-
TASK_ALIAS[obj]
|
|
46
|
-
TASK_ALIAS.delete(obj) if TASK_ALIAS[obj].empty?
|
|
40
|
+
obj.each { |key, val| (TASK_ALIAS[key] ||= {})[ref] = val }
|
|
41
|
+
else
|
|
42
|
+
TASK_ALIAS[obj]&.delete(ref)
|
|
47
43
|
end
|
|
48
44
|
end
|
|
49
45
|
|
|
@@ -53,7 +49,11 @@ module Squared
|
|
|
53
49
|
|
|
54
50
|
def base_set(obj)
|
|
55
51
|
TASK_BASE.clear
|
|
56
|
-
|
|
52
|
+
.concat((if TASK_KEYS.empty?
|
|
53
|
+
obj.tasks
|
|
54
|
+
else
|
|
55
|
+
obj.tasks.reject { |val| TASK_KEYS.include?(val) }
|
|
56
|
+
end).freeze)
|
|
57
57
|
end
|
|
58
58
|
|
|
59
59
|
private
|
|
@@ -68,7 +68,7 @@ module Squared
|
|
|
68
68
|
|
|
69
69
|
attr_reader :sync, :multiple, :parallel
|
|
70
70
|
|
|
71
|
-
def_delegators :@data, :[], :each, :each_key, :keys, :fetch, :
|
|
71
|
+
def_delegators :@data, :[], :each, :each_key, :keys, :key?, :fetch, :update, :merge!, :to_a, :to_s, :inspect
|
|
72
72
|
def_delegators :@workspace, :task_desc, :task_name, :task_namespace, :task_join, :format_desc
|
|
73
73
|
|
|
74
74
|
def initialize(workspace, exclude: [])
|
|
@@ -79,8 +79,8 @@ module Squared
|
|
|
79
79
|
@chain = {}
|
|
80
80
|
@exclude = exclude.freeze
|
|
81
81
|
@session = {
|
|
82
|
-
group:
|
|
83
|
-
parent:
|
|
82
|
+
group: {},
|
|
83
|
+
parent: {},
|
|
84
84
|
id: []
|
|
85
85
|
}
|
|
86
86
|
@data = {}
|
|
@@ -95,7 +95,7 @@ module Squared
|
|
|
95
95
|
|
|
96
96
|
if (g = proj.group)
|
|
97
97
|
id << g
|
|
98
|
-
group[:"#{key}:#{g}"].concat(tasks)
|
|
98
|
+
(group[:"#{key}:#{g}"] ||= []).concat(tasks)
|
|
99
99
|
else
|
|
100
100
|
items.concat(tasks)
|
|
101
101
|
end
|
|
@@ -106,35 +106,35 @@ module Squared
|
|
|
106
106
|
next unless (b = ws.find_base(proj)) && (n = b.ref.to_s) != g
|
|
107
107
|
|
|
108
108
|
id << n
|
|
109
|
-
parent[:"#{key}:#{n}"].concat(tasks)
|
|
109
|
+
(parent[:"#{key}:#{n}"] ||= []).concat(tasks)
|
|
110
110
|
end
|
|
111
111
|
end
|
|
112
112
|
|
|
113
113
|
def build(parallel: [], pattern: [], **)
|
|
114
114
|
subcheck = ->(val) { (ns = task_namespace(val)) && parallel.include?(ns) }
|
|
115
|
-
@data.
|
|
116
|
-
@data.
|
|
115
|
+
@data.update(@session[:parent]) if @session[:id].uniq.size > 1
|
|
116
|
+
@data.update(@session[:group])
|
|
117
117
|
@data.each do |key, items|
|
|
118
118
|
next if exclude?(key, true) || @workspace.task_exclude?(t = name_get(key))
|
|
119
119
|
|
|
120
120
|
key = task_name t
|
|
121
|
-
|
|
121
|
+
title = format_desc(key, out: true)
|
|
122
122
|
if items.size > 1
|
|
123
123
|
@multiple << key
|
|
124
124
|
if parallel.include?(t) || pattern.any? { |pat| t.match?(pat) } || subcheck.call(t)
|
|
125
|
-
task_desc("#{
|
|
125
|
+
task_desc("#{title} (thread)", name: key) if title
|
|
126
126
|
multitask key => items
|
|
127
127
|
@parallel << key
|
|
128
128
|
|
|
129
|
-
s = task_join
|
|
130
|
-
task_desc("#{
|
|
129
|
+
s = task_join key, 'sync'
|
|
130
|
+
task_desc("#{title} (sync)", name: s) if title
|
|
131
131
|
task s => items
|
|
132
132
|
@sync << s
|
|
133
133
|
next
|
|
134
134
|
end
|
|
135
135
|
end
|
|
136
136
|
|
|
137
|
-
task_desc(
|
|
137
|
+
task_desc(title, name: key) if title
|
|
138
138
|
task key => items
|
|
139
139
|
end
|
|
140
140
|
@multiple.concat(sync)
|
|
@@ -169,8 +169,6 @@ module Squared
|
|
|
169
169
|
end
|
|
170
170
|
|
|
171
171
|
def alias_get(key)
|
|
172
|
-
return unless TASK_ALIAS.key?(key)
|
|
173
|
-
|
|
174
172
|
TASK_ALIAS[key]
|
|
175
173
|
end
|
|
176
174
|
|
|
@@ -188,14 +186,12 @@ module Squared
|
|
|
188
186
|
end
|
|
189
187
|
|
|
190
188
|
def extend?(obj, key)
|
|
191
|
-
return false unless TASK_EXTEND.
|
|
189
|
+
return false unless (items = TASK_EXTEND[key]) && !(items = items.select { |kind| obj.is_a?(kind) }).empty?
|
|
192
190
|
|
|
193
191
|
meth = :"#{key}?"
|
|
194
192
|
ret = false
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
if kind.method_defined?(meth)
|
|
193
|
+
items.each do |kind|
|
|
194
|
+
if kind.instance_methods.include?(meth)
|
|
199
195
|
out = obj.__send__(meth)
|
|
200
196
|
return true if out == 1
|
|
201
197
|
return out if obj.ref?(kind.ref)
|
|
@@ -214,43 +210,41 @@ module Squared
|
|
|
214
210
|
|
|
215
211
|
def chain?(val)
|
|
216
212
|
@chain.each_value do |tasks|
|
|
217
|
-
tasks.flatten(1).each do |
|
|
218
|
-
next unless
|
|
213
|
+
tasks.flatten(1).each do |task|
|
|
214
|
+
next unless Rake::Task[task].already_invoked
|
|
219
215
|
|
|
220
|
-
|
|
216
|
+
if val == task || Rake::Task[task].prerequisites.any? { |pr| pr == val && Rake::Task[val].already_invoked }
|
|
217
|
+
return true
|
|
218
|
+
end
|
|
221
219
|
end
|
|
222
220
|
end
|
|
223
221
|
false
|
|
224
222
|
end
|
|
225
223
|
|
|
226
224
|
def multiple?(val = nil)
|
|
227
|
-
already_invoked?
|
|
225
|
+
already_invoked?(multiple, val)
|
|
228
226
|
end
|
|
229
227
|
|
|
230
228
|
def sync?(val = nil)
|
|
231
|
-
already_invoked?
|
|
229
|
+
already_invoked?(sync, val)
|
|
232
230
|
end
|
|
233
231
|
|
|
234
232
|
def parallel?(val = nil)
|
|
235
|
-
already_invoked?
|
|
233
|
+
already_invoked?(parallel, val)
|
|
236
234
|
end
|
|
237
235
|
|
|
238
236
|
def exclude?(key, empty = false)
|
|
239
|
-
@exclude.include?(key) || (empty &&
|
|
237
|
+
@exclude.include?(key) || (empty && @data[key].empty?)
|
|
240
238
|
end
|
|
241
239
|
|
|
242
240
|
private
|
|
243
241
|
|
|
244
|
-
def invoked_get(name)
|
|
245
|
-
return unless Rake::Task.task_defined?(name) && (ret = Rake::Task[name]).already_invoked
|
|
246
|
-
|
|
247
|
-
ret
|
|
248
|
-
end
|
|
249
|
-
|
|
250
242
|
def already_invoked?(list, val)
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
243
|
+
if val
|
|
244
|
+
list.include?(val) && Rake::Task[val].already_invoked
|
|
245
|
+
else
|
|
246
|
+
Rake::Task.tasks.any? { |obj| obj.already_invoked && list.include?(obj.name) }
|
|
247
|
+
end
|
|
254
248
|
end
|
|
255
249
|
end
|
|
256
250
|
|
|
@@ -3,8 +3,9 @@
|
|
|
3
3
|
module Squared
|
|
4
4
|
module Workspace
|
|
5
5
|
module Support
|
|
6
|
-
RunData = Struct.new(
|
|
7
|
-
ChainData = Struct.new(
|
|
6
|
+
RunData = Struct.new(:run, :block)
|
|
7
|
+
ChainData = Struct.new(:action, :step, :with, :before, :after, :sync)
|
|
8
|
+
BannerData = Struct.new(:command, :order, :styles, :border)
|
|
8
9
|
end
|
|
9
10
|
end
|
|
10
11
|
end
|
data/lib/squared/workspace.rb
CHANGED
|
@@ -5,14 +5,12 @@ module Squared
|
|
|
5
5
|
class << self
|
|
6
6
|
include Common
|
|
7
7
|
|
|
8
|
-
def resolve(*args
|
|
9
|
-
values = __get__(:project).values
|
|
8
|
+
def resolve(*args)
|
|
10
9
|
ret = args.map do |id|
|
|
11
10
|
if id.is_a?(Symbol)
|
|
12
11
|
project id
|
|
13
12
|
else
|
|
14
|
-
|
|
15
|
-
values.find { |proj| proj.path.to_s == File.expand_path(id, base) }
|
|
13
|
+
__get__(:project).find { |_, val| File.expand_path(val.path) == File.expand_path(id, __dir__) }
|
|
16
14
|
end
|
|
17
15
|
end
|
|
18
16
|
ret.size == 1 ? ret.first : ret
|
|
@@ -20,7 +18,7 @@ module Squared
|
|
|
20
18
|
|
|
21
19
|
def expect(name)
|
|
22
20
|
ret = project name
|
|
23
|
-
return ret if ret&.path&.directory?
|
|
21
|
+
return ret if ret&.path&.directory?
|
|
24
22
|
|
|
25
23
|
raise NoMethodError, "project is not initialized (#{name})"
|
|
26
24
|
end
|
data/squared.gemspec
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
require_relative "lib/squared/version"
|
|
4
4
|
|
|
5
5
|
Gem::Specification.new do |spec|
|
|
6
6
|
spec.name = "squared"
|
|
7
|
-
spec.version =
|
|
7
|
+
spec.version = Squared::VERSION
|
|
8
8
|
spec.authors = ["An Pham"]
|
|
9
9
|
spec.email = ["anpham6@gmail.com"]
|
|
10
10
|
|
|
11
11
|
spec.summary = %q{Rake task generator for managing multi-language workspaces.}
|
|
12
12
|
spec.description = %q{Rake task generator for managing multi-language workspaces.}
|
|
13
|
-
spec.homepage = "https://github.com/anpham6/squared
|
|
14
|
-
spec.required_ruby_version = Gem::Requirement.new(">= 2.
|
|
13
|
+
spec.homepage = "https://github.com/anpham6/squared"
|
|
14
|
+
spec.required_ruby_version = Gem::Requirement.new(">= 2.5.0")
|
|
15
15
|
spec.licenses = ["BSD-3-Clause"]
|
|
16
16
|
|
|
17
17
|
spec.metadata["homepage_uri"] = spec.homepage
|
|
@@ -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[CHANGELOG.md LICENSE README.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,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: squared
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- An Pham
|
|
@@ -75,11 +75,11 @@ files:
|
|
|
75
75
|
- CHANGELOG.md
|
|
76
76
|
- LICENSE
|
|
77
77
|
- README.md
|
|
78
|
+
- README.ruby.md
|
|
78
79
|
- lib/squared.rb
|
|
79
80
|
- lib/squared/app.rb
|
|
80
81
|
- lib/squared/common.rb
|
|
81
82
|
- lib/squared/common/base.rb
|
|
82
|
-
- lib/squared/common/class.rb
|
|
83
83
|
- lib/squared/common/format.rb
|
|
84
84
|
- lib/squared/common/prompt.rb
|
|
85
85
|
- lib/squared/common/shell.rb
|
|
@@ -101,15 +101,14 @@ files:
|
|
|
101
101
|
- lib/squared/workspace/repo.rb
|
|
102
102
|
- lib/squared/workspace/series.rb
|
|
103
103
|
- lib/squared/workspace/support.rb
|
|
104
|
-
- lib/squared/workspace/support/base.rb
|
|
105
104
|
- lib/squared/workspace/support/data.rb
|
|
106
105
|
- squared.gemspec
|
|
107
|
-
homepage: https://github.com/anpham6/squared
|
|
106
|
+
homepage: https://github.com/anpham6/squared
|
|
108
107
|
licenses:
|
|
109
108
|
- BSD-3-Clause
|
|
110
109
|
metadata:
|
|
111
|
-
homepage_uri: https://github.com/anpham6/squared
|
|
112
|
-
source_code_uri: https://github.com/anpham6/squared
|
|
110
|
+
homepage_uri: https://github.com/anpham6/squared
|
|
111
|
+
source_code_uri: https://github.com/anpham6/squared
|
|
113
112
|
documentation_uri: https://squared.readthedocs.io
|
|
114
113
|
rdoc_options: []
|
|
115
114
|
require_paths:
|
|
@@ -118,14 +117,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
118
117
|
requirements:
|
|
119
118
|
- - ">="
|
|
120
119
|
- !ruby/object:Gem::Version
|
|
121
|
-
version: 2.
|
|
120
|
+
version: 2.5.0
|
|
122
121
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
123
122
|
requirements:
|
|
124
123
|
- - ">="
|
|
125
124
|
- !ruby/object:Gem::Version
|
|
126
125
|
version: '0'
|
|
127
126
|
requirements: []
|
|
128
|
-
rubygems_version:
|
|
127
|
+
rubygems_version: 3.6.7
|
|
129
128
|
specification_version: 4
|
|
130
129
|
summary: Rake task generator for managing multi-language workspaces.
|
|
131
130
|
test_files: []
|