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/04 22:41:30 UTC
[whimsy] branch master updated: Add common svn method;
start to replace individual svn code
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 538ccda Add common svn method; start to replace individual svn code
538ccda is described below
commit 538ccda6e5cb0af938e7ae5af02fedcb34af215c
Author: Sebb <se...@apache.org>
AuthorDate: Thu Jun 4 23:40:47 2020 +0100
Add common svn method; start to replace individual svn code
---
lib/whimsy/asf/svn.rb | 81 ++++++++++++++++++++++++++-------------------------
1 file changed, 42 insertions(+), 39 deletions(-)
diff --git a/lib/whimsy/asf/svn.rb b/lib/whimsy/asf/svn.rb
index 8314618..3adac2a 100644
--- a/lib/whimsy/asf/svn.rb
+++ b/lib/whimsy/asf/svn.rb
@@ -191,23 +191,7 @@ module ASF
# Last Changed Date: 2019-07-04 13:21:36 +0100 (Thu, 04 Jul 2019)
#
def self.getInfo(path, user=nil, password=nil)
- return nil, 'path must not be nil' unless path
-
- # build svn info command
- cmd = ['svn', 'info', path, '--non-interactive']
-
- # password was supplied, add credentials
- if password
- cmd += ['--username', user, '--password', password, '--no-auth-cache']
- end
-
- # issue svn info command
- out, err, status = Open3.capture3(*cmd)
- if status.success?
- return out
- else
- return nil, err
- end
+ return self.svn('info', path, {user: user, password: password})
end
# svn info details as a Hash
@@ -259,19 +243,9 @@ module ASF
# Note: Path, Schedule and Depth are not currently supported
#
def self.getInfoItem(path, item, user=nil, password=nil)
- return nil, 'path must not be nil' unless path
-
- # build svn info command
- cmd = ['svn', 'info', path, '--non-interactive', '--show-item', item]
-
- # password was supplied, add credentials
- if password
- cmd += ['--username', user, '--password', password, '--no-auth-cache']
- end
-
- # issue svn info command
- out, err, status = Open3.capture3(*cmd)
- if status.success?
+ out, err = self.svn('info', path, {flags: ['--show-item', item],
+ user: user, password: password})
+ if out
if item.end_with? 'revision' # svn version 1.9.3 appends trailing spaces to *revision items
return out.chomp.rstrip
else
@@ -284,17 +258,47 @@ module ASF
# 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})
+ end
+
+ # low level SVN command
+ # params:
+ # command - info, list etc
+ # path - the path to be used
+ # options - hash of:
+ # :flags - string or array of strings, e.g. '-v', ['--depth','empty']
+ # :user, :password - auth
+ # :verbose - show command
+ # Returns either:
+ # - stdout
+ # - nil, err
+ def self.svn(command, path , options = {})
+ return nil, 'command must not be nil' unless command
return nil, 'path must not be nil' unless path
- # build svn info command
- cmd = ['svn', 'list', path, '--non-interactive']
+ # build svn command
+ cmd = ['svn', command, path, '--non-interactive']
+
+ flags = options[:flags]
+ if flags
+ if flags.is_a? String
+ cmd << flags
+ elsif flags.is_a? Array
+ cmd += flags
+ else
+ return nil, "flags '#{flags.inspect}' must be string or array"
+ end
+ end
# password was supplied, add credentials
+ password = options[:password]
if password
- cmd += ['--username', user, '--password', password, '--no-auth-cache']
+ cmd += ['--username', options[:user], '--password', password, '--no-auth-cache']
end
- # issue svn list command
+ p cmd if options[:verbose]
+
+ # issue svn command
out, err, status = Open3.capture3(*cmd)
if status.success?
return out
@@ -348,10 +352,9 @@ module ASF
# Note: working copies updated out via cron jobs can only be accessed
# read only by processes that run under the Apache web server.
def self.updateSimple(path)
- cmd = ['svn', 'update', path, '--non-interactive']
- stdout, status = Open3.capture2(*cmd)
+ stdout, _ = self.svn('update',path)
revision = 0
- if status.success?
+ if stdout
# extract revision number
revision = stdout[/^At revision (\d+)/, 1]
end
@@ -368,7 +371,7 @@ module ASF
# use dup to make testing easier
user = env.user.dup.untaint
pass = env.password.dup.untaint
- # checkout committers/board
+ # checkout committers/board (this does not have many files currently)
Kernel.system 'svn', 'checkout', '--quiet',
'--no-auth-cache', '--non-interactive',
'--depth', 'files',
@@ -487,7 +490,7 @@ module ASF
end
# DRAFT DRAFT DRAFT
- # Low-level interface to svnmucc
+ # Low-level interface to svnmucc, intended for use with wunderbar
# Parameters:
# commands - array of commands
# msg - commit message