This is the mail archive of the crossgcc@sourceware.org mailing list for the crossgcc project.

See crosstool-NG for lots more information.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[CT-NG] Patchwork workflow


Hello All!

On Sunday 11 November 2012 Yann E. MORIN wrote:
> Also, I'm now using pathwork to manage the patches that are sent to the
> list. For those interested, I'll detail my new workflow in a separate
> message (as a reply to this one). Globally, I'm very happy to be using
> patchwork, it has made things a bit easier to manage! :-)

As promised, here's a more detailed view on how I manage patches being
sent to the list.

Since about mid-September, the guys at OzLabs [0] have been kind enough to
host an instance of patchwork [1] for use by the crosstool-NG project [2].

Patchwork works as thus:

  - an email address is subscribed to the mailing list, for delivery to the
    patchwork user at OzLabs;

  - when it receives a mail, patchwork tries to see if there is a patch in it;

  - if there is a patch, it is stored in the patchwork DB, and made available
    via a web interface, or via an XMLRPC interface;

  - if there is no patch, but the mail is a reply to a patch, then it is
    stored in the patchwork DB, and it is possible to display the complete
    thread on the web interface; moreover, SoB-lines (sob, ack...) that
    appear in replies are automatically added to any patch when it is
    retrieved via the XMLRPC interface;

  - patches are attached a status: New, Accepted, Rejected, Under Review...
    it is thus easy to filter patches;

  - anyone can register to patchwork with their email, and then can set the
    status for the patches they sent.

So, here's the workflow I use to apply patches:

1- I read the mails in the list with my MUA, briefly review patches for
   obvious issues and comments.

2- I wrote a script that automatically grabs a patch from patchwork, and
   applies it as a new MQ patch in the current repository clone. In the
   process, it stores the patchwork ID and message ID in the commit log, as
   sob-like lines (you've started seing them on recent commits, I hope!).

3- I further review and test the patches. If I have more comments, I go back
   to my MUA, and further reply to the patch.

4- When a patch is good for upstream, I push it with an alias (pwpush) that:
  - pushes the changes upstream (with hg push)
  - scans the new commits for patchwork and/or message IDs
    - for each patchwork ID, updates the status to Accepted
    - for each message ID, sends a mail to the patch author, and any other
      recipient listed as SoB, Ack, Test, or Cc; the mails are also CCed to
      the list, you've probably seen some of them recently.

5- For patches that are not accepted, I manually change their status to an
   appropriate state, after I explain why on the list. Patches that are not
   fit are set to Rejected, patches that have seen a second round are marked
   as Superseded. I also from time to time set the status to "Changes
   Requested" or "Not Applicable", but that's rare.

Basically, I treat any status that is not 'New' as a terminal status, and
I only act on New patches. Here's the current status of the patchwork DB
after about three months of usage:

 42 Accepted
 17 Superseded
  9 New
  4 Rejected
  4 Changes Requested
  1 Not Applicable
 77 Total

Using patchwork has been a major improvement from my previous workflow, which
involved manually copying mails to a different mailbox, and skimming the list
for those patches I may have forgotten. Now, I can see at a quick glance, and
with a simple command, what patches have been left unattended, what they are
about, and what they look like.

Here's a typical session (outputs have been stripped for brevity):

  $ hg pwlist
  Available patches for project 'crosstool-ng':
  193156 New   fix eglibc-2.16 manual build

  $ hg pwview 193156 | colordiff
  [email-body aka commit-log, followed by colored patch,]
  [on stdout; a colored patch is very nice to work with!]

  $ hg pwqimport 193156
  retrieving patch...
  patch subject is: fix eglibc-2.16 manual build
  adding fix_eglibc-2.16_manual_build to series file

  $ hg qseries -sv
  0 A fix_eglibc-2.16_manual_build: fix eglibc-2.16 manual build

  # diff, build, test...

  $ hg qfinish fix_eglibc-2.16_manual_build

  $ hg pwpush
  pushing to [upstream url]
  remote: added 1 changesets with 1 changes to 1 files
  updating Patchwork ID(s) for cset #381356803e87:
    - 193156, done
  sending mail(s) for cset #381356803e87:
    - <886f1bbadce3c2a5ea07.1348202558@localhost.localdomain>, done

I'll be polishing my script in the next few days, and will make it available
for those interested.

I hope you found this little story interesting! ;-)

Regards,
Yann E. MORIN.

[0] http://ozlabs.org/
[1] http://jk.ozlabs.org/projects/patchwork/
[2] http://patchwork.ozlabs.org/project/crosstool-ng/

-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

--
For unsubscribe information see http://sourceware.org/lists.html#faq


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]