Author: gstein Date: Wed Oct 25 07:51:23 2023 New Revision: 1913313 URL: http://svn.apache.org/viewvc?rev=1913313&view=rev Log: Move the output from being tied to the action being performed. It is only important when the notification is being generated.
* tools/hook-scripts/mailer/mailer.py: (main): use new create_output() to pass an output mechanism into the action's generate() method. (create_output): pulled out from Messenger.__init__() (Commit.generate, PropChange.generate, Lock.generate): take a new OUTPUT param for where to place the generated output. 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=1913313&r1=1913312&r2=1913313&view=diff ============================================================================== --- subversion/trunk/tools/hook-scripts/mailer/mailer.py (original) +++ subversion/trunk/tools/hook-scripts/mailer/mailer.py Wed Oct 25 07:51:23 2023 @@ -144,7 +144,19 @@ def main(pool, cmd, config_fname, repos_ else: raise UnknownSubcommand(cmd) - return messenger.generate(pool) + output = create_output(cfg, repos) + return messenger.generate(output, pool) + + +def create_output(cfg, repos): + if cfg.is_set('general.mail_command'): + cls = PipeOutput + elif cfg.is_set('general.smtp_hostname'): + cls = SMTPOutput + else: + cls = StandardOutput + + return cls(cfg, repos) def remove_leading_slashes(path): @@ -434,15 +446,6 @@ class Messenger: # being performed. See OutputBase.start() docstring. self.basic_subject = '' - if cfg.is_set('general.mail_command'): - cls = PipeOutput - elif cfg.is_set('general.smtp_hostname'): - cls = SMTPOutput - else: - cls = StandardOutput - - self.output = cls(cfg, repos) - def make_subject(self, basic_subject, group, params): prefix = self.cfg.get(self.prefix_param, group, params) if prefix: @@ -521,7 +524,7 @@ class Commit(Messenger): else: self.basic_subject = 'r%d - %s' % (repos.rev, dirlist) - def generate(self, scratch_pool): + def generate(self, output, scratch_pool): "Generate email for the various groups and option-params." ### the groups need to be further compressed. if the headers and @@ -536,13 +539,13 @@ class Commit(Messenger): 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(subject_line, group, params) + writer = 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, group, params, paths, iterpool) - self.output.finish() + output.finish() except MessageSendFailure: ret = 1 svn.core.svn_pool_clear(iterpool) @@ -567,7 +570,7 @@ class PropChange(Messenger): self.basic_subject = 'r%d - %s' % (repos.rev, propname) - def generate(self, scratch_pool): + def generate(self, output, scratch_pool): actions = { 'A': 'added', 'M': 'modified', 'D': 'deleted' } ret = 0 ### maybe create an iterpool? @@ -575,7 +578,7 @@ class PropChange(Messenger): for (group, param_tuple), params in self.groups.items(): subject_line = self.make_subject(self.basic_subject, group, params) try: - writer = self.output.start(subject_line, group, params) + writer = output.start(subject_line, group, params) writer.write('Author: %s\n' 'Revision: %s\n' 'Property Name: %s\n' @@ -596,13 +599,13 @@ class PropChange(Messenger): tempfile2 = tempfile.NamedTemporaryFile() tempfile2.write(self.repos.get_rev_prop(self.propname, scratch_pool)) tempfile2.flush() - self.output.run(self.cfg.get_diff_cmd(group, { + output.run(self.cfg.get_diff_cmd(group, { 'label_from' : 'old property value', 'label_to' : 'new property value', 'from' : tempfile1.name, 'to' : tempfile2.name, })) - self.output.finish() + output.finish() except MessageSendFailure: ret = 1 return ret @@ -684,12 +687,12 @@ class Lock(Messenger): to_bytes(self.dirlist[0]), pool) - def generate(self, scratch_pool): + def generate(self, output, 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(subject_line, group, params) + writer = output.start(subject_line, group, params) writer.write('Author: %s\n' '%s paths:\n' % @@ -702,7 +705,7 @@ class Lock(Messenger): if self.do_lock: writer.write('Comment:\n%s\n' % (self.lock.comment or '')) - self.output.finish() + output.finish() except MessageSendFailure: ret = 1 return ret