notmuch clon
Find a file
W. Trevor King c200167426 nmbug: Add 'clone' and replace FETCH_HEAD with @{upstream}
With two branches getting fetched (master and config), the branch
referenced by FETCH_HEAD is ambiguous.  For example, I have:

  $ cat FETCH_HEAD
  41d7bfa7184cc93c9dac139d1674e9530799e3b0 \
    not-for-merge   branch 'config' of http://nmbug.tethera.net/git/nmbug-tags
  acd379ccb973c45713eee9db177efc530f921954 \
    not-for-merge   branch 'master' of http://nmbug.tethera.net/git/nmbug-tags

(where I wrapped the line by hand).  This means that FETCH_HEAD
references the config branch:

  $ git rev-parse FETCH_HEAD
  41d7bfa7184cc93c9dac139d1674e9530799e3b0

which breaks all of the FETCH_HEAD logic in nmbug (where FETCH_HEAD is
assumed to point to the master branch).

Instead of relying on FETCH_HEAD, use @{upstream} as the
remote-tracking branch that should be merged/diffed/integrated into
HEAD.  @{upstream} was added in Git v1.7.0 (2010-02-12) [1], so
relying on it should be fairly safe.  One tricky bit is that bare
repositories don't set upstream tracking branches by default:

  $ git clone --bare http://nmbug.tethera.net/git/nmbug-tags.git nmbug-bare
  $ cd nmbug-bare
  $ git remote show origin
  * remote origin
    Fetch URL: http://nmbug.tethera.net/git/nmbug-tags.git
    Push  URL: http://nmbug.tethera.net/git/nmbug-tags.git
    HEAD branch: master
    Local refs configured for 'git push':
      config pushes to config (up to date)
      master pushes to master (up to date)

While in a non-bare clone:

  $ git clone http://nmbug.tethera.net/git/nmbug-tags.git
  $ cd nmbug-tags
  $ git remote show origin
  * remote origin
    Fetch URL: http://nmbug.tethera.net/git/nmbug-tags.git
    Push  URL: http://nmbug.tethera.net/git/nmbug-tags.git
    HEAD branch: master
    Remote branches:
      config tracked
      master tracked
    Local branch configured for 'git pull':
      master merges with remote master
    Local ref configured for 'git push':
      master pushes to master (up to date)

From the clone docs [2]:

  --bare::
        Make a 'bare' Git repository…
        Also the branch heads at the remote are copied directly
        to corresponding local branch heads, without mapping
        them to `refs/remotes/origin/`.  When this option is
        used, neither remote-tracking branches nor the related
        configuration variables are created.

To use @{upstream}, we need to the local vs. remote-tracking
distinction, so this commit adds 'nmbug clone', replacing the
previously suggested --bare clone with a non-bare --no-checkout
--separate-git-dir clone into a temporary work directory.  After
which:

  $ git rev-parse @{upstream}
  acd379ccb973c45713eee9db177efc530f921954

gives us the master-branch commit.  Existing nmbug users will have to
run the configuration tweaks and re-fetch by hand.  If you don't have
any local commits, you could also blow away your NMBGIT repository and
re-clone from scratch:

  $ nmbug clone http://nmbug.tethera.net/git/nmbug-tags.git

Besides removing the ambiguity of FETCH_HEAD, this commit allows users
to configure which upstream branch they want nmbug to track via 'git
config', in case they want to change their upstream repository.

[1]: http://git.kernel.org/cgit/git/git.git/tree/Documentation/RelNotes/1.7.0.txt
[2]: http://git.kernel.org/cgit/git/git.git/tree/Documentation/git-clone.txt
2014-04-08 07:39:28 -03:00
bindings ruby bindings message: docstring typo 2014-02-21 21:13:03 -04:00
compat compat: add canonicalize_file_name 2014-04-08 07:27:14 -03:00
completion completion: complete directory parameters to directories only 2014-03-25 20:00:24 -03:00
contrib remove notmuch-pick 2013-11-13 21:24:05 -04:00
debian debian: add build conflicts against ruby1.8 2014-04-08 07:26:53 -03:00
devel nmbug: Add 'clone' and replace FETCH_HEAD with @{upstream} 2014-04-08 07:39:28 -03:00
doc doc: added 'Init File' section to notmuch-emacs info source 2014-04-08 07:31:32 -03:00
emacs emacs: push mark before signature on reply 2014-03-30 19:22:05 -03:00
lib lib: replace the header parser with gmime 2014-04-05 12:53:04 -03:00
packaging packaging: fedora: add ruby bindings 2013-06-02 08:03:47 -03:00
parse-time-string timegm: add portable implementation (Solaris support) 2013-08-23 17:57:35 +02:00
performance-test perf-test: use command line arguments for directories 2014-03-14 21:47:43 -03:00
test lib: drop support for single-message mbox files 2014-04-05 12:52:42 -03:00
util util: Fix two corner-cases in boolean term quoting function 2014-03-15 15:05:06 -03:00
vim vim: add help file 2013-11-20 07:23:30 -06:00
.dir-locals.el .dir-locals.el: changed one-char comment prefix '; ' to two; '; ; ' 2012-01-22 08:41:37 -04:00
.gitignore emacs: update .gitignore 2013-06-02 20:44:26 -03:00
AUTHORS Drop date.c file, (use identical function from GMime instead). 2009-11-02 14:36:33 -08:00
command-line-arguments.c cli: command line option parser cleanup 2014-02-25 20:53:41 -04:00
command-line-arguments.h command-line-arguments.[ch]: make arrays of keyword descriptors const 2011-12-13 00:00:44 -04:00
configure compat: add canonicalize_file_name 2014-04-08 07:27:14 -03:00
COPYING Add copy of GNU General Public License (version 3). 2009-10-21 16:25:08 -07:00
COPYING-GPL-3 Add copy of GNU General Public License (version 3). 2009-10-21 16:25:08 -07:00
crypto.c crypto: return NULL cryptoctx if protocol string is empty. 2013-07-20 09:13:48 -03:00
debugger.c notmuch-new: Only install SIGALRM if not running under gdb 2009-11-22 05:36:36 +01:00
gmime-filter-reply.c Filter out carriage-returns in show and reply output. 2009-11-18 23:34:43 +01:00
gmime-filter-reply.h Typsos 2009-11-18 03:21:36 -08:00
hooks.c cli: Flush stdout before fork()ing to run hooks 2014-03-25 21:22:17 -03:00
INSTALL doc: convert sphinx based docs 2014-03-09 10:41:08 -03:00
Makefile build: move canonical list of subdirectories to configure script 2014-03-25 08:32:10 -03:00
Makefile.local doc: build man pages at build time; introduce HAVE_SPHINX, HAVE_RST2MAN 2014-03-18 07:38:57 -03:00
mime-node.c cli: mime node: fix compiler warning when building against gmime 2.4 2013-04-14 19:49:16 -03:00
NEWS NEWS: note closing of id:87ty19pi85.fsf@zancas.localnet 2014-03-03 08:49:36 -04:00
notmuch-client.h cli: abstract dump file open from the dump command 2014-03-30 19:23:16 -03:00
notmuch-compact.c cli: clean up exit status code returned by the cli commands 2014-01-18 14:45:26 -04:00
notmuch-config.c compat: add canonicalize_file_name 2014-04-08 07:27:14 -03:00
notmuch-count.c cli: clean up exit status code returned by the cli commands 2014-01-18 14:45:26 -04:00
notmuch-dump.c cli: abstract dump file open from the dump command 2014-03-30 19:23:16 -03:00
notmuch-insert.c cli: make sure notmuch new and insert don't add invalid tags 2014-03-06 07:42:10 -04:00
notmuch-new.c cli: make sure notmuch new and insert don't add invalid tags 2014-03-06 07:42:10 -04:00
notmuch-reply.c cli: sanitize the received header before scanning for replies 2014-03-25 21:22:03 -03:00
notmuch-restore.c cli: abstract dump file open from the dump command 2014-03-30 19:23:16 -03:00
notmuch-search.c util: make sanitize string available in string util for reuse 2014-03-09 10:13:30 -03:00
notmuch-setup.c cli: clean up exit status code returned by the cli commands 2014-01-18 14:45:26 -04:00
notmuch-show.c notmuch-show: detect NULL pointer returned from notmuch_query_search_threads 2014-01-24 20:24:11 -04:00
notmuch-tag.c cli: clean up exit status code returned by the cli commands 2014-01-18 14:45:26 -04:00
notmuch-time.c Add some const correctness to talloc 'ctx' parameter. 2009-11-17 19:10:37 -08:00
notmuch.c cli: fix notmuch help additional topics 2014-03-27 22:18:43 -03:00
notmuch.desktop notmuch.desktop: Clarify that this is the emacs interface to notmuch. 2010-01-24 07:30:08 +13:00
query-string.c notmuch: Break notmuch.c up into several smaller files. 2009-11-10 12:03:05 -08:00
README emacs: instruct user to autoload notmuch instead of require'ing it 2014-03-30 11:02:08 -03:00
sprinter-json.c sprinters: bugfix when NULL passed for a string. 2012-08-12 21:25:01 +02:00
sprinter-sexp.c Adding an S-expression structured output printer. 2012-12-08 09:26:29 -04:00
sprinter-text.c sprinter: add text0 formatter for null character separated text 2012-12-18 17:03:34 -04:00
sprinter.h sprinter: add text0 formatter for null character separated text 2012-12-18 17:03:34 -04:00
tag-util.c cli: add missing \n in error message 2014-03-06 07:46:27 -04:00
tag-util.h cli: export function for illegal tag checking 2014-03-06 07:41:38 -04:00
version version: bump to 0.17 2013-12-30 20:34:23 -04:00

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