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' %