Your message dated Tue, 03 Sep 2019 05:32:37 +0000
with message-id <e1i51qj-0003ks...@fasolo.debian.org>
and subject line Bug#938607: Removed package(s) from unstable
has caused the Debian Bug report #469184,
regarding svnmailer: Should support multiple recipients with a single to_addr 
containing substitutions
to be marked as done.

This means that you claim that the problem has been dealt with.
If this is not the case it is now your responsibility to reopen the
Bug report if necessary, and/or fix the problem forthwith.

(NB: If you are a system administrator and have no idea what this
message is talking about, this may indicate a serious mail system
misconfiguration somewhere. Please contact ow...@bugs.debian.org
immediately.)


-- 
469184: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=469184
Debian Bug Tracking System
Contact ow...@bugs.debian.org with problems
--- Begin Message ---
Package: svnmailer
Version: 1.0.8-8
Severity: wishlist

Hi,

when you use construct like those:
for_paths = (deb-maint|ext-maint|orphaned)/(?P<package>[^/]+)/
# Send to the PTS of the source package. Add any general commit list that
# you have for the project.
bcc_addr = %(package)s_...@packages.qa.debian.org
to_fake = %(package)s...@packages.qa.debian.org

And when the commit spans multiple directories and thus matches multiple
values of <package>, it will only send one mail to one of the packages.
It should properly detect the list of packages and send to all intended
recipients.

Attached is an old patch where I was beginning to do this, it's advanced
enough to prove that it's doable but it still needs some checks from
someone more familiar with the code. I did send that patch to upstream
at the time I wrote it (April 2006) but it seems it never went further.

I was cleaning my harddrive and stumbled upon this patch and thus decided
to record it here in the BTS so that I can safely remove it from my disk
and still have some hope that the feature might one day be implemented.
:-)

Cheers,

-- System Information:
Debian Release: lenny/sid
  APT prefers unstable
  APT policy: (500, 'unstable'), (500, 'testing'), (500, 'stable'), (1, 
'experimental')
Architecture: i386 (i686)

Kernel: Linux 2.6.24-1-686 (SMP w/1 CPU core)
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
diff -ur svnmailer-1.0.8.old/src/lib/svnmailer/main.py 
svnmailer-1.0.8/src/lib/svnmailer/main.py
--- svnmailer-1.0.8.old/src/lib/svnmailer/main.py       2006-04-17 
10:29:06.000000000 +0000
+++ svnmailer-1.0.8/src/lib/svnmailer/main.py   2006-04-22 12:37:42.000000000 
+0000
@@ -256,6 +256,7 @@
 
             # store the substdict for later use
             for name, value in subst.items():
+               print "DEBUG: Store subdict: %s => %s" % (name, value)
                 group._sub_(name, value)
 
             (selected_groups, ignored_groups)[
diff -ur svnmailer-1.0.8.old/src/lib/svnmailer/notifier/_mail.py 
svnmailer-1.0.8/src/lib/svnmailer/notifier/_mail.py
--- svnmailer-1.0.8.old/src/lib/svnmailer/notifier/_mail.py     2006-04-17 
10:29:06.000000000 +0000
+++ svnmailer-1.0.8/src/lib/svnmailer/notifier/_mail.py 2006-04-22 
13:08:57.000000000 +0000
@@ -254,7 +254,7 @@
             from_addrs.extend(group.from_addr or [])
             to_addrs.extend(group.to_addr or [])
             bcc_addrs.extend(group.bcc_addr or [])
-            to_fakes.extend(group.to_fake and [group.to_fake] or [])
+            to_fakes.extend(group.to_fake or [])
             reply_to.extend(
                 group.reply_to_addr and [group.reply_to_addr] or []
             )
diff -ur svnmailer-1.0.8.old/src/lib/svnmailer/settings.py 
svnmailer-1.0.8/src/lib/svnmailer/settings.py
--- svnmailer-1.0.8.old/src/lib/svnmailer/settings.py   2006-04-17 
10:29:06.000000000 +0000
+++ svnmailer-1.0.8/src/lib/svnmailer/settings.py       2006-04-22 
13:00:27.000000000 +0000
@@ -152,7 +152,7 @@
                                            {'subst': True, 'map': True}),
             'to_addr'                    : ('tokenlist',
                                            {'subst': True, 'map': True}),
-            'to_fake'                    : ('unicode',
+            'to_fake'                    : ('tokenlist',
                                            {'subst': True, 'map': True}),
             'bcc_addr'                   : ('tokenlist',
                                            {'subst': True, 'map': True}),
diff -ur svnmailer-1.0.8.old/src/lib/svnmailer/struct_accessors.py 
svnmailer-1.0.8/src/lib/svnmailer/struct_accessors.py
--- svnmailer-1.0.8.old/src/lib/svnmailer/struct_accessors.py   2006-04-17 
10:29:06.000000000 +0000
+++ svnmailer-1.0.8/src/lib/svnmailer/struct_accessors.py       2006-04-22 
12:36:49.000000000 +0000
@@ -46,6 +46,7 @@
 
 # global imports
 from svnmailer import typedstruct, util
+import types
 
 
 # Exceptions
@@ -421,7 +422,15 @@
 
     def doSubstitute(self, value, subst, arg):
         """ Substitutes the items """
-        return tuple([util.substitute(token, subst) for token in value])
+       result = []
+       for token in value:
+           subst_token = util.substitute(token, subst)
+           if type(subst_token) == types.ListType:
+               print "DEBUG: Template generated several items"
+               result.extend(subst_token)
+           else:
+               result.append(subst_token)
+        return tuple(result)
 
 
     def doPostmap(self, value, mapper, arg):
diff -ur svnmailer-1.0.8.old/src/lib/svnmailer/typedstruct.py 
svnmailer-1.0.8/src/lib/svnmailer/typedstruct.py
--- svnmailer-1.0.8.old/src/lib/svnmailer/typedstruct.py        2006-04-17 
10:29:06.000000000 +0000
+++ svnmailer-1.0.8/src/lib/svnmailer/typedstruct.py    2006-04-22 
12:41:42.000000000 +0000
@@ -84,6 +84,7 @@
 
 # global imports
 from svnmailer import util
+import types
 
 
 class MemberDescriptor(object):
@@ -530,8 +531,18 @@
                 )
 
             subst = self.private.getSubst(instance)
-            if not default or not subst.has_key(name):
+            if not subst.has_key(name):
                 subst[name] = value
+           else:
+               # We keep all possible substitutions found
+               # Just ensure to not have duplicates
+               if type(subst[name]) is types.ListType:
+                   if value not in subst[name]:
+                       subst[name].append(value)
+               else:
+                   if subst[name] != value:
+                       newlist = [ subst[name], value ]
+                       subst[name] = newlist
 
         def getdict():
             """ Returns the current dict (read-only) """
diff -ur svnmailer-1.0.8.old/src/lib/svnmailer/util.py 
svnmailer-1.0.8/src/lib/svnmailer/util.py
--- svnmailer-1.0.8.old/src/lib/svnmailer/util.py       2006-04-17 
10:29:06.000000000 +0000
+++ svnmailer-1.0.8/src/lib/svnmailer/util.py   2006-04-22 13:14:47.000000000 
+0000
@@ -44,7 +44,7 @@
 ]
 
 # global imports
-import locale, os, sys
+import locale, os, sys, types
 
 
 class TempFile(object):
@@ -420,8 +420,45 @@
     if template is None:
         return None
 
-    return template % SafeDict(subst.items())
-
+    # Create the list of all substitutions to do
+    allsubst = [ {} ]
+    for name, value in subst.items():
+       if type(value) == types.ListType:
+           print "DEBUG: param %s is multiple" % name
+           # Take each existing subsitution and multiply them by the
+           # number of different values for the current parameter
+           newallsubst = []
+           for s in allsubst:
+               for v in value:
+                   print "DEBUG: value %s" % v
+                   newsubst = dict(s)
+                   newsubst[name] = v
+                   newallsubst.append(newsubst)
+           allsubst = newallsubst
+       else:
+           for s in allsubst:
+               s[name] = value
+   
+    for s in allsubst:
+       print "DEBUG: Subst with:"
+       for n, v in s.items():
+           print "%s => %s" % (n, v)
+   
+    result = [ template % SafeDict(s.items()) for s in allsubst ]
+
+    # Keep uniq values only
+    seen = {}
+    for r in result:
+       seen[r] = 1
+    result = seen.keys()
+    
+    for r in result:
+       print "DEBUG: Substituted element: %s" % r
+
+    if len(result) == 1:
+       return result[0]
+    else:
+       return result
 
 def filterForXml(value):
     """ Replaces control characters with replace characters

--- End Message ---
--- Begin Message ---
Version: 1.0.9-3+rm

Dear submitter,

as the package svnmailer has just been removed from the Debian archive
unstable we hereby close the associated bug reports.  We are sorry
that we couldn't deal with your issue properly.

For details on the removal, please see https://bugs.debian.org/938607

The version of this package that was in Debian prior to this removal
can still be found using http://snapshot.debian.org/.

This message was generated automatically; if you believe that there is
a problem with it please contact the archive administrators by mailing
ftpmas...@ftp-master.debian.org.

Debian distribution maintenance software
pp.
Scott Kitterman (the ftpmaster behind the curtain)

--- End Message ---

Reply via email to