This series is against branch "next", which is currently ahead of master by the following 7 commits
9c1ed5ab CLI: document handling of --config for external commands 0d33392f CLI: pass --config to external commands via NOTMUCH_CONFIG. 163dae81 test: initial tests for external commands a5a3ed90 CLI: set NOTMUCH_CONFIG in hooks. cd050fd7 test: add known broken tests for setting NOTMUCH_CONFIG in hooks e7732d21 CLI: mention sexp-queries in help topics, alphabetize 383d9db2 CLI: simplify help command These are all on the list, and will probably be applied to master within the next week or so. The changes since last version are not too huge (interdiff at the end). Functional changes are as follows - drop --version command for notmuch commit (people can use notmuch --version to get the same info) - check that there are tags with the given prefix in the database already; if not require --force to proceed. - enable --config handling (this is actually in the prerequisite patches in branch next). diff --git a/Makefile.local b/Makefile.local index 0fadfb26..7699c208 100644 --- a/Makefile.local +++ b/Makefile.local @@ -45,6 +45,15 @@ $(SHA256_FILE): $(TAR_FILE) $(DETACHED_SIG_FILE): $(TAR_FILE) gpg --armor --detach-sign $^ +CLEAN := $(CLEAN) notmuch-git +notmuch-git: notmuch-git.py + cp $< $@ + chmod ugo+x $@ + +CLEAN := $(CLEAN) nmbug +nmbug: notmuch-git + ln -s $< $@ + .PHONY: dist dist: $(TAR_FILE) @@ -294,7 +303,7 @@ endif SRCS := $(SRCS) $(notmuch_client_srcs) CLEAN := $(CLEAN) notmuch notmuch-shared $(notmuch_client_modules) CLEAN := $(CLEAN) version.stamp notmuch-*.tar.gz.tmp -CLEAN := $(CLEAN) .deps notmuch-git +CLEAN := $(CLEAN) .deps DISTCLEAN := $(DISTCLEAN) .first-build-message Makefile.config sh.config sphinx.config @@ -307,10 +316,6 @@ cppcheck: @echo "No cppcheck found during configure; skipping static checking" endif -nmbug notmuch-git: notmuch-git.in - sed s/@NOTMUCH_VERSION@/${VERSION}/ < notmuch-git.in > notmuch-git - chmod ugo+rx notmuch-git - ln -sf notmuch-git nmbug DEPS := $(SRCS:%.c=.deps/%.d) DEPS := $(DEPS:%.cc=.deps/%.d) diff --git a/notmuch-git.in b/notmuch-git.py old mode 100755 new mode 100644 similarity index 99% rename from notmuch-git.in rename to notmuch-git.py index 6505c2e5..24ab3e5c --- a/notmuch-git.in +++ b/notmuch-git.py @@ -40,8 +40,6 @@ from urllib.parse import quote as _quote from urllib.parse import unquote as _unquote import json as _json -__version__ = '@NOTMUCH_VERSION@' - _LOG = _logging.getLogger('nmbug') _LOG.setLevel(_logging.WARNING) _LOG.addHandler(_logging.StreamHandler()) @@ -376,6 +374,10 @@ def check_safe_fraction(status): safe=float(conf) total = count_messages (TAG_PREFIX) + if total == 0: + _LOG.error('No existing tags with given prefix, stopping.'.format(safe)) + _LOG.error('Use --force to override.') + exit(1) change = len(status['added'])+len(status['deleted'])+len(status['missing']) fraction = change/total _LOG.debug('total messages {:d}, change: {:d}, fraction: {:f}'.format(total,change,fraction)) @@ -931,9 +933,6 @@ if __name__ == '__main__': parser.add_argument( '-N', '--nmbug', action='store_true', help='Set defaults for --tag-prefix and --git-dir for the notmuch bug tracker') - parser.add_argument( - '-v', '--version', action='version', - version='%(prog)s {}'.format(__version__)) parser.add_argument( '-l', '--log-level', choices=['critical', 'error', 'warning', 'info', 'debug'], diff --git a/notmuch.c b/notmuch.c index a6c49bcb..c75b0188 100644 --- a/notmuch.c +++ b/notmuch.c @@ -201,8 +201,6 @@ static const command_t commands[] = { { "emacs-mua", NULL, 0, "send mail with notmuch and emacs." }, #endif - { "git", NULL, 0, - "manage notmuch tags with git" }, { "help", notmuch_help_command, NOTMUCH_COMMAND_CONFIG_CREATE, /* create but don't save config */ "This message, or more detailed help for the named command." } }; diff --git a/test/T850-git.sh b/test/T850-git.sh index 508615e1..7ea50939 100755 --- a/test/T850-git.sh +++ b/test/T850-git.sh @@ -7,6 +7,9 @@ if [ $NOTMUCH_HAVE_SFSEXP -ne 1 ]; then test_done fi +# be very careful using backup_database / restore_database in this +# file, as they fool the cache invalidation checks in notmuch-git. + add_email_corpus git config --global user.email notm...@example.org @@ -28,6 +31,35 @@ test_expect_success "notmuch git -p '' -C tags.git clone remote.git" test_begin_subtest "initial commit needs force" test_expect_code 1 "notmuch git -C tags.git commit" +test_begin_subtest "committing new prefix requires force" +notmuch git -C force-prefix.git init +notmuch tag +new-prefix::foo id:20091117190054.gu3...@dottiness.seas.harvard.edu +test_expect_code 1 "notmuch git -l debug -p 'new-prefix::' -C force-prefix.git commit" +notmuch tag -new-prefix::foo id:20091117190054.gu3...@dottiness.seas.harvard.edu + +test_begin_subtest "committing new prefix works with force" +notmuch tag +new-prefix::foo id:20091117190054.gu3...@dottiness.seas.harvard.edu +notmuch git -l debug -p 'new-prefix::' -C force-prefix.git commit --force +git -C force-prefix.git ls-tree -r --name-only HEAD | xargs dirname | sort -u | sed s,tags/,id:, > OUTPUT +notmuch tag -new-prefix::foo id:20091117190054.gu3...@dottiness.seas.harvard.edu +cat <<EOF>EXPECTED +id:20091117190054.gu3...@dottiness.seas.harvard.edu +EOF +test_expect_equal_file_nonempty EXPECTED OUTPUT + +test_begin_subtest "checkout new prefix requires force" +test_expect_code 1 "notmuch git -l debug -p 'new-prefix::' -C force-prefix.git checkout" + +test_begin_subtest "checkout new prefix works with force" +notmuch dump > BEFORE +notmuch git -l debug -p 'new-prefix::' -C force-prefix.git checkout --force +notmuch dump --include=tags id:20091117190054.gu3...@dottiness.seas.harvard.edu | grep -v '^#' > OUTPUT +notmuch restore < BEFORE +cat <<EOF > EXPECTED ++inbox +new-prefix%3a%3afoo +signed +unread -- id:20091117190054.gu3...@dottiness.seas.harvard.edu +EOF +test_expect_equal_file_nonempty EXPECTED OUTPUT + test_begin_subtest "commit" notmuch git -C tags.git commit --force git -C tags.git ls-tree -r --name-only HEAD | xargs dirname | sort -u | sed s,tags/,id:, > OUTPUT @@ -138,6 +170,17 @@ EOF notmuch git -C tags.git checkout test_expect_equal_file EXPECTED OUTPUT +test_begin_subtest "status (global config argument)" +cp notmuch-config notmuch-config.new +notmuch --config=notmuch-config.new config set git.path tags.git +notmuch tag +test id:20091117190054.gu3...@dottiness.seas.harvard.edu +notmuch --config=./notmuch-config.new git status > OUTPUT +cat <<EOF > EXPECTED +A 20091117190054.gu3...@dottiness.seas.harvard.edu test +EOF +notmuch --config=notmuch-config.new git checkout +test_expect_equal_file EXPECTED OUTPUT + test_begin_subtest "fetch" notmuch tag +test2 id:20091117190054.gu3...@dottiness.seas.harvard.edu notmuch git -C remote.git commit --force _______________________________________________ notmuch mailing list -- notmuch@notmuchmail.org To unsubscribe send an email to notmuch-le...@notmuchmail.org