CLI/git: support configuration for repo location / prefix

This is probably more convenient than always passing a command line
argument.

Use notmuch-config for consistency with other notmuch CLI tools.

Now that there is something relevant in the config files, test the
--config option.
This commit is contained in:
David Bremner 2022-05-10 07:32:48 -03:00
parent 8ed68c1bbe
commit 99e85823c8
4 changed files with 93 additions and 3 deletions

View file

@ -107,6 +107,14 @@ paths are presumed relative to `$HOME` for items in section
Default: see :ref:`database` 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 .. nmconfig:: index.decrypt
Policy for decrypting encrypted messages during indexing. Must be Policy for decrypting encrypted messages during indexing. Must be

View file

@ -246,6 +246,8 @@ value to locate the git repository.
- Environment variable :envvar:`NOTMUCH_GIT_DIR`. - Environment variable :envvar:`NOTMUCH_GIT_DIR`.
- Configuration item :nmconfig:`git.path`
- If invoked as `nmbug` or with the :option:`--nmbug` option, - If invoked as `nmbug` or with the :option:`--nmbug` option,
:code:`$HOME/.nmbug`; otherwise :code:`$HOME/.nmbug`; otherwise
:code:`$XDG_DATA_HOME/notmuch/$NOTMUCH_PROFILE/git`. :code:`$XDG_DATA_HOME/notmuch/$NOTMUCH_PROFILE/git`.
@ -262,6 +264,8 @@ value to define the tag prefix.
- Environment variable :envvar:`NOTMUCH_GIT_PREFIX`. - Environment variable :envvar:`NOTMUCH_GIT_PREFIX`.
- Configuration item :nmconfig:`git.tag_prefix`.
- If invoked as `nmbug` or with the :option:`--nmbug` option, - If invoked as `nmbug` or with the :option:`--nmbug` option,
:code:`notmuch::`, otherwise the empty string. :code:`notmuch::`, otherwise the empty string.

View file

@ -1019,6 +1019,8 @@ if __name__ == '__main__':
if nmbug_mode: if nmbug_mode:
default = _os.path.join('~', '.nmbug') default = _os.path.join('~', '.nmbug')
else: else:
default = _notmuch_config_get ('git.path')
if default == '':
default = xdg_data_path(notmuch_profile) default = xdg_data_path(notmuch_profile)
NOTMUCH_GIT_DIR = _os.path.expanduser(_os.getenv('NOTMUCH_GIT_DIR', default)) NOTMUCH_GIT_DIR = _os.path.expanduser(_os.getenv('NOTMUCH_GIT_DIR', default))
@ -1033,7 +1035,7 @@ if __name__ == '__main__':
if nmbug_mode: if nmbug_mode:
prefix = 'notmuch::' prefix = 'notmuch::'
else: else:
prefix = '' prefix = _notmuch_config_get ('git.tag_prefix')
TAG_PREFIX = _os.getenv('NOTMUCH_GIT_PREFIX', prefix) TAG_PREFIX = _os.getenv('NOTMUCH_GIT_PREFIX', prefix)

View file

@ -15,6 +15,13 @@ git config --global user.name "Notmuch Test Suite"
test_begin_subtest "init" test_begin_subtest "init"
test_expect_success "notmuch git -p '' -C remote.git 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_begin_subtest "clone"
test_expect_success "notmuch git -p '' -C tags.git clone remote.git" test_expect_success "notmuch git -p '' -C tags.git clone remote.git"
@ -102,6 +109,17 @@ EOF
notmuch git -C tags.git checkout notmuch git -C tags.git checkout
test_expect_equal_file EXPECTED OUTPUT 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 <<EOF > 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" test_begin_subtest "fetch"
notmuch tag +test2 id:20091117190054.GU3165@dottiness.seas.harvard.edu notmuch tag +test2 id:20091117190054.GU3165@dottiness.seas.harvard.edu
notmuch git -C remote.git commit notmuch git -C remote.git commit
@ -175,6 +193,32 @@ repository = CWD/remote.git
EOF EOF
test_expect_equal_file EXPECTED OUTPUT 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 <<EOF > 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 <<EOF > 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 <<EOF > EXPECTED
prefix = env::
EOF
test_expect_equal_file EXPECTED OUTPUT
test_begin_subtest "env variable NOTMUCH_GIT_PREFIX works when invoked as nmbug" 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 NOTMUCH_GIT_PREFIX=foo:: "$NOTMUCH_BUILDDIR"/nmbug -ldebug status |& grep '^prefix' | notmuch_dir_sanitize > OUTPUT
cat <<EOF > EXPECTED cat <<EOF > EXPECTED
@ -182,8 +226,19 @@ prefix = foo::
EOF EOF
test_expect_equal_file EXPECTED OUTPUT 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 <<EOF > 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_GIT_PREFIX=env:: notmuch git -ldebug status |& grep '^prefix' | notmuch_dir_sanitize > OUTPUT
notmuch config set git.path
cat <<EOF > EXPECTED cat <<EOF > EXPECTED
prefix = env:: prefix = env::
EOF EOF
@ -210,4 +265,25 @@ CWD/$repo
EOF EOF
test_expect_equal_file EXPECTED OUTPUT 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 <<EOF > 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 <<EOF > EXPECTED
prefix = test::
EOF
test_expect_equal_file EXPECTED OUTPUT
test_done test_done