squared 0.6.15 → 0.6.16
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 +26 -0
- data/lib/squared/common/utils.rb +9 -1
- data/lib/squared/version.rb +1 -1
- data/lib/squared/workspace/application.rb +7 -1
- data/lib/squared/workspace/project/base.rb +23 -7
- data/lib/squared/workspace/project/docker.rb +2 -2
- data/lib/squared/workspace/project/git.rb +22 -18
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a26491045e0e9a54898e1d36dd86702354e6ae5c13fd26f81cb8a3f40a495782
|
|
4
|
+
data.tar.gz: 945d788953e1a6fc6fbd8630d68653fd19b1e4f70fb2ffce4645661ffe4ed00e
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8cd5453e7e5a42d466eaf17b56775ac19b2d7e1c2e2a04d2d4daf68bc4ca0700cbed58037c70f0bd101e9e55f0667f2cee30e014714548cf6d05dbb1390bc9bb
|
|
7
|
+
data.tar.gz: 68bc4817d3f0ea3d99197e23dad1e21f94ad70dbc0c1afb96cbc4fab5e6bc9a7fcf85a8e6c80d90616367ea5cbe7db92cebdf95207c6a299d5ed2d68cf781edd
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,28 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [0.6.16] - 2026-07-04
|
|
4
|
+
|
|
5
|
+
### Added
|
|
6
|
+
|
|
7
|
+
- Git command pull action all supports filter pattern negation.
|
|
8
|
+
|
|
9
|
+
## [0.5.25] - 2026-07-04
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- See `0.4.39`.
|
|
14
|
+
|
|
15
|
+
## [0.4.39] - 2026-07-04
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- Common global argument OUT with a file separator overrides PIPE.
|
|
20
|
+
|
|
21
|
+
### Fixed
|
|
22
|
+
|
|
23
|
+
- Git output list results did not hide footer when banner was disabled.
|
|
24
|
+
- Project banners which were empty were being printed.
|
|
25
|
+
|
|
3
26
|
## [0.6.15] - 2026-06-17
|
|
4
27
|
|
|
5
28
|
### Fixed
|
|
@@ -1717,6 +1740,7 @@
|
|
|
1717
1740
|
|
|
1718
1741
|
- Changelog was created.
|
|
1719
1742
|
|
|
1743
|
+
[0.6.16]: https://github.com/anpham6/squared-ruby/releases/tag/v0.6.16
|
|
1720
1744
|
[0.6.15]: https://github.com/anpham6/squared-ruby/releases/tag/v0.6.15
|
|
1721
1745
|
[0.6.14]: https://github.com/anpham6/squared-ruby/releases/tag/v0.6.14
|
|
1722
1746
|
[0.6.13]: https://github.com/anpham6/squared-ruby/releases/tag/v0.6.13
|
|
@@ -1733,6 +1757,7 @@
|
|
|
1733
1757
|
[0.6.2]: https://github.com/anpham6/squared-ruby/releases/tag/v0.6.2
|
|
1734
1758
|
[0.6.1]: https://github.com/anpham6/squared-ruby/releases/tag/v0.6.1
|
|
1735
1759
|
[0.6.0]: https://github.com/anpham6/squared-ruby/releases/tag/v0.6.0
|
|
1760
|
+
[0.5.25]: https://github.com/anpham6/squared-ruby/releases/tag/v0.5.25
|
|
1736
1761
|
[0.5.24]: https://github.com/anpham6/squared-ruby/releases/tag/v0.5.24
|
|
1737
1762
|
[0.5.23]: https://github.com/anpham6/squared-ruby/releases/tag/v0.5.23
|
|
1738
1763
|
[0.5.22]: https://github.com/anpham6/squared-ruby/releases/tag/v0.5.22
|
|
@@ -1758,6 +1783,7 @@
|
|
|
1758
1783
|
[0.5.2]: https://github.com/anpham6/squared-ruby/releases/tag/v0.5.2-ruby
|
|
1759
1784
|
[0.5.1]: https://github.com/anpham6/squared-ruby/releases/tag/v0.5.1-ruby
|
|
1760
1785
|
[0.5.0]: https://github.com/anpham6/squared-ruby/releases/tag/v0.5.0-ruby
|
|
1786
|
+
[0.4.39]: https://github.com/anpham6/squared-ruby/releases/tag/v0.4.39
|
|
1761
1787
|
[0.4.38]: https://github.com/anpham6/squared-ruby/releases/tag/v0.4.38
|
|
1762
1788
|
[0.4.37]: https://github.com/anpham6/squared-ruby/releases/tag/v0.4.37
|
|
1763
1789
|
[0.4.36]: https://github.com/anpham6/squared-ruby/releases/tag/v0.4.36
|
data/lib/squared/common/utils.rb
CHANGED
|
@@ -173,11 +173,19 @@ module Squared
|
|
|
173
173
|
end
|
|
174
174
|
|
|
175
175
|
def env_pipe(key, default = 1, suffix: nil, strict: false, root: nil)
|
|
176
|
+
out = 1
|
|
176
177
|
case key
|
|
177
178
|
when ::String
|
|
178
179
|
case (ret = env_value(key, suffix: suffix, strict: strict))
|
|
179
180
|
when '0', '1', '2'
|
|
180
181
|
return ret.to_i
|
|
182
|
+
else
|
|
183
|
+
out = default if default.is_a?(::Numeric)
|
|
184
|
+
if ret.include?(File::SEPARATOR)
|
|
185
|
+
default = ret
|
|
186
|
+
elsif key.include?(File::SEPARATOR)
|
|
187
|
+
default = key
|
|
188
|
+
end
|
|
181
189
|
end
|
|
182
190
|
when ::Numeric
|
|
183
191
|
return key if key.between?(0, 2)
|
|
@@ -188,7 +196,7 @@ module Squared
|
|
|
188
196
|
(root ? Pathname.new(root) + default : Pathname.new(default)).realdirpath
|
|
189
197
|
rescue StandardError => e
|
|
190
198
|
warn e
|
|
191
|
-
|
|
199
|
+
out
|
|
192
200
|
end
|
|
193
201
|
end
|
|
194
202
|
|
data/lib/squared/version.rb
CHANGED
|
@@ -116,7 +116,13 @@ module Squared
|
|
|
116
116
|
@extensions = []
|
|
117
117
|
@envname = env_key(@main).freeze
|
|
118
118
|
self.exception = env_bool exception
|
|
119
|
-
self.pipe = $DEBUG
|
|
119
|
+
self.pipe = if $DEBUG
|
|
120
|
+
2
|
|
121
|
+
elsif (out = ARG[:OUT]) && out.include?(File::SEPARATOR)
|
|
122
|
+
env_pipe(out, pipe, root: home)
|
|
123
|
+
else
|
|
124
|
+
env_pipe(pipe, (out && env(out)) || 1, root: home)
|
|
125
|
+
end
|
|
120
126
|
self.verbose = if $VERBOSE.nil?
|
|
121
127
|
false
|
|
122
128
|
elsif verbose.nil?
|
|
@@ -1551,7 +1551,7 @@ module Squared
|
|
|
1551
1551
|
def print_item(*val, series: false)
|
|
1552
1552
|
puts unless printfirst?
|
|
1553
1553
|
printsucc unless series
|
|
1554
|
-
puts val unless val.empty? || (val.size == 1 && !val.first)
|
|
1554
|
+
puts val unless val.empty? || (val.size == 1 && (!val.first || val.first.empty?))
|
|
1555
1555
|
end
|
|
1556
1556
|
|
|
1557
1557
|
def print_banner(*lines, client: false, styles: theme[:banner], border: borderstyle, **)
|
|
@@ -2053,13 +2053,29 @@ module Squared
|
|
|
2053
2053
|
files.map { |val| val == '.' ? '.' : shell_quote(basepath(val)) }
|
|
2054
2054
|
end
|
|
2055
2055
|
|
|
2056
|
-
def matchmap(list, prefix = nil)
|
|
2057
|
-
|
|
2058
|
-
|
|
2059
|
-
|
|
2060
|
-
|
|
2061
|
-
|
|
2056
|
+
def matchmap(list, prefix = nil, negate: false)
|
|
2057
|
+
ret = negate ? [[], []] : []
|
|
2058
|
+
list.each do |val|
|
|
2059
|
+
unless val.is_a?(Regexp)
|
|
2060
|
+
val = val.dup
|
|
2061
|
+
n = 1 if negate && val.delete_prefix!('!')
|
|
2062
|
+
if prefix
|
|
2063
|
+
a = nil
|
|
2064
|
+
val.sub!(/\A(\^|\\A)/) do |s|
|
|
2065
|
+
a = s
|
|
2066
|
+
nil
|
|
2067
|
+
end
|
|
2068
|
+
val = ".*#{val}" unless a
|
|
2069
|
+
end
|
|
2070
|
+
end
|
|
2071
|
+
pat = Regexp.new("#{a}#{prefix}#{val == '*' ? '.+' : val}")
|
|
2072
|
+
if negate
|
|
2073
|
+
ret[n || 0] << pat
|
|
2074
|
+
else
|
|
2075
|
+
ret << pat
|
|
2076
|
+
end
|
|
2062
2077
|
end
|
|
2078
|
+
ret
|
|
2063
2079
|
end
|
|
2064
2080
|
|
|
2065
2081
|
def semver(val)
|
|
@@ -267,7 +267,7 @@ module Squared
|
|
|
267
267
|
end
|
|
268
268
|
end
|
|
269
269
|
else
|
|
270
|
-
format_desc action, flag, "opts*,id/name#{flag == :update ? '+' : '*'}"
|
|
270
|
+
format_desc action, flag, "opts*,id/name#{flag == :update || flag == :inspect ? '+' : '*'}"
|
|
271
271
|
task flag do |_, args|
|
|
272
272
|
container flag, args.to_a
|
|
273
273
|
end
|
|
@@ -501,7 +501,7 @@ module Squared
|
|
|
501
501
|
end
|
|
502
502
|
end
|
|
503
503
|
append_command(flag, id || tagmain, op.extras)
|
|
504
|
-
when :update
|
|
504
|
+
when :update, :inspect
|
|
505
505
|
raise_error ArgumentError, 'missing container', hint: flag if op.empty?
|
|
506
506
|
op.append(escape: true, strip: /^:/)
|
|
507
507
|
when :commit
|
|
@@ -1010,14 +1010,14 @@ module Squared
|
|
|
1010
1010
|
end
|
|
1011
1011
|
op = OptionPartition.new(opts, OPT_GIT[:pull], cmd, project: self, no: OPT_GIT[:no][:pull])
|
|
1012
1012
|
opts -= op.extras
|
|
1013
|
-
reg = matchmap
|
|
1013
|
+
reg, neg = matchmap(op, negate: true)
|
|
1014
1014
|
session_done op.target
|
|
1015
1015
|
heads = []
|
|
1016
1016
|
cur = nil
|
|
1017
1017
|
foreachref('heads', format: '%(if)%(HEAD)%(then)* %(end)%(refname:short)').each do |line|
|
|
1018
1018
|
line.chomp!
|
|
1019
1019
|
cur ||= line.delete_prefix!('* ')
|
|
1020
|
-
heads << line if matchany?(line, reg)
|
|
1020
|
+
heads << line if matchany?(line, reg) && !matchany?(neg, line, empty: false)
|
|
1021
1021
|
end
|
|
1022
1022
|
raise_error 'head not found', hint: 'for-each-ref' unless cur
|
|
1023
1023
|
opts << 'ff-only' if opts.empty? && !option('ff-only', equals: '0')
|
|
@@ -1186,7 +1186,7 @@ module Squared
|
|
|
1186
1186
|
op.clear
|
|
1187
1187
|
out, banner, from = source(io: true)
|
|
1188
1188
|
print_item banner
|
|
1189
|
-
list_result(write_lines(out), 'objects', from: from)
|
|
1189
|
+
list_result(write_lines(out), 'objects', banner: banner, from: from)
|
|
1190
1190
|
return
|
|
1191
1191
|
end
|
|
1192
1192
|
else
|
|
@@ -1235,7 +1235,7 @@ module Squared
|
|
|
1235
1235
|
end
|
|
1236
1236
|
out, banner, from = source(io: true)
|
|
1237
1237
|
ret = write_lines(out, banner: banner, sub: sub)
|
|
1238
|
-
list_result(ret, 'files', action: 'modified', from: from)
|
|
1238
|
+
list_result(ret, 'files', action: 'modified', banner: banner, from: from)
|
|
1239
1239
|
end
|
|
1240
1240
|
|
|
1241
1241
|
def revbuild(flag = nil, opts = [], sync: nil, **kwargs)
|
|
@@ -1376,7 +1376,7 @@ module Squared
|
|
|
1376
1376
|
out, banner, from = source(io: true)
|
|
1377
1377
|
print_item banner
|
|
1378
1378
|
ret = write_lines(out, grep: op.extras)
|
|
1379
|
-
list_result(ret, 'tags', grep: op.extras, from: from)
|
|
1379
|
+
list_result(ret, 'tags', grep: op.extras, banner: banner, from: from)
|
|
1380
1380
|
return
|
|
1381
1381
|
end
|
|
1382
1382
|
remote ||= option('remote')
|
|
@@ -1385,9 +1385,9 @@ module Squared
|
|
|
1385
1385
|
|
|
1386
1386
|
def log!(flag, opts = [], range: [], index: [], grep: [])
|
|
1387
1387
|
cmd, opts = git_session('log', opts: opts)
|
|
1388
|
-
op = OptionPartition.new(opts, collect_hash(OPT_GIT[:log]), cmd,
|
|
1389
|
-
|
|
1390
|
-
|
|
1388
|
+
op = OptionPartition.new(opts, collect_hash(OPT_GIT[:log]), cmd,
|
|
1389
|
+
project: self, no: collect_hash(OPT_GIT[:no][:log]),
|
|
1390
|
+
first: matchpathspec)
|
|
1391
1391
|
case flag
|
|
1392
1392
|
when :between, :contain
|
|
1393
1393
|
op.add_quote(range.join(flag == :between ? '..' : '...'))
|
|
@@ -1632,7 +1632,7 @@ module Squared
|
|
|
1632
1632
|
opt_style(color(:green), /^(\*\s+)(\S+)(.*)$/, 2),
|
|
1633
1633
|
opt_style(color(:red), %r{^(\s*)(remotes/\S+)(.*)$}, 2)
|
|
1634
1634
|
])
|
|
1635
|
-
list_result(ret, 'branches', from: from)
|
|
1635
|
+
list_result(ret, 'branches', banner: banner, from: from)
|
|
1636
1636
|
return
|
|
1637
1637
|
else
|
|
1638
1638
|
if (head = git_spawn('rev-parse --abbrev-ref HEAD').chomp).empty?
|
|
@@ -1641,7 +1641,7 @@ module Squared
|
|
|
1641
1641
|
git_spawn 'fetch --all --prune --quiet' if option('sync')
|
|
1642
1642
|
cmd << '-vv --no-abbrev --list'
|
|
1643
1643
|
out, banner, from = source(io: true)
|
|
1644
|
-
first =
|
|
1644
|
+
first = from_base?('branch')
|
|
1645
1645
|
grep = first ? [/^\*\s+#{Regexp.escape(head)}\s/] : []
|
|
1646
1646
|
ret = write_lines(out, grep: grep, banner: banner, first: first) do |line, index|
|
|
1647
1647
|
next line if stdin?
|
|
@@ -1714,9 +1714,7 @@ module Squared
|
|
|
1714
1714
|
|
|
1715
1715
|
def restore(flag, opts = [], commit: nil, files: nil)
|
|
1716
1716
|
cmd, opts = git_session('restore', shell_option(flag, commit, escape: false, force: false), opts: opts)
|
|
1717
|
-
op = OptionPartition.new(opts,
|
|
1718
|
-
OPT_GIT[:restore] + OPT_GIT[:log][:diff_context],
|
|
1719
|
-
cmd,
|
|
1717
|
+
op = OptionPartition.new(opts, OPT_GIT[:restore] + OPT_GIT[:log][:diff_context], cmd,
|
|
1720
1718
|
project: self, no: OPT_GIT[:no][:restore], first: matchpathspec)
|
|
1721
1719
|
append_pathspec(op.extras + (files || []), pass: false)
|
|
1722
1720
|
source(sync: false, stderr: true)
|
|
@@ -1779,7 +1777,7 @@ module Squared
|
|
|
1779
1777
|
out, banner, from = source(io: true)
|
|
1780
1778
|
print_item banner
|
|
1781
1779
|
ret = write_lines(out, grep: op.extras, prefix: "refs/#{flag}/")
|
|
1782
|
-
list_result(ret, flag.to_s, grep: op.extras, from: from)
|
|
1780
|
+
list_result(ret, flag.to_s, grep: op.extras, banner: banner, from: from)
|
|
1783
1781
|
end
|
|
1784
1782
|
|
|
1785
1783
|
def ls_files(flag, opts = [])
|
|
@@ -1789,7 +1787,7 @@ module Squared
|
|
|
1789
1787
|
out, banner, from = source(io: true)
|
|
1790
1788
|
print_item banner
|
|
1791
1789
|
ret = write_lines(out, grep: op.extras)
|
|
1792
|
-
list_result(ret, 'files', grep: op.extras, from: from)
|
|
1790
|
+
list_result(ret, 'files', grep: op.extras, banner: banner, from: from)
|
|
1793
1791
|
end
|
|
1794
1792
|
|
|
1795
1793
|
def git(flag, opts = [])
|
|
@@ -1978,14 +1976,20 @@ module Squared
|
|
|
1978
1976
|
ret += 1
|
|
1979
1977
|
break if first
|
|
1980
1978
|
end
|
|
1981
|
-
|
|
1979
|
+
if banner && (ret > 0 || (!pass && !first))
|
|
1980
|
+
if banner.empty?
|
|
1981
|
+
print_item(*out)
|
|
1982
|
+
else
|
|
1983
|
+
print_item(banner, *out)
|
|
1984
|
+
end
|
|
1985
|
+
end
|
|
1982
1986
|
ret
|
|
1983
1987
|
end
|
|
1984
1988
|
|
|
1985
|
-
def list_result(size, type, action: 'found', grep: [], from: nil)
|
|
1989
|
+
def list_result(size, type, action: 'found', grep: [], banner: nil, from: nil)
|
|
1986
1990
|
if size == 0
|
|
1987
1991
|
puts empty_status("No #{type} were #{action}", 'grep', grep.join(', '))
|
|
1988
|
-
elsif stdout?
|
|
1992
|
+
elsif stdout? && (banner.nil? || (banner.is_a?(String) && !banner.empty?))
|
|
1989
1993
|
styles = theme.fetch(:banner, []).reject { |s| s.to_s.end_with?('!') }
|
|
1990
1994
|
styles << :bold if styles.size <= 1
|
|
1991
1995
|
puts print_footer("#{size} #{size == 1 ? type.sub(/(?:(?<!l)e)?s\z/, '') : type}",
|
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.6.
|
|
4
|
+
version: 0.6.16
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- An Pham
|
|
@@ -124,7 +124,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
124
124
|
- !ruby/object:Gem::Version
|
|
125
125
|
version: '0'
|
|
126
126
|
requirements: []
|
|
127
|
-
rubygems_version: 4.0.
|
|
127
|
+
rubygems_version: 4.0.10
|
|
128
128
|
specification_version: 4
|
|
129
129
|
summary: Rake task generator for managing multi-language workspaces.
|
|
130
130
|
test_files: []
|