This is an automated email from the ASF dual-hosted git repository.
sebb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/whimsy.git
The following commit(s) were added to refs/heads/master by this push:
new 76bd9f4 Allow command to be an array
76bd9f4 is described below
commit 76bd9f4a777835edc9080de5b5b22474dba85983
Author: Sebb <[email protected]>
AuthorDate: Mon Jul 13 23:59:46 2020 +0100
Allow command to be an array
This allows for e.g. list -v or list --xml
---
lib/spec/lib/svn_spec.rb | 34 ++++++++++++++++++++++++++++++++++
lib/spec/lib/svn_wunderbar_spec.rb | 19 +++++++++++++++++++
lib/whimsy/asf/svn.rb | 28 +++++++++++++++++++++++++---
3 files changed, 78 insertions(+), 3 deletions(-)
diff --git a/lib/spec/lib/svn_spec.rb b/lib/spec/lib/svn_spec.rb
index f2eb27a..65549b9 100644
--- a/lib/spec/lib/svn_spec.rb
+++ b/lib/spec/lib/svn_spec.rb
@@ -277,6 +277,19 @@ describe ASF::SVN do
end
end
+ it "svn(['help'], 'help') should return some help" do
+ out, err = ASF::SVN.svn(['help'],'help')
+ expect(out).to match(/Describe the usage of this program or its
subcommands/)
+ expect(out).not_to match(/Global options/)
+ end
+ it "svn(['help', '-v'], 'help') should return Global help" do
+ out, err = ASF::SVN.svn(['help', '-v'],'help')
+ expect(out).to match(/Global options/)
+ end
+ it "svn(['help', '--verbose'], 'help') should return Global help" do
+ out, err = ASF::SVN.svn(['help', '--verbose'],'help')
+ expect(out).to match(/Global options/)
+ end
end
describe "ASF::SVN._svn_build_cmd" do
@@ -343,6 +356,27 @@ describe ASF::SVN do
expect(cmd).to eq(["svn", "help", "--non-interactive", "--revision",
'123', "--", "path"])
end
+ it "_svn_build_cmd(true, 'path') should fail with ArgumentError" do
+ expect {ASF::SVN._svn_build_cmd(true, 'path', {}) }.to
raise_error(ArgumentError, 'command must be a String or an Array of Strings')
+ end
+
+ it "_svn_build_cmd(['list', true], 'path') should fail with ArgumentError"
do
+ expect {ASF::SVN._svn_build_cmd([true], 'path', {}) }.to
raise_error(ArgumentError, 'command true must be a String')
+ end
+
+ it "_svn_build_cmd([true], 'path') should fail with ArgumentError" do
+ expect {ASF::SVN._svn_build_cmd([true], 'path', {}) }.to
raise_error(ArgumentError, 'command true must be a String')
+ end
+
+ it "_svn_build_cmd(['help', 'xyz'], 'path') should report error" do
+ expect {
+ # seems to be necessary to reset logger otherwise output is lost.
However it's only necessary in conjunction with
+ # other tests such as committee_spec.rb (q.v.)
+ Wunderbar.logger = nil
+ ASF::SVN._svn_build_cmd(['help','xyz'], 'path', {})
+ }.to output("_ERROR Invalid option \"xyz\"\n").to_stderr
+ end
+
end
describe "ASF::SVN.svnpath!" do
diff --git a/lib/spec/lib/svn_wunderbar_spec.rb
b/lib/spec/lib/svn_wunderbar_spec.rb
index f25b86c..2320da1 100644
--- a/lib/spec/lib/svn_wunderbar_spec.rb
+++ b/lib/spec/lib/svn_wunderbar_spec.rb
@@ -141,6 +141,25 @@ describe "ASF::SVN.svn_" do
expect(act).to eq(exp.inspect)
end
+ it "['help'] should not include Global options" do
+ rc, out = _json do |_|
+ ASF::SVN.svn_(['help'], 'help', _)
+ end
+ expect(rc).to eq(0)
+ act = out['transcript'].join(' ')
+ expect(act).to match(/Describe the usage of this program or its
subcommands./)
+ expect(act).not_to match(/Global options/)
+ end
+
+ it "['help','-v'] should include Global options" do
+ rc, out = _json do |_|
+ ASF::SVN.svn_(['help','-v'], 'help', _)
+ end
+ expect(rc).to eq(0)
+ act = out['transcript'].join(' ')
+ expect(act).to match(/Describe the usage of this program or its
subcommands./)
+ expect(act).to match(/Global options/)
+ end
end
describe "ASF::SVN.update" do
diff --git a/lib/whimsy/asf/svn.rb b/lib/whimsy/asf/svn.rb
index 332b520..ae2cc72 100644
--- a/lib/whimsy/asf/svn.rb
+++ b/lib/whimsy/asf/svn.rb
@@ -290,8 +290,12 @@ module ASF
end
# retrieve list, [err] for a path in svn
- def self.list(path, user=nil, password=nil)
- return self.svn('list', path, {user: user, password: password})
+ def self.list(path, user=nil, password=nil, timestamp=false)
+ if timestamp
+ return self.svn(['list','--xml'], path, {user: user, password:
password})
+ else
+ return self.svn('list', path, {user: user, password: password})
+ end
end
# These keys are common to svn_ and svn
@@ -305,8 +309,24 @@ module ASF
raise ArgumentError.new "Following options not recognised:
#{bad_keys.inspect}"
end
+ if command.is_a? String
+ # TODO convert to ArgumentError after further testing
+ Wunderbar.error "command #{command.inspect} is invalid" unless command
=~ %r{^[a-z]+$}
+ else
+ if command.is_a? Array
+ command.each do |cmd|
+ raise ArgumentError.new "command #{cmd.inspect} must be a String"
unless cmd.is_a? String
+ end
+ Wunderbar.error "command #{command.first.inspect} is invalid" unless
command.first =~ %r{^[a-z]+$}
+ command.drop(1).each do |cmd|
+ Wunderbar.error "Invalid option #{cmd.inspect}" unless cmd =~
%r{^(--[a-z][a-z=]+|-[a-z])$}
+ end
+ else
+ raise ArgumentError.new "command must be a String or an Array of
Strings"
+ end
+ end
# build svn command
- cmd = ['svn', command, '--non-interactive']
+ cmd = ['svn', *command, '--non-interactive']
stdin = nil # for use with -password-from-stdin
msg = options[:msg]
@@ -361,6 +381,7 @@ module ASF
# low level SVN command
# params:
# command - info, list etc
+ # Can be array, e.g. ['list', '--xml']
# path - the path(s) to be used - String or Array of Strings
# options - hash of:
# :msg - ['--message', value]
@@ -414,6 +435,7 @@ module ASF
# low level SVN command for use in Wunderbar context (_json, _text etc)
# params:
# command - info, list etc
+ # Can be array, e.g. ['list', '--xml']
# path - the path(s) to be used - String or Array of Strings
# _ - wunderbar context
# options - hash of: