Hi Terrence, On Thu, Jul 19, 2012 at 07:51:58AM -0400, Terrence Enger wrote: > Despite checking the open patches on gerrit occasionally thereafter, I > never caught it showing my patch. Lionel Elie Mamane has already > applied the patch, but he may have worked from my email rather than > gerrit.
My mail about the maildrop was a statement of intent, not that we have a full solution in place already. There is scripting by David and me for the maildrop, but it still needs tweaking and testing. Once we have that, we can easily forward your mail from the list to gerrit. > So, I wonder ... > > (*) Is it the case that the patch went through gerrit as intended, and > I just failed to notice? no, it went directly in. > (*) Should I have put the patch in the body of the email rather than > an attachment? Bjoern Michaelsen's instructions in > <http://lists.freedesktop.org/archives/libreoffice/2012-July/034689.html> > do not specify. Making the patch an attachment should be fine, 'git am' will find it. > (*) Did I do something else wrong? no ;) > (*) Is my situation common enough to be worth mentioning in > > <https://wiki.documentfoundation.org/Development#Sending_patches_directly_to_gerrit.libreoffice.org>. > (I do not want to make that change myself until I have had success > at least once.) Well, I wonder what you would want to write in that section as it is about using Gerrit directly (for which you need OpenID). Once the maildrop is in place we will likely have a section about sending your patch to ger...@libreoffice.org instead of sending it to the mailing list. And before anyone gets out the forks and torches: gerrit sends a notification about the new change to the dev list (and with the bot to IRC) and with kendy latest tweaks that also includes the patch itself, so the dev list will get notified with the full patch still. Anyway: One step after the other: If you are interested in getting the maildrop faster, David likely will appreciate your help! Best, Bjoern P.S.: Attaching my unfinished script just to tease you.
#!/usr/bin/env python import sys import email import os.path import smtplib import tempfile import subprocess import logging import minilog sourceurl = '/home/gerritbot/syncrepos/core.git' desturl = '/tmp/test/core.git' legalbranches = [ 'master', 'libreoffice-3-6', 'libreoffice-3-5', 'libreoffice-3-5-6' ] logfile=os.path.join(os.environ['HOME'], 'patchpickup.log') loglevel='INFO' class PatchPusher(): def __init__(self, branch, logger): self.tmpdir = tempfile.mkdtemp() self.workrepo = os.path.join(self.tmpdir, 'repo') self.repo = repo self.branch = branch self.logger = logger def clone_base(self, sourceurl): minilog.logged_call( \ ['git', 'clone', '--branch', self.branch, sourceurl, self.workrepo], \ self.logger, \ {}) def fetch_all(self): minilog.logged_call( \ ['git','--work-tree=%s' % self.workrepo, 'fetch', '--all'], \ self.logger, \ {}) def cherry_pick(self, commit): minilog.logged_call( \ ['git','--work-tree=%s' % self.workrepo, 'cherry-pick', '--all'], \ self.logger, \ {}) def apply_message(self, message): messagefile = open(os.path.join(self.tmpdir,'message')) messagefile.write(str(message)) messagefile.close() minilog.logged_call( \ ['git','--work-tree=%s' % self.workrepo, 'am', messagefile], \ self.logger, \ {}) def upload_change(self, desturl): minilog.logged_call( \ ['git','--work-tree=%s' % self.workrepo, 'push', desturl, 'HEAD:refs/for/%s' % self.branch], \ self.logger, \ {}) class EmailCommand(): def __init__(self, message, sourceurl, desturl, logger): self.message = message self.sourceurl = sourceurl self.desturl = desturl self.logger = logger self.command = None self.branch = master self.commit = None self.success = False if not message.has_key('subject'): raise Exception('message has no subject header -- ignoring.') subject = message['subject'] self.parse_params(subject) self.parse_command(subject) def parse_params(self, subject): state = None words = subject.split(' ') for word in words: if state == 'branch': self.branch = word state = None if state == 'commit': self.commit = word state == None elif state is None and word == 'branch': state == 'branch' if state is None annd word == 'commit': state == 'commit' if self.commit is None and len(words) > 1: self.commit = words[1] if not self.branch in legalbranches: raise Exception('%s does not look like a legal branch to me.' % self.branch) def parse_command(self, subject): if (subject.startswith('[PATCH]') or subject.startswith('[ONGERRIT]')): self.command = 'apply' elif (subject.startswith('[CHERRYPICK]'): self.command = 'cherrypick' elif (subject.startswith('[HELP]'): self.command = 'help' def execute(self): logstring = io.StringIO() loghandler = logging.StreamHandler(self.logstring) loghandler.setFormatter(logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')) logger.addHandler(loghandler) logger.info('executing command: %s, branch: %s, commit: %s' % (self.command, self.branch, self.commit)) try: getattr(self, 'do_%s' % self.command)() self.success = True except Exception as e: logger.error(e) logger.removeHandler(loghandler) self.log = log.getValue() return self def do_apply(self): patchpusher = PatchPusher(self.branch, self.logger) patchpusher.clonebase(self.sourceurl) patchpusher.apply_message(message) patchpusher.upload_change(self.desturl) def do_cherrypick(self): if self.commit is None: raise Exception('could not find what to cherrypick from subject: %s' % subject) patchpusher = PatchPusher(self.branch, self.logger) self.clonebase(self.sourceurl) self.fetch_all() self.cherrypick(self.commit) self.upload_change(self.desturl) def do_help(self): pass class ReplyMessage(email.Message): def __init__(self, command): email.Message.__init__(self) logger = logging.getLogger('patchpickup') loghandler = logging.FileHandler(logfile) loghandler.setFormatter(logging.Formatter('%(asctime)s %(levelname)-8s %(message)s')) logger.addHandler(loghandler) logger.setLevel(loglevel) try: message = email.message_from_file(sys.stdin) reply = ReplyMessage(EmailCommand(message, sourceurl, desturl).execute()) except Exception as e: logger.error(e)
_______________________________________________ LibreOffice mailing list LibreOffice@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice