This likely will fail on Travis. help -v is a relatively recent addition to svn.
- Sam Ruby On Mon, Jul 13, 2020 at 7:00 PM <s...@apache.org> wrote: > > 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 <s...@apache.org> > 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: >