# Experimental Tag Sharing / Pseudo-Bug-Tracking for/with notmuch ## Web View There is a dump of (some views of) the nmbug [[status|http://nmbug.tethera.net/status]]. ## Getting started 1. Install and use notmuch version **0.10** or newer and perl module `Pod::Usage` (packaged as `perl-doc` in debian). The nmbug script is available in `contrib/nmbug`. 2. Make sure your `git version` is **1.7.4** or newer. 3. Enter the following command to obtain the current tag repository: `$ git clone --bare http://nmbug.tethera.net/git/nmbug-tags.git $HOME/.nmbug` ## Using nmbug, simple example # get the latest version of the tags $ nmbug pull # do some tagging; see below for conventions $ notmuch tag +notmuch::patch $id # write the tag changes from the notmuch database $ nmbug commit ## Using nmbug, doing the same thing with more steps # get the latest version of the tags $ nmbug fetch # Optionally inspect the fetched changes $ nmbug status a tags/id1/patch d tags/id2/pushed # merge the fetched tags into notmuch $ nmbug merge # observe status is clear now, $ nmbug status # make the tag changes $ notmuch tag +notmuch::patch id # double check your changes $ nmbug status A tags/id/patch # write the tag changes $ nmbug commit ## Submitting tags For the moment, we are using a central repo, hosted at: nmbug@nmbug.tethera.net:nmbug-tags To get push access, send your public key (ideally in a gpg signed email) to David Bremner. There is a convenience command: $ nmbug push But you will have to change your url with: $ git --git-dir=$HOME/.nmbug remote set-url origin nmbug@nmbug.tethera.net:nmbug-tags ## Tagging conventions _Note that the tag database is probably catching up to these conventions._ ### Main patch tracking tags Initially any patch should be tagged: notmuch::patch Patches that are for discussion, rather than proposed for master should also be tagged: notmuch::wip is "work in progress", posted for review or comment. Most patches will be initially tagged: notmuch::needs-review needs some (more) review unless they are tagged: notmuch::trivial looks harmless Patches keep `notmuch::needs-review` until they either get enough reviews, or one of the following resolutions is reached: notmuch::obsolete replaced by some other patch notmuch::pushed is pushed to master notmuch::wontfix for whatever reason, this patch will not be applied Sometimes the process stalls, and patches get tagged: notmuch::moreinfo waiting for feedback from patch proposer or others notmuch::stale The patch no longer applies to master (or in rare cases, to release) Note that these tags typically apply to whole series of patches; it doesn't usually make sense to apply patches later in the series before earlier ones. So a patch may be tagged `moreinfo` or `stale` only because a predecessor patch is. ### Bug tracking tag So far we are just tagging certain messages as bug reports, meaning things that "everyone" agrees should be fixed. notmuch::bug is a bug report notmuch::fixed indicates that the bug is fixed in the master branch ### Optional tags These patches are more comments and suggestions. notmuch::doc is a documentation patch notmuch::emacs is a patch/bug for the emacs UI notmuch::feature provides a new feature notmuch::fix fixes a bug notmuch::portability improves portability notmuch::review is a review notmuch::test provides a new test/or improves testing notmuch::$n this patch should be considered for release $n ## Tracking the patch queue I (David Bremner) use the following search (in my case as a saved search in emacs): tag:notmuch::patch and not tag:notmuch::pushed and \ not tag:notmuch::obsolete and not tag:notmuch::wip \ and not tag:notmuch::moreinfo and not tag:notmuch::contrib You might or might not want as many exclusions. Another interesting search is: tag:notmuch::reviewed and not tag:notmuch::pushed See the [[status|http://nmbug.tethera.net/status]] page for more example searches. ## Design notes ### Disk format The tags are stored in a bare-repo, which means they are not obviously visible. There is an `nmbug archive` command analogous to `git archive` Tags are represented as empty files in the tree; if you extract them, the tree looks something like: tags/878waiwi0f.wl%25james@hackervisions.org/ tags/878waiwi0f.wl%25james@hackervisions.org/emacs tags/878waiwi0f.wl%25james@hackervisions.org/patch tags/87aa8j7hqu.fsf@zancas.localnet/ tags/87aa8j7hqu.fsf@zancas.localnet/patch tags/87aa8j7hqu.fsf@zancas.localnet/pushed The `%25` represents hex code for a character that cannot be used directly (in this case %, only because it is needed as an escape). ### Assumptions - Currently the parser of nmbug (like that of notmuch restore) assumes that there are no spaces in message-ids.