diff --git a/doc/man1/notmuch-config.rst b/doc/man1/notmuch-config.rst index 36d48725..e2e9a632 100644 --- a/doc/man1/notmuch-config.rst +++ b/doc/man1/notmuch-config.rst @@ -107,6 +107,14 @@ paths are presumed relative to `$HOME` for items in section Default: see :ref:`database` +.. nmconfig:: git.path + + Default location for git repository for :any:`notmuch-git`. + +.. nmconfig:: git.tag_prefix + + Default tag prefix (filter) for :any:`notmuch-git`. + .. nmconfig:: index.decrypt Policy for decrypting encrypted messages during indexing. Must be diff --git a/doc/man1/notmuch-git.rst b/doc/man1/notmuch-git.rst index 6a2d7fcd..ad859b80 100644 --- a/doc/man1/notmuch-git.rst +++ b/doc/man1/notmuch-git.rst @@ -246,6 +246,8 @@ value to locate the git repository. - Environment variable :envvar:`NOTMUCH_GIT_DIR`. +- Configuration item :nmconfig:`git.path` + - If invoked as `nmbug` or with the :option:`--nmbug` option, :code:`$HOME/.nmbug`; otherwise :code:`$XDG_DATA_HOME/notmuch/$NOTMUCH_PROFILE/git`. @@ -262,6 +264,8 @@ value to define the tag prefix. - Environment variable :envvar:`NOTMUCH_GIT_PREFIX`. +- Configuration item :nmconfig:`git.tag_prefix`. + - If invoked as `nmbug` or with the :option:`--nmbug` option, :code:`notmuch::`, otherwise the empty string. diff --git a/notmuch-git.py b/notmuch-git.py index 9d5c7876..35785336 100644 --- a/notmuch-git.py +++ b/notmuch-git.py @@ -1019,7 +1019,9 @@ if __name__ == '__main__': if nmbug_mode: default = _os.path.join('~', '.nmbug') else: - default = xdg_data_path(notmuch_profile) + default = _notmuch_config_get ('git.path') + if default == '': + default = xdg_data_path(notmuch_profile) NOTMUCH_GIT_DIR = _os.path.expanduser(_os.getenv('NOTMUCH_GIT_DIR', default)) @@ -1033,7 +1035,7 @@ if __name__ == '__main__': if nmbug_mode: prefix = 'notmuch::' else: - prefix = '' + prefix = _notmuch_config_get ('git.tag_prefix') TAG_PREFIX = _os.getenv('NOTMUCH_GIT_PREFIX', prefix) diff --git a/test/T850-git.sh b/test/T850-git.sh index 98233055..f8537064 100755 --- a/test/T850-git.sh +++ b/test/T850-git.sh @@ -15,6 +15,13 @@ git config --global user.name "Notmuch Test Suite" test_begin_subtest "init" test_expect_success "notmuch git -p '' -C remote.git init" +test_begin_subtest "init (git.path)" +notmuch config set git.path configured.git +notmuch git init +notmuch config set git.path +output=$(git -C configured.git rev-parse --is-bare-repository) +test_expect_equal "$output" "true" + test_begin_subtest "clone" test_expect_success "notmuch git -p '' -C tags.git clone remote.git" @@ -102,6 +109,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.GU3165@dottiness.seas.harvard.edu +notmuch --config=./notmuch-config.new git status > OUTPUT +cat < EXPECTED +A 20091117190054.GU3165@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.GU3165@dottiness.seas.harvard.edu notmuch git -C remote.git commit @@ -175,6 +193,32 @@ repository = CWD/remote.git EOF test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "env variable NOTMUCH_GIT_DIR overrides config when invoked as 'nmbug'" +notmuch config set git.path `pwd`/bar +NOTMUCH_GIT_DIR=`pwd`/remote.git "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^repository' | notmuch_dir_sanitize > OUTPUT +notmuch config set git.path +cat < EXPECTED +repository = CWD/remote.git +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "env variable NOTMUCH_GIT_DIR overrides config when invoked as 'notmuch git'" +notmuch config set git.path `pwd`/bar +NOTMUCH_GIT_DIR=`pwd`/remote.git notmuch git -ldebug status |& grep '^repository' | notmuch_dir_sanitize > OUTPUT +notmuch config set git.path +cat < EXPECTED +repository = CWD/remote.git +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "env variable NOTMUCH_GIT_PREFIX works when invoked as 'nmbug'" +NOTMUCH_GIT_PREFIX=env:: "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^prefix' | notmuch_dir_sanitize > OUTPUT +cat < EXPECTED +prefix = env:: +EOF +test_expect_equal_file EXPECTED OUTPUT + test_begin_subtest "env variable NOTMUCH_GIT_PREFIX works when invoked as nmbug" NOTMUCH_GIT_PREFIX=foo:: "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^prefix' | notmuch_dir_sanitize > OUTPUT cat < EXPECTED @@ -182,8 +226,19 @@ prefix = foo:: EOF test_expect_equal_file EXPECTED OUTPUT -test_begin_subtest "env variable NOTMUCH_GIT_PREFIX works when invoked as 'notmuch git'" +test_begin_subtest "env variable NOTMUCH_GIT_PREFIX overrides config when invoked as 'nmbug'" +notmuch config set git.tag_prefix config:: +NOTMUCH_GIT_PREFIX=env:: "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^prefix' | notmuch_dir_sanitize > OUTPUT +notmuch config set git.path +cat < EXPECTED +prefix = env:: +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "env variable NOTMUCH_GIT_PREFIX overrides config when invoked as 'notmuch git'" +notmuch config set git.tag_prefix config:: NOTMUCH_GIT_PREFIX=env:: notmuch git -ldebug status |& grep '^prefix' | notmuch_dir_sanitize > OUTPUT +notmuch config set git.path cat < EXPECTED prefix = env:: EOF @@ -210,4 +265,25 @@ CWD/$repo EOF test_expect_equal_file EXPECTED OUTPUT +test_begin_subtest "init, configured location" +repo=configured-tags +notmuch config set git.path `pwd`/$repo +notmuch git -ldebug init |& grep '^repository' | notmuch_dir_sanitize > OUTPUT +notmuch config set git.path +git -C $repo rev-parse --absolute-git-dir | notmuch_dir_sanitize >> OUTPUT +cat < EXPECTED +repository = CWD/$repo +CWD/$repo +EOF +test_expect_equal_file EXPECTED OUTPUT + +test_begin_subtest "configured tag prefix" +notmuch config set git.tag_prefix test:: +notmuch git -ldebug status |& grep '^prefix' > OUTPUT +notmuch config set git.tag_prefix +cat < EXPECTED +prefix = test:: +EOF +test_expect_equal_file EXPECTED OUTPUT + test_done