WHIMSY-336 atomic commits
Fix cclas.json.rb to perform an atomic commit for
documents/cclas and foundation/officers/cclas.txt
diff --git a/www/secretary/workbench/views/actions/ccla.json.rb b/www/secretary/workbench/views/actions/ccla.json.rb
index 54f88b3..952fcf0 100644
--- a/www/secretary/workbench/views/actions/ccla.json.rb
+++ b/www/secretary/workbench/views/actions/ccla.json.rb
@@ -33,67 +33,55 @@
@document = "CCLA from #{@company}"
########################################################################
-# document/cclas #
+# document/cclas and cclas.txt #
########################################################################
-# write attachment (+ signature, if present) to the documents/cclas directory
-task "svn commit documents/cclas/#@filename#{fileext}" do
+task "svn commit documents/cclas/#@filename#{fileext} and update cclas.txt" do
+
+ # construct line to be inserted in cclas.txt
+ @cclalines = "notinavail:" + @company.strip
+ unless @contact.empty?
+ @cclalines += " - #{@contact.strip}"
+ end
+ @cclalines += ":#{@email.strip}:Signed Corp CLA"
+ unless @employees.empty?
+ @cclalines += " for #{@employees.strip.gsub(/\s*\n\s*/, ', ')}"
+ end
+ unless @product.empty?
+ @cclalines += " for #{@product.strip}"
+ end
+
form do
_input value: @selected, name: 'selected'
if @signature and not @signature.empty?
_input value: @signature, name: 'signature'
end
- end
- complete do |dir|
- # checkout empty directory
- svn 'checkout', '--depth', 'empty',
- ASF::SVN.svnurl('cclas'), "#{dir}/cclas"
-
- # create/add file(s)
- dest = message.write_svn("#{dir}/cclas", @filename, @selected, @signature)
-
- # Show files to be added
- svn 'status', "#{dir}/cclas"
-
- # commit changes
- svn 'commit', "#{dir}/cclas/#{@filename}#{fileext}", '-m', @document
- end
-end
-
-########################################################################
-# officers/cclas.txt #
-########################################################################
-
-# insert line into cclas.txt
-task "svn commit foundation/officers/cclas.txt" do
- # construct line to be inserted
- @cclalines = "notinavail:" + @company.strip
-
- unless @contact.empty?
- @cclalines += " - #{@contact.strip}"
- end
-
- @cclalines += ":#{@email.strip}:Signed Corp CLA"
-
- unless @employees.empty?
- @cclalines += " for #{@employees.strip.gsub(/\s*\n\s*/, ', ')}"
- end
-
- unless @product.empty?
- @cclalines += " for #{@product.strip}"
- end
-
- form do
_input value: @cclalines, name: 'cclalines'
end
complete do |dir|
- path = ASF::SVN.svnpath!('officers', 'cclas.txt')
- ASF::SVN.update(path, @document, env, _, {diff: true}) do |tmpdir, contents|
- contents + @cclalines + "\n"
+ 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
+ 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]
end
+
end
end