mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-21 18:38:08 +01:00
notmuch clon
7f2cb3be4e
This allows us to capture stdout and stderr separately, and do other explicit subprocess manipulation without resorting to external packages. It should be compatible with Python 2.7 and later (including the 3.x series). Most of the user-facing interface is the same, but there are a few changes, where reproducing the original interface was too difficult or I saw a change to make the underlying Git UI accessible: * 'nmbug help' has been split between the general 'nmbug --help' and the command-specific 'nmbug COMMAND --help'. * Commands are no longer split into "most common", "other useful", and "less common" sets. If we need something like this, I'd prefer workflow examples highlighting common commands in the module docstring (available with 'nmbug --help'). * 'nmbug commit' now only uses a single argument for the optional commit-message text. I wanted to expose more of the underlying 'git commit' UI, since I personally like to write my commit messages in an editor with the notes added by 'git commit -v' to jog my memory. Unfortunately, we're using 'git commit-tree' instead of 'git commit', and commit-tree is too low-level for editor-launching. I'd be interested in rewriting commit() to use 'git commit', but that seemed like it was outside the scope of this rewrite. So I'm not supporting all of Git's commit syntax in this patch, but I can at least match 'git commit -m MESSAGE' in requiring command-line commit messages to be a single argument. * The default repository for 'nmbug push' and 'nmbug fetch' is now the current branch's upstream (branch.<name>.remote) instead of 'origin'. When we have to, we extract this remote by hand, but where possible we just call the Git command without a repository argument, and leave it to Git to figure out the default. * 'nmbug push' accepts multiple refspecs if you want to explicitly specify what to push. Otherwise, the refspec(s) pushed depend on push.default. The Perl version hardcoded 'master' as the pushed refspec. * 'nmbug pull' defaults to the current branch's upstream (branch.<name>.remote and branch.<name>.merge) instead of hardcoding 'origin' and 'master'. It also supports multiple refspecs if for some crazy reason you need an octopus merge (but mostly to avoid breaking consistency with 'git pull'). * 'nmbug log' now execs 'git log', as there's no need to keep the Python process around once we've launched Git there. * 'nmbug status' now catches stderr, and doesn't print errors like: No upstream configured for branch 'master' The Perl implementation had just learned to avoid crashing on that case, but wasn't yet catching the dying subprocess's stderr. * 'nmbug archive' now accepts positional arguments for the tree-ish and additional 'git archive' options. For example, you can run: $ nmbug archive HEAD -- --format tar.gz I wish I could have preserved the argument order from 'git archive' (with the tree-ish at the end), but I'm not sure how to make argparse accept arbitrary possitional arguments (some of which take arguments). Flipping the order to put the tree-ish first seemed easiest. * 'nmbug merge' and 'pull' no longer checkout HEAD before running their command, because blindly clobbering the index seems overly risky. * In order to avoid creating a dirty index, 'nmbug commit' now uses the default index (instead of nmbug.index) for composing the commit. That way the index matches the committed tree. To avoid leaving a broken index after a failed commit, I've wrapped the whole thing in a try/except block that resets the index to match the pre-commit treeish on errors. That means that 'nmbug commit' will ignore anything you've cached in the index via direct Git calls, and you'll either end up with an index matching your notmuch tags and the new HEAD (after a successful commit) or an index matching the original HEAD (after a failed commit). |
||
---|---|---|
bindings | ||
compat | ||
completion | ||
contrib | ||
debian | ||
devel | ||
doc | ||
emacs | ||
lib | ||
packaging | ||
parse-time-string | ||
performance-test | ||
test | ||
util | ||
vim | ||
.dir-locals.el | ||
.gitignore | ||
.travis.yml | ||
AUTHORS | ||
command-line-arguments.c | ||
command-line-arguments.h | ||
configure | ||
COPYING | ||
COPYING-GPL-3 | ||
crypto.c | ||
debugger.c | ||
gmime-filter-reply.c | ||
gmime-filter-reply.h | ||
hooks.c | ||
INSTALL | ||
Makefile | ||
Makefile.local | ||
mime-node.c | ||
NEWS | ||
notmuch-client.h | ||
notmuch-compact.c | ||
notmuch-config.c | ||
notmuch-count.c | ||
notmuch-dump.c | ||
notmuch-insert.c | ||
notmuch-new.c | ||
notmuch-reply.c | ||
notmuch-restore.c | ||
notmuch-search.c | ||
notmuch-setup.c | ||
notmuch-show.c | ||
notmuch-tag.c | ||
notmuch-time.c | ||
notmuch.c | ||
notmuch.desktop | ||
query-string.c | ||
README | ||
sprinter-json.c | ||
sprinter-sexp.c | ||
sprinter-text.c | ||
sprinter.h | ||
tag-util.c | ||
tag-util.h | ||
version |
Notmuch - thread-based email index, search and tagging. Notmuch is a system for indexing, searching, reading, and tagging large collections of email messages in maildir or mh format. It uses the Xapian library to provide fast, full-text search with a convenient search syntax. Notmuch is free software, released under the GNU General Public License version 3 (or later). Building notmuch ---------------- See the INSTALL file for notes on compiling and installing notmuch. Running notmuch --------------- After installing notmuch, start by running "notmuch setup" which will interactively prompt for configuration information such as your name, email address, and the directory which contains your mail archive to be indexed. You can change any answers later by running "notmuch setup" again or by editing the .notmuch-config file in your home directory. With notmuch configured you should next run "notmuch new" which will index all of your existing mail. This can take a long time, (several hours) if you have a lot of email, (hundreds of thousands of files). When new mail is delivered to your mail archive in the future, you will want to run "notmuch new" again. These runs will be much faster as they will only index new messages. Finally, you can prove to yourself that things are working by running some command-line searches such as "notmuch search from:someone@example.com" or "notmuch search subject:topic". See "notmuch help search-terms" for more details on the available search syntax. The command-line search output is not expected to be particularly friendly for day-to-day usage. Instead, it is expected that you will use an email interface that builds on the notmuch command-line tool or the libnotmuch library. Notmuch installs a full-featured email interface for use within emacs. To use this, first add the following line to your .emacs file: (autoload 'notmuch "notmuch" "Notmuch mail" t) Then, either run "emacs -f notmuch" or execute the command "M-x notmuch" from within a running emacs. If you're interested in a non-emacs-based interface to notmuch, then please join the notmuch community. Various other interfaces are already in progress, (an interface within vim, a curses interface, graphical interfaces based on evolution, and various web-based interfaces). The authors of these interfaces would love further testing or contribution. See contact information below. Contacting users and developers ------------------------------- The website for Notmuch is: http://notmuchmail.org The mailing list address for the notmuch community is: notmuch@notmuchmail.org We welcome any sort of questions, comments, kudos, or code there. Subscription is not required, (but if you do subscribe you'll avoid any delay due to moderation). See the website for subscription information. There is also an IRC channel dedicated to talk about using and developing notmuch: IRC server: irc.freenode.net Channel: #notmuch