[linux-elitists] Contributing to a Project with a Maintainer Who Doesn't Merge Contributions Quickly

Ben Finney bignose+hates-spam@benfinney.id.au
Fri Dec 26 14:12:43 PST 2008

Shlomi Fish <shlomif@iglu.org.il> writes:

> I have some ambitious plans for enhancing the module, but I feel
> that it won't be practical to do it in the current conditions. I
> tried to soft-talk the maintainer into giving me repository access,
> but then the conversation got diverted into applying my latest
> patch, which he said he'd like to perform the next day. He didn't
> and it's been at least two weeks since then.

Since you talk about asking for “commit access”, I presume it's in
an old-school centralised-only VCS. I'll assume Subversion.

> What are your thoughts about a situation like this?

Use a distributed VCS to track your changes. I prefer Bazaar, so I'll
discuss that below.

* Use Debian GNU/Linux, ‘lenny’ or later.

* Install the necessary packages:

    $ sudo aptitude install bzr bzrtools bzr-svn svn

* Get a local Bazaar checkout of the upstream Subversion branch so you
  can track upstream's changes discretely and easily:

    $ bzr checkout svn+ssh://vcs.example.org/foo/trunk/ foo.trunk/

  Bazaar uses the ‘bzr-svn’ plugin to work with Subversion
  repositories. It has its foibles, especially with *writing* to
  Subversion repositories; but for tracking an upstream Subversion
  repository against your Bazaar-managed branches, it's excellent.

* Branch from upstream so you can track your changes:

    $ bzr branch foo.trunk/ foo.interesting-new-feature/

* Work on your interesting new feature, committing often:

    $ cd foo.interesting-new-feature/
    $ emacs spam.py  # hack hack hack
    $ make test  # or however you run your full test suite
    $ bzr commit --message "One-line description"

* When upstream has new revisions in their repository, update your

    $ cd foo.trunk/
    $ bzr update

* When you want to send a patch of your current work against upstream,
  generate a Bazaar “merge directive” (a patch bundle):

    $ cd foo.interesting-new-feature/
    $ bzr send --output ../foo.interesting-new-feature.patch --no-bundle

  This makes a patch against the parent of the current branch (by
  default, since no other branch is specified), which is the
  ‘foo.trunk/’ branch you originally branched from.

  The ‘--no-bundle’ option turns off the “patch bundle” blob, which
  would be useful to a Bazaar-using remote user to merge the resulting
  patch and have identical revisions to you. Since you'll be sending
  it to a Subversion user, that blob won't be useful to them so we
  disable it.

* Send the ‘foo.interesting-new-feature.patch’ file to upstream
  attached to an email message that explains what the changes are.

* Repeat the steps of “branch to track discrete features”,
  “hack-test-commit”, “update your upstream checkout”, “make and
  send a patch bundle” whenever required.

The Bazaar documentation, both online at <URL:http://bazaar-vcs.org/>
and in the ‘bzr help foo’ commands, is comprehensive and should fill
the many gaps I've no doubt left from the above explanation.

 \            “Technology is neither good nor bad; nor is it neutral.” |
  `\                       —Melvin Kranzberg's First Law of Technology |
_o__)                                                                  |
Ben Finney

More information about the linux-elitists mailing list