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 cd58ea36 Use deep copy on hashes
cd58ea36 is described below

commit cd58ea3647d4a3ab2e0e0c80244ee2e879b2440f
Author: Sebb <[email protected]>
AuthorDate: Sun Apr 23 00:37:11 2023 +0100

    Use deep copy on hashes
---
 lib/whimsy/asf.rb                | 9 +++++++++
 www/roster/models/committee.rb   | 2 +-
 www/roster/models/nonpmc.rb      | 2 +-
 www/roster/views/members.html.rb | 2 +-
 4 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/lib/whimsy/asf.rb b/lib/whimsy/asf.rb
index 0ebadbcb..aca3f8be 100644
--- a/lib/whimsy/asf.rb
+++ b/lib/whimsy/asf.rb
@@ -38,4 +38,13 @@ module ASF
     return @info if @info
     @info = `git show --format="%h  %ci"  -s HEAD`.strip
   end
+
+  # duplicate an object, allowing for nested hashes
+  def self.dup(obj)
+    obj.dup.tap do |new_obj|
+      new_obj.each do |key, val|
+        new_obj[key] = ASF.dup(val) if val.is_a?(Hash)
+      end
+    end
+  end
 end
diff --git a/www/roster/models/committee.rb b/www/roster/models/committee.rb
index 3a471abe..b7c0e875 100644
--- a/www/roster/models/committee.rb
+++ b/www/roster/models/committee.rb
@@ -48,7 +48,7 @@ class Committee
       lists = ASF::MLIST.domain_lists(pmc.mail_list, false)
     end
 
-    roster = pmc.roster.dup # from committee-info
+    roster = ASF.dup(pmc.roster) # from committee-info
     # ensure PMC members are all processed even they don't belong to the owner 
group
     roster.each do |key, value|
       value[:role] = 'PMC member'
diff --git a/www/roster/models/nonpmc.rb b/www/roster/models/nonpmc.rb
index 9cd25949..cd02a72d 100644
--- a/www/roster/models/nonpmc.rb
+++ b/www/roster/models/nonpmc.rb
@@ -49,7 +49,7 @@ class NonPMC
       lists = ASF::MLIST.domain_lists(mail_list, false)
     end
 
-    roster = cttee.roster.dup
+    roster = ASF.dup(cttee.roster)
     # if the roster is empty, then add the chair(s)
     if roster.empty?
       cttee.chairs.each do |ch|
diff --git a/www/roster/views/members.html.rb b/www/roster/views/members.html.rb
index 828be174..67cdb919 100644
--- a/www/roster/views/members.html.rb
+++ b/www/roster/views/members.html.rb
@@ -13,7 +13,7 @@ _html do
         members: 'members'
       }
     ) do
-      members = ASF::Member.list.dup
+      members = ASF.dup(ASF::Member.list)
       # ********************************************************************
       # *                             Summary                              *
       # ********************************************************************

Reply via email to