You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@whimsical.apache.org by Sam Ruby <ru...@intertwingly.net> on 2020/07/13 23:03:43 UTC

Re: [whimsy] branch master updated: Allow command to be an array

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 <se...@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 <se...@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:
>