You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by se...@apache.org on 2020/06/30 21:44:19 UTC
[whimsy] branch master updated: Replace svnmucc_ tmpdir param with
options array
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 fcee33f Replace svnmucc_ tmpdir param with options array
fcee33f is described below
commit fcee33f69d305e3267cbf3f9891a6251d221c307
Author: Sebb <se...@apache.org>
AuthorDate: Tue Jun 30 22:44:10 2020 +0100
Replace svnmucc_ tmpdir param with options array
---
lib/spec/lib/svn_wunderbar_spec.rb | 34 ++++++++++++++++++++++++++++++----
lib/whimsy/asf/svn.rb | 28 ++++++++++++++++++++++------
2 files changed, 52 insertions(+), 10 deletions(-)
diff --git a/lib/spec/lib/svn_wunderbar_spec.rb b/lib/spec/lib/svn_wunderbar_spec.rb
index 4d89cf2..7186d2e 100644
--- a/lib/spec/lib/svn_wunderbar_spec.rb
+++ b/lib/spec/lib/svn_wunderbar_spec.rb
@@ -242,9 +242,9 @@ describe "ASF::SVN.svnmucc_" do
expect(ts).to be_kind_of(Array)
expect(ts[0]).to match(/--revision 123/)
end
- it "svnmucc_([['help']],'test',ENV_.new,_,nil,nil,nil) should not show revision in command" do
+ it "svnmucc_([['help']],'test',ENV_.new,_,nil) should not show revision in command" do
rc, out = _json do |_|
- ASF::SVN.svnmucc_([['help']],'test',ENV_.new,_,nil,nil)
+ ASF::SVN.svnmucc_([['help']],'test',ENV_.new,_,nil)
end
expect(rc).to eq(0)
expect(out).to be_kind_of(Hash)
@@ -252,12 +252,12 @@ describe "ASF::SVN.svnmucc_" do
expect(ts).to be_kind_of(Array)
expect(ts[0]).not_to match(/--revision/)
end
- it "svnmucc_([['help']],'test',ENV_.new,_,nil,tmpdir,nil) should have tmpdir in command" do
+ it "svnmucc_([['help']],'test',ENV_.new,_,nil,{tmpdir: tmpdir}) should have tmpdir in command" do
tmpdir=Dir.mktmpdir
path=File.join(tmpdir,'*')
expect(Dir[path]).to eq([])
rc, out = _json do |_|
- ASF::SVN.svnmucc_([['help']],'test',ENV_.new,_,nil,tmpdir)
+ ASF::SVN.svnmucc_([['help']],'test',ENV_.new,_,nil,{tmpdir: tmpdir})
end
expect(rc).to eq(0)
expect(out).to be_kind_of(Hash)
@@ -266,4 +266,30 @@ describe "ASF::SVN.svnmucc_" do
expect(ts[0]).to match(%r{--extra-args #{tmpdir}})
expect(Dir[path]).to eq([]) # no files remaining
end
+ it "svnmucc_([['help']],'test',ENV_.new,_,nil,{dryrun: true}) should echo params" do
+ rc, out = _json do |_|
+ ASF::SVN.svnmucc_([['help']],'test',ENV_.new,_,nil,{dryrun: true})
+ end
+ expect(rc).to eq(0)
+ expect(out).to be_kind_of(Hash)
+ ts = out['transcript']
+ expect(ts).to be_kind_of(Array)
+ expect(ts.size).to eq(2)
+ expect(ts[0]).to match(%r{\$ echo svnmucc .*--message test})
+ expect(ts[1]).to match(%r{^svnmucc .*--message test})
+ end
+ it "svnmucc_([['help']],'test',ENV_.new,_,nil,{verbose: true}) should echo params" do
+ rc, out = _json do |_|
+ ASF::SVN.svnmucc_([['help']],'test',ENV_.new,_,nil,{verbose: true})
+ end
+ expect(rc).to eq(0)
+ expect(out).to be_kind_of(Hash)
+ ts = out['transcript']
+ expect(ts).to be_kind_of(Array)
+ expect(ts[0]).to match(%r{\$ echo})
+ # either --password pass or --password-from-stdin {:stdin=>\"pass\"}
+ # This depends on the order in which the command line is built up
+ expect(ts[1]).to match(%r{^svnmucc .*--message test .*--username user --password.+pass})
+ expect(ts[4]).to eq('usage: svnmucc ACTION...') # output of svnmucc help
+ end
end
\ No newline at end of file
diff --git a/lib/whimsy/asf/svn.rb b/lib/whimsy/asf/svn.rb
index 81508b5..9dcb78b 100644
--- a/lib/whimsy/asf/svn.rb
+++ b/lib/whimsy/asf/svn.rb
@@ -634,7 +634,10 @@ module ASF
# env - environment (username/password)
# _ - Wunderbar context
# revision - the --revision svnmucc parameter (unless nil)
- # temp (optional) - use this temporary directory (and don't remove it)
+ # options - hash:
+ # :tmpdir - use this temporary directory (and don't remove it)
+ # :verbose - if true, show command details
+ # :dryrun - if true, don't execute command, but show it instead
# The commands must themselves be arrays to ensure correct processing of white-space
# For example:
# commands = []
@@ -642,14 +645,20 @@ module ASF
# commands << ['mv',url1,url2]
# commands << ['rm',url3]
# ASF::SVN.svnmucc_(commands,message,env,_,revision)
- def self.svnmucc_(commands, msg, env, _, revision, temp=nil)
+ def self.svnmucc_(commands, msg, env, _, revision, options={})
raise ArgumentError.new 'commands must be an array' unless Array === commands
raise ArgumentError.new 'msg must not be nil' unless msg
raise ArgumentError.new 'env must not be nil' unless env
raise ArgumentError.new '_ must not be nil' unless _
+ bad_keys = options.keys - [:dryrun, :verbose, :tmpdir]
+ if bad_keys.size > 0
+ raise ArgumentError.new "Following options not recognised: #{bad_keys.inspect}"
+ end
+
require 'tempfile'
+ temp = options[:tmpdir]
tmpdir = temp ? temp : Dir.mktmpdir.untaint
begin
@@ -685,10 +694,17 @@ module ASF
syscmd << ['--username', env.user, '--password', env.password]
end
end
- if _.instance_of?(Wunderbar::JsonBuilder) or _.instance_of?(Wunderbar::TextBuilder)
- _.system syscmd, sysopts, sysopts # needs two hashes
+ if options[:verbose]
+ _.system 'echo',[syscmd.flatten,sysopts.to_s]
+ end
+ if options[:dryrun]
+ _.system syscmd.insert(0,'echo')
else
- _.system syscmd, sysopts
+ if _.instance_of?(Wunderbar::JsonBuilder) or _.instance_of?(Wunderbar::TextBuilder)
+ _.system syscmd, sysopts, sysopts # needs two hashes
+ else
+ _.system syscmd, sysopts
+ end
end
ensure
File.delete cmdfile # always drop the command file
@@ -772,7 +788,7 @@ module ASF
if options[:dryrun]
puts cmds # TODO: not sure this is correct for Wunderbar
else
- rc = ASF::SVN.svnmucc_(cmds,msg,env,_,filerev,tmpdir)
+ rc = ASF::SVN.svnmucc_(cmds,msg,env,_,filerev,{tmpdir: tmpdir})
raise "svnmucc failure #{rc} committing" unless rc == 0
end
ensure