You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@whimsical.apache.org by Sam Ruby <ru...@apache.org> on 2016/03/06 02:42:37 UTC
[whimsy.git] [1/1] Commit c9a24d5: update committee info.txt
Commit c9a24d5b64ef8ae28aef74dfcfcda2e27e671672:
update committee info.txt
Branch: refs/heads/master
Author: Sam Ruby <ru...@intertwingly.net>
Committer: Sam Ruby <ru...@intertwingly.net>
Pusher: rubys <ru...@apache.org>
------------------------------------------------------------
lib/whimsy/asf/mail.rb | ++ --
www/roster/main.rb | +
www/roster/views/actions/committee.json.rb | ++++++++++++
www/roster/views/pmc/pmc.js.rb | ++++++ ----
------------------------------------------------------------
62 changes: 56 additions, 6 deletions.
------------------------------------------------------------
diff --git a/lib/whimsy/asf/mail.rb b/lib/whimsy/asf/mail.rb
index 98aff2a..62701c2 100644
--- a/lib/whimsy/asf/mail.rb
+++ b/lib/whimsy/asf/mail.rb
@@ -56,10 +56,10 @@ def self.configure
if sendmail
# convert string keys to symbols
- options = Hash[options.map {|key, value| [key.to_sym, value]}]
+ options = Hash[sendmail.map {|key, value| [key.to_sym, value.untaint]}]
# extract delivery method
- method = options.delete(:delivery_method).to_s.to_sym
+ method = options.delete(:delivery_method).to_sym
else
# provide defaults that work on whimsy-vm* infrastructure. Since
# procmail is configured with a self-signed certificate, verification
diff --git a/www/roster/main.rb b/www/roster/main.rb
index 217fb41..7f49442 100755
--- a/www/roster/main.rb
+++ b/www/roster/main.rb
@@ -8,6 +8,7 @@
require 'whimsy/asf/podlings'
require 'mail'
+require 'tmpdir'
require 'wunderbar/sinatra'
require 'wunderbar/bootstrap/theme'
diff --git a/www/roster/views/actions/committee.json.rb b/www/roster/views/actions/committee.json.rb
index f7818a9..97c3021 100644
--- a/www/roster/views/actions/committee.json.rb
+++ b/www/roster/views/actions/committee.json.rb
@@ -14,6 +14,53 @@
end
end
+ # update committee-info.txt
+ if @targets.include? 'info'
+ Dir.mktmpdir do |tmpdir|
+ # checkout committers/board
+ Kernel.system 'svn', 'checkout', '--quiet',
+ '--no-auth-cache', '--non-interactive',
+ '--username', env.user.untaint, '--password', env.password.untaint,
+ 'https://svn.apache.org/repos/private/committers/board', tmpdir.untaint
+
+ # read in committee-info.txt
+ file = File.join(tmpdir, 'committee-info.txt')
+ info = File.read(file)
+
+ info.scan(/^\* (?:.|\n)*?\n\s*?\n/).each do |block|
+ # find committee
+ next unless ASF::Committee.find(block[/\* (.*?)\s+\(/, 1]).id == @pmc
+
+ # split block into lines
+ lines = block.strip.split("\n")
+
+ # add or remove person
+ if @action == 'add'
+ unless lines.any? {|line| line.include? "<#{...@apache.org>"}
+ name = "#{person.public_name.ljust(26)} <#{...@apache.org>"
+ lines << " #{name.ljust(60)}[#{Time.new.strftime('%Y-%m-%d')}]"
+ end
+ else
+ lines.reject! {|line| line.include? "<#{...@apache.org>"}
+ end
+
+ # replace committee block with new information
+ info.sub! block, ([lines.shift] + lines.sort).join("\n") + "\n\n"
+ break
+ end
+
+ # write file out to disk
+ File.write(file, info)
+
+ # commit changes
+ Kernel.system 'svn', 'commit', '--quiet',
+ '--no-auth-cache', '--non-interactive',
+ '--username', env.user.untaint, '--password', env.password.untaint,
+ tmpdir.untaint, '--message',
+ "#{@pmc} #{@action == 'add' ? '+' : '-'}= #{@id}"
+ end
+ end
+
# compose E-mail
action = (@action == 'add' ? 'added to' : 'removed from')
if pmc
diff --git a/www/roster/views/pmc/pmc.js.rb b/www/roster/views/pmc/pmc.js.rb
index 1e2402e..f896e1e 100644
--- a/www/roster/views/pmc/pmc.js.rb
+++ b/www/roster/views/pmc/pmc.js.rb
@@ -101,13 +101,13 @@ def render
if @@person.date == 'pending'
_button.btn.btn_primary 'Add as a committer and to the PMC',
# not added yet
- data_action: 'add pmc commit',
+ data_action: 'add pmc info commit',
data_target: '#confirm', data_toggle: 'modal',
data_confirmation: "Add #{@@person.name} to the " +
"#{@@committee.display_name} PMC and grant committer access?"
_button.btn.btn_warning 'Add to PMC only', data_target: '#confirm',
- data_action: 'add pmc', data_toggle: 'modal',
+ data_action: 'add pmc info', data_toggle: 'modal',
data_confirmation: "Add #{@@person.name} to the " +
"#{@@committee.display_name} PMC?"
elsif not @@person.date
@@ -118,7 +118,8 @@ def render
data_confirmation: "Remove #{@@person.name} from LDAP?"
_button.btn.btn_success 'Add to committee_info.txt',
- disabled: true,
+ data_action: 'add info',
+ data_target: '#confirm', data_toggle: 'modal',
data_confirmation: "Add to #{@@person.name} committee_info.txt"
elsif not @@person.ldap
# in committee-info.txt but not in ldap
@@ -128,7 +129,8 @@ def render
data_confirmation: "Add #{@@person.name} to LDAP?"
_button.btn.btn_warning 'Remove from committee_info.txt',
- disabled: true,
+ data_action: 'remove info',
+ data_target: '#confirm', data_toggle: 'modal',
data_confirmation:
"Remove #{@@person.name} from committee_info.txt?"
else