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 a15b10f WHIMSY-336 atomic SVN updates
a15b10f is described below
commit a15b10f68a87355708c0828dde9006ce99fe804c
Author: Sebb <[email protected]>
AuthorDate: Tue Jul 21 12:00:56 2020 +0100
WHIMSY-336 atomic SVN updates
Extract common code
---
www/secretary/workbench/tasks.rb | 40 ++++++++++++++++++++++
www/secretary/workbench/views/actions/ccla.json.rb | 26 +++-----------
.../workbench/views/actions/grant.json.rb | 26 ++------------
3 files changed, 48 insertions(+), 44 deletions(-)
diff --git a/www/secretary/workbench/tasks.rb b/www/secretary/workbench/tasks.rb
index ced5fb2..cba6bd1 100644
--- a/www/secretary/workbench/tasks.rb
+++ b/www/secretary/workbench/tasks.rb
@@ -77,6 +77,46 @@ class Wunderbar::JsonBuilder
]
end
+ # Commit new file(s) and update associated index
+ # e.g. add ccla.pdf, ccla.pdf.asc to documents/cclas/xyz/ and update
officers/cclas.txt
+ # Parameters:
+ # index_dir - SVN alias of directory containint the index (e.g. foundation
or officers)
+ # index_name - name of index file to update (e.g. cclas.txt)
+ # docdir - SVN alias for document directory (e.g. cclas)
+ # docname - document name (as per email)
+ # docsig - document signature (may be null)
+ # outfilename - name of output file (without extension)
+ # outfileext - output file extension
+ # emessage - the email message
+ # svnmessage - the svn commit message
+ # block - the block which is passed the contents of the index file to be
updated
+ def svn_multi(index_dir, index_name, docdir, docname, docsig, outfilename,
outfileext, emessage, svnmessage, &block)
+ ASF::SVN.multiUpdate_(ASF::SVN.svnpath!(index_dir, index_name),
svnmessage, env, _) do |text|
+
+ extras = []
+ # write the attachments as file(s)
+ dest = emessage.write_att(docname, docsig)
+
+ if dest.size > 1 # write to a container directory
+ unless outfilename =~ /\A[a-zA-Z][-.\w]+\z/ # previously done by
write_svn
+ raise IOError.new("invalid filename: #{outfilename}")
+ end
+ container = ASF::SVN.svnpath!(docdir, outfilename)
+ extras << ['mkdir', container]
+ dest.each do |name, path|
+ extras << ['put', path, File.join(container, name)]
+ end
+ else
+ name, path = dest.flatten
+ extras << ['put', path,
ASF::SVN.svnpath!(docdir,"#{outfilename}#{outfileext}")]
+ end
+
+ text = yield text # update the index
+
+ [text, extras]
+ end
+ end
+
def template(name)
path = File.expand_path("../templates/#{name}", __FILE__.untaint)
ERB.new(File.read(path.untaint).untaint).result(binding)
diff --git a/www/secretary/workbench/views/actions/ccla.json.rb
b/www/secretary/workbench/views/actions/ccla.json.rb
index 92e6b51..e9377d1 100644
--- a/www/secretary/workbench/views/actions/ccla.json.rb
+++ b/www/secretary/workbench/views/actions/ccla.json.rb
@@ -62,30 +62,14 @@ task "svn commit documents/cclas/#@filename#{fileext} and
update cclas.txt" do
end
complete do |dir|
- ASF::SVN.multiUpdate_(ASF::SVN.svnpath!('officers', 'cclas.txt'),
@document, env, _) do |text|
-
- extras = []
- # write the file(s)
- dest = message.write_att(@selected, @signature)
-
- if dest.size > 1 # write to a container directory
- unless @filename =~ /\A[a-zA-Z][-.\w]+\z/ # previously done by
write_svn
- raise IOError.new("invalid filename: #{@filename}")
- end
- container = ASF::SVN.svnpath!('cclas', @filename)
- extras << ['mkdir', container]
- dest.each do |name, path|
- extras << ['put', path, File.join(container, name)]
- end
- else
- name, path = dest.flatten
- extras << ['put', path,
ASF::SVN.svnpath!('cclas',"#{@filename}#{fileext}")]
- end
-
- [text + @cclalines + "\n", extras]
+
+ svn_multi('officers', 'cclas.txt', 'cclas', @selected, @signature,
@filename, fileext, message, @document) do |input|
+ # append entry to cclas.txt
+ text + @cclalines +"\n"
end
end
+
end
########################################################################
diff --git a/www/secretary/workbench/views/actions/grant.json.rb
b/www/secretary/workbench/views/actions/grant.json.rb
index 3338c9f..33aa99d 100644
--- a/www/secretary/workbench/views/actions/grant.json.rb
+++ b/www/secretary/workbench/views/actions/grant.json.rb
@@ -56,33 +56,13 @@ task "svn commit documents/grants/#@filename#{fileext} and
update grants.txt" do
end
complete do |dir|
- ASF::SVN.multiUpdate_(ASF::SVN.svnpath!('officers', 'grants.txt'),
@document, env, _) do |input|
-
- extras = []
-
- # write the file(s)
- dest = message.write_att(@selected, @signature)
-
- if dest.size > 1 # write to a container directory
- unless @filename =~ /\A[a-zA-Z][-.\w]+\z/
- raise IOError.new("invalid filename: #{@filename}")
- end
- container = ASF::SVN.svnpath!('grants', @filename)
- extras << ['mkdir', container]
- dest.each do |name, path|
- extras << ['put', path, File.join(container, name)]
- end
- else
- name, path = dest.flatten
- extras << ['put', path,
ASF::SVN.svnpath!('grants',"#{@filename}#{fileext}")]
- end
+ svn_multi('officers', 'grants.txt', 'grants', @selected, @signature,
@filename, fileext, message, @document) do |input|
# update grants.txt
marker = "\n# registering. documents on way to Secretary.\n"
- out = input.split(marker).insert(1, "\n#{@grantlines}\n", marker).join
-
- [out, extras]
+ input.split(marker).insert(1, "\n#{@grantlines}\n", marker).join
end
+
end
end