squared 0.1.7 → 0.2.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 +61 -37
- data/README.md +3 -0
- data/README.ruby.md +126 -46
- data/lib/squared/app.rb +0 -2
- data/lib/squared/common/base.rb +20 -14
- data/lib/squared/common/class.rb +18 -1
- data/lib/squared/common/format.rb +17 -17
- data/lib/squared/common/prompt.rb +1 -1
- data/lib/squared/common/shell.rb +22 -14
- data/lib/squared/common/system.rb +56 -20
- data/lib/squared/common/utils.rb +6 -6
- data/lib/squared/config.rb +130 -82
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +168 -51
- data/lib/squared/workspace/project/base.rb +361 -152
- data/lib/squared/workspace/project/git.rb +731 -281
- data/lib/squared/workspace/project/node.rb +175 -104
- data/lib/squared/workspace/project/python.rb +190 -75
- data/lib/squared/workspace/project/ruby.rb +340 -176
- data/lib/squared/workspace/repo.rb +37 -46
- data/lib/squared/workspace/series.rb +16 -14
- data/squared.gemspec +0 -1
- metadata +3 -20
@@ -3,6 +3,8 @@
|
|
3
3
|
module Squared
|
4
4
|
module Workspace
|
5
5
|
module Repo
|
6
|
+
include Common::Format
|
7
|
+
|
6
8
|
class << self
|
7
9
|
def read_manifest(path)
|
8
10
|
require 'rexml/document'
|
@@ -11,20 +13,6 @@ module Squared
|
|
11
13
|
doc = REXML::Document.new(file.read)
|
12
14
|
doc.elements['manifest/include'].attributes['name']&.sub('.xml', '')
|
13
15
|
end
|
14
|
-
|
15
|
-
def empty?(dir)
|
16
|
-
return false unless dir.exist?
|
17
|
-
|
18
|
-
case dir.children.size
|
19
|
-
when 0
|
20
|
-
true
|
21
|
-
when 1
|
22
|
-
file = dir.children.first
|
23
|
-
file.to_s == __FILE__ || (file.directory? && file.basename.to_s == '.repo')
|
24
|
-
else
|
25
|
-
false
|
26
|
-
end
|
27
|
-
end
|
28
16
|
end
|
29
17
|
|
30
18
|
attr_reader :manifest_url, :manifest
|
@@ -124,38 +112,41 @@ module Squared
|
|
124
112
|
def __repo__(**kwargs)
|
125
113
|
kwargs.delete(:parallel) if env('REPO_SYNC', ignore: '0')
|
126
114
|
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
115
|
+
namespace(name = task_name('repo')) do |repo|
|
116
|
+
branch = env('REPO_MANIFEST') || Repo.read_manifest(root)
|
117
|
+
target = branch || manifest
|
118
|
+
stage = nil
|
119
|
+
failfast = true
|
120
|
+
cmd = []
|
121
|
+
newline = ARGV.index { |val| val.start_with?('repo:') }.to_i > 0
|
122
|
+
parse_opts = lambda do |args|
|
123
|
+
args.to_a.each do |val|
|
124
|
+
case val
|
125
|
+
when 'no-fail'
|
126
|
+
failfast = false
|
127
|
+
when 'force'
|
128
|
+
cmd << '--force-checkout'
|
129
|
+
when 'rebase'
|
130
|
+
cmd << '--rebase'
|
131
|
+
when 'detach'
|
132
|
+
cmd << '--detach'
|
133
|
+
when 'gc'
|
134
|
+
cmd << '--auto-gc'
|
135
|
+
when 'no-update'
|
136
|
+
cmd << '--no-manifest-update'
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
desc = lambda do |val, alt = nil|
|
141
|
+
if (ver = branch || alt)
|
142
|
+
val = val.sub('{0}', 'opts*=force,rebase,detach,gc,no-update,no-fail')
|
143
|
+
task_desc(task_name('repo'), val, ver)
|
144
|
+
else
|
145
|
+
task_desc 'inactive'
|
148
146
|
end
|
149
147
|
end
|
150
|
-
end
|
151
|
-
status = lambda do |val, alt = nil|
|
152
|
-
return 'inactive' unless (ver = branch || alt)
|
153
|
-
|
154
|
-
message(task_name('repo'), val.sub('{0}', 'opts*=force,rebase,detach,gc,no-update,no-fail'), ver)
|
155
|
-
end
|
156
148
|
|
157
|
-
|
158
|
-
desc status.('all[{0}]')
|
149
|
+
desc.('all[{0}]')
|
159
150
|
task 'all', [:opts] do |_, args|
|
160
151
|
parse_opts.(args)
|
161
152
|
stage ||= 'all'
|
@@ -170,7 +161,7 @@ module Squared
|
|
170
161
|
proj.build(sync: true)
|
171
162
|
next unless proj.dev? && proj.copy?
|
172
163
|
|
173
|
-
if (ws = proj.workspace).task_defined?(target =
|
164
|
+
if (ws = proj.workspace).task_defined?(target = task_join(proj.name, 'copy'))
|
174
165
|
task_invoke(target, **ws.invokeargs)
|
175
166
|
else
|
176
167
|
proj.copy
|
@@ -178,7 +169,7 @@ module Squared
|
|
178
169
|
end
|
179
170
|
end
|
180
171
|
|
181
|
-
desc
|
172
|
+
desc.("init[manifest?=#{target},{0}]", target)
|
182
173
|
task 'init', [:manifest, :opts] do |_, args|
|
183
174
|
parse_opts.(args)
|
184
175
|
stage = 'init'
|
@@ -187,7 +178,7 @@ module Squared
|
|
187
178
|
repo['all'].invoke
|
188
179
|
end
|
189
180
|
|
190
|
-
desc
|
181
|
+
desc.('sync[{0}]')
|
191
182
|
task 'sync', [:opts] do |_, args|
|
192
183
|
unless branch || stage == 'init'
|
193
184
|
raise_error('repo is not initialized', "rake #{task_name('repo:init')}", kind: LoadError)
|
@@ -50,7 +50,7 @@ module Squared
|
|
50
50
|
def base_set(obj)
|
51
51
|
TASK_BASE.clear
|
52
52
|
.concat((if TASK_KEYS.empty?
|
53
|
-
obj.tasks
|
53
|
+
obj.tasks
|
54
54
|
else
|
55
55
|
obj.tasks.reject { |val| TASK_KEYS.include?(val) }
|
56
56
|
end).freeze)
|
@@ -69,6 +69,7 @@ module Squared
|
|
69
69
|
attr_reader :sync, :multiple, :parallel
|
70
70
|
|
71
71
|
def_delegators :@data, :[], :each, :each_key, :keys, :fetch, :to_a, :to_s, :inspect, :merge!, :key?
|
72
|
+
def_delegators :@workspace, :task_desc, :task_name, :task_namespace, :task_join, :format_desc
|
72
73
|
|
73
74
|
def initialize(workspace)
|
74
75
|
@workspace = workspace
|
@@ -97,8 +98,7 @@ module Squared
|
|
97
98
|
items.concat(tasks)
|
98
99
|
end
|
99
100
|
if tasks.size > 1 && (data = batch_get(key)) && data.keys.any? { |ref| proj.ref?(ref) }
|
100
|
-
t = ws.task_join(proj.name, key)
|
101
|
-
desc Common::Format.message(*t.split(':'))
|
101
|
+
ws.task_desc(t = ws.task_join(proj.name, key))
|
102
102
|
task t => tasks
|
103
103
|
end
|
104
104
|
next unless (b = ws.find_base(proj)) && (n = b.ref.to_s) != g
|
@@ -109,30 +109,30 @@ module Squared
|
|
109
109
|
end
|
110
110
|
|
111
111
|
def build(parallel: [], pattern: [], **)
|
112
|
-
subcheck = ->(val) { (ns =
|
112
|
+
subcheck = ->(val) { (ns = task_namespace(val)) && parallel.include?(ns) }
|
113
113
|
@data.merge!(@session[:parent]) if @session[:id].uniq.size > 1
|
114
114
|
@data.merge!(@session[:group])
|
115
115
|
@data.each do |key, items|
|
116
116
|
next if items.empty?
|
117
117
|
|
118
|
-
key =
|
119
|
-
val =
|
118
|
+
key = task_name(t = name_get(key))
|
119
|
+
val = format_desc(key, out: true)
|
120
120
|
if items.size > 1
|
121
121
|
@multiple << key
|
122
|
-
if parallel.include?(t) || pattern.any? { |pat|
|
123
|
-
|
122
|
+
if parallel.include?(t) || pattern.any? { |pat| t =~ pat } || subcheck.(t)
|
123
|
+
task_desc("#{val} (thread)", name: key)
|
124
124
|
multitask key => items
|
125
125
|
@parallel << key
|
126
126
|
|
127
|
-
s =
|
128
|
-
|
127
|
+
s = task_join(key, 'sync')
|
128
|
+
task_desc("#{val} (sync)", name: s)
|
129
129
|
task s => items
|
130
130
|
@sync << s
|
131
131
|
next
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
135
|
-
|
135
|
+
task_desc(val, name: key)
|
136
136
|
task key => items
|
137
137
|
end
|
138
138
|
@multiple += sync
|
@@ -196,9 +196,11 @@ module Squared
|
|
196
196
|
private
|
197
197
|
|
198
198
|
def already_invoked?(list, val)
|
199
|
-
|
200
|
-
|
201
|
-
|
199
|
+
if val
|
200
|
+
list.include?(val) && Rake::Task[val].already_invoked
|
201
|
+
else
|
202
|
+
Rake::Task.tasks.any? { |obj| obj.already_invoked && list.include?(obj.name) }
|
203
|
+
end
|
202
204
|
end
|
203
205
|
end
|
204
206
|
|
data/squared.gemspec
CHANGED
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: squared
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- An Pham
|
8
|
-
autorequire:
|
9
8
|
bindir: exe
|
10
9
|
cert_chain: []
|
11
|
-
date: 2025-
|
10
|
+
date: 2025-01-07 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: rake
|
@@ -52,20 +51,6 @@ dependencies:
|
|
52
51
|
- - ">="
|
53
52
|
- !ruby/object:Gem::Version
|
54
53
|
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: readline
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :runtime
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
54
|
description: Rake task generator for managing multi-language workspaces.
|
70
55
|
email:
|
71
56
|
- anpham6@gmail.com
|
@@ -107,7 +92,6 @@ metadata:
|
|
107
92
|
homepage_uri: https://github.com/anpham6/squared
|
108
93
|
source_code_uri: https://github.com/anpham6/squared
|
109
94
|
documentation_uri: https://squared.readthedocs.io
|
110
|
-
post_install_message:
|
111
95
|
rdoc_options: []
|
112
96
|
require_paths:
|
113
97
|
- lib
|
@@ -122,8 +106,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
122
106
|
- !ruby/object:Gem::Version
|
123
107
|
version: '0'
|
124
108
|
requirements: []
|
125
|
-
rubygems_version: 3.
|
126
|
-
signing_key:
|
109
|
+
rubygems_version: 3.6.2
|
127
110
|
specification_version: 4
|
128
111
|
summary: Rake task generator for managing multi-language workspaces.
|
129
112
|
test_files: []
|