Author: gstein
Date: Wed Oct 25 05:30:24 2023
New Revision: 1913310
URL: http://svn.apache.org/viewvc?rev=1913310&view=rev
Log:
Move construction of a subject line from the output mechanism over to
the action classes.
Note: this includes a small shim to avoid copy/paste while making
substantial changes. That'll be fixed next.
* tools/hook-scripts/mailer/mailer.py:
(MailedOutput.start): param is now SUBJECT_LINE
(MailedOutput.mail_headers): take a full SUBJECT_LINE rather than
constructing it within this method.
(SMTPOutput.start, PipeOutput.start): take a SUBJECT_LINE and pass
that along to the .mail_headers() method.
(StandardOutput.start): take a full SUBJECT_LINE rather than
constructing it within this method.
(Messenger.make_subject): temporary shim to call the code still
located within OutbaseBase.
(Commit.generate, PropChange.generate, Lock.generate): construct the
full SUBJECT_LINE here, rather than within .start()
Modified:
subversion/trunk/tools/hook-scripts/mailer/mailer.py
Modified: subversion/trunk/tools/hook-scripts/mailer/mailer.py
URL:
http://svn.apache.org/viewvc/subversion/trunk/tools/hook-scripts/mailer/mailer.py?rev=1913310&r1=1913309&r2=1913310&view=diff
==============================================================================
--- subversion/trunk/tools/hook-scripts/mailer/mailer.py (original)
+++ subversion/trunk/tools/hook-scripts/mailer/mailer.py Wed Oct 25 05:30:24
2023
@@ -179,6 +179,7 @@ class OutputBase:
self.prefix_param = prefix_param
self._CHUNKSIZE = 128 * 1024
+ ### TBD: move this to Messenger.
def make_subject(self, basic_subject, group, params):
prefix = self.cfg.get(self.prefix_param, group, params)
if prefix:
@@ -244,7 +245,7 @@ class OutputBase:
class MailedOutput(OutputBase):
- def start(self, basic_subject, group, params):
+ def start(self, subject_line, group, params):
# whitespace (or another character) separated list of addresses
# which must be split into a clean list
to_addr_in = self.cfg.get('to_addr', group, params)
@@ -289,11 +290,10 @@ class MailedOutput(OutputBase):
return ' '.join(map(_maybe_encode_header, hdr.split()))
- def mail_headers(self, basic_subject, group, params):
+ def mail_headers(self, subject_line, group, params):
from email import utils
- subject = self._rfc2047_encode(
- self.make_subject(basic_subject, group, params))
+ subject = self._rfc2047_encode(subject_line)
from_hdr = self._rfc2047_encode(self.from_addr)
to_hdr = self._rfc2047_encode(', '.join(self.to_addrs))
@@ -321,13 +321,13 @@ class MailedOutput(OutputBase):
class SMTPOutput(MailedOutput):
"Deliver a mail message to an MTA using SMTP."
- def start(self, basic_subject, group, params):
- MailedOutput.start(self, basic_subject, group, params)
+ def start(self, subject_line, group, params):
+ MailedOutput.start(self, subject_line, group, params)
self.buffer = BytesIO()
writer = Writer(self.buffer.write)
- writer.write(self.mail_headers(basic_subject, group, params))
+ writer.write(self.mail_headers(subject_line, group, params))
return writer
@@ -404,14 +404,12 @@ class SMTPOutput(MailedOutput):
class StandardOutput(OutputBase):
"Print the commit message to stdout."
- def start(self, basic_subject, group, params):
+ def start(self, subject_line, group, params):
encoding = sys.stdout.encoding if PY3 else 'utf-8'
writer = Writer(_stdout.write, encoding)
writer.write("Group: " + (group or "defaults") + "\n")
- writer.write("Subject: "
- + self.make_subject(basic_subject, group, params)
- + "\n\n")
+ writer.write("Subject: %s\n\n" % (subject_line,))
return writer
@@ -428,8 +426,8 @@ class PipeOutput(MailedOutput):
# figure out the command for delivery
self.cmd = cfg.general.mail_command.split()
- def start(self, basic_subject, group, params):
- MailedOutput.start(self, basic_subject, group, params)
+ def start(self, subject_line, group, params):
+ MailedOutput.start(self, subject_line, group, params)
### gotta fix this. this is pretty specific to sendmail and qmail's
### mailwrapper program. should be able to use option param substitution
@@ -441,7 +439,7 @@ class PipeOutput(MailedOutput):
writer = Writer(self.pipe.stdin.write)
# start writing out the mail message
- writer.write(self.mail_headers(basic_subject, group, params))
+ writer.write(self.mail_headers(subject_line, group, params))
return writer
@@ -471,6 +469,10 @@ class Messenger:
self.output = cls(cfg, repos, prefix_param)
+ ### temporary shim to avoid large code movement between classes
+ def make_subject(self, basic_subject, group, params):
+ return self.output.make_subject(basic_subject, group, params)
+
class Commit(Messenger):
def __init__(self, pool, cfg, repos):
@@ -537,8 +539,9 @@ class Commit(Messenger):
ret = 0
for (group, param_tuple), (params, paths) in sorted(self.groups.items()):
+ subject_line = self.make_subject(self.basic_subject, group, params)
try:
- writer = self.output.start(self.basic_subject, group, params)
+ writer = self.output.start(subject_line, group, params)
# generate the content for this group and set of params
generate_content(writer, self.cfg, self.repos, self.changelist,
@@ -575,8 +578,9 @@ class PropChange(Messenger):
### maybe create an iterpool?
for (group, param_tuple), params in self.groups.items():
+ subject_line = self.make_subject(self.basic_subject, group, params)
try:
- writer = self.output.start(self.basic_subject, group, params)
+ writer = self.output.start(subject_line, group, params)
writer.write('Author: %s\n'
'Revision: %s\n'
'Property Name: %s\n'
@@ -688,8 +692,9 @@ class Lock(Messenger):
def generate(self, scratch_pool):
ret = 0
for (group, param_tuple), (params, paths) in sorted(self.groups.items()):
+ subject_line = self.make_subject(self.basic_subject, group, params)
try:
- writer = self.output.start(self.basic_subject, group, params)
+ writer = self.output.start(subject_line, group, params)
writer.write('Author: %s\n'
'%s paths:\n' %