Support specifying a command after yadm enter
This commit is contained in:
parent
96bce8dbac
commit
32baf81b56
3 changed files with 33 additions and 9 deletions
|
@ -58,8 +58,9 @@ def test_enter(runner, yadm_y, paths, shell, success):
|
||||||
'csh',
|
'csh',
|
||||||
'zsh',
|
'zsh',
|
||||||
])
|
])
|
||||||
|
@pytest.mark.parametrize('cmd', [False, True], ids=['no-cmd', 'cmd'])
|
||||||
@pytest.mark.usefixtures('ds1_copy')
|
@pytest.mark.usefixtures('ds1_copy')
|
||||||
def test_enter_shell_ops(runner, yadm_y, paths, shell, opts, path):
|
def test_enter_shell_ops(runner, yadm_y, paths, shell, opts, path, cmd):
|
||||||
"""Enter tests for specific shell options"""
|
"""Enter tests for specific shell options"""
|
||||||
|
|
||||||
# Create custom shell to detect options passed
|
# Create custom shell to detect options passed
|
||||||
|
@ -67,11 +68,24 @@ def test_enter_shell_ops(runner, yadm_y, paths, shell, opts, path):
|
||||||
custom_shell.write('#!/bin/sh\necho OPTS=$*\necho PROMPT=$PROMPT')
|
custom_shell.write('#!/bin/sh\necho OPTS=$*\necho PROMPT=$PROMPT')
|
||||||
custom_shell.chmod(0o775)
|
custom_shell.chmod(0o775)
|
||||||
|
|
||||||
|
test_cmd = ['test1', 'test2', 'test3']
|
||||||
|
|
||||||
|
enter_cmd = ['enter']
|
||||||
|
if cmd:
|
||||||
|
enter_cmd += test_cmd
|
||||||
|
|
||||||
env = os.environ.copy()
|
env = os.environ.copy()
|
||||||
env['SHELL'] = custom_shell
|
env['SHELL'] = custom_shell
|
||||||
|
|
||||||
run = runner(command=yadm_y('enter'), env=env)
|
run = runner(command=yadm_y(*enter_cmd), env=env)
|
||||||
assert run.success
|
assert run.success
|
||||||
assert run.err == ''
|
assert run.err == ''
|
||||||
assert f'OPTS={opts}' in run.out
|
assert f'OPTS={opts}' in run.out
|
||||||
assert f'PROMPT=yadm shell ({paths.repo}) {path} >' in run.out
|
assert f'PROMPT=yadm shell ({paths.repo}) {path} >' in run.out
|
||||||
|
if cmd:
|
||||||
|
assert '-c ' + ' '.join(test_cmd) in run.out
|
||||||
|
assert 'Entering yadm repo' not in run.out
|
||||||
|
assert 'Leaving yadm repo' not in run.out
|
||||||
|
else:
|
||||||
|
assert 'Entering yadm repo' in run.out
|
||||||
|
assert 'Leaving yadm repo' in run.out
|
||||||
|
|
12
yadm
12
yadm
|
@ -900,6 +900,7 @@ function encrypt() {
|
||||||
}
|
}
|
||||||
|
|
||||||
function enter() {
|
function enter() {
|
||||||
|
command="$*"
|
||||||
require_shell
|
require_shell
|
||||||
require_repo
|
require_repo
|
||||||
|
|
||||||
|
@ -913,12 +914,17 @@ function enter() {
|
||||||
shell_path="%~"
|
shell_path="%~"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Entering yadm repo"
|
shell_cmd=()
|
||||||
|
if [ -n "$command" ]; then
|
||||||
|
shell_cmd=('-c' "$*")
|
||||||
|
fi
|
||||||
|
|
||||||
|
[ "${#shell_cmd[@]}" -eq 0 ] && echo "Entering yadm repo"
|
||||||
|
|
||||||
yadm_prompt="yadm shell ($YADM_REPO) $shell_path > "
|
yadm_prompt="yadm shell ($YADM_REPO) $shell_path > "
|
||||||
PROMPT="$yadm_prompt" PS1="$yadm_prompt" "$SHELL" $shell_opts
|
PROMPT="$yadm_prompt" PS1="$yadm_prompt" "$SHELL" $shell_opts "${shell_cmd[@]}"
|
||||||
|
|
||||||
echo "Leaving yadm repo"
|
[ "${#shell_cmd[@]}" -eq 0 ] && echo "Leaving yadm repo"
|
||||||
}
|
}
|
||||||
|
|
||||||
function git_command() {
|
function git_command() {
|
||||||
|
|
12
yadm.1
12
yadm.1
|
@ -47,7 +47,7 @@ list
|
||||||
|
|
||||||
.BR yadm " encrypt
|
.BR yadm " encrypt
|
||||||
|
|
||||||
.BR yadm " enter
|
.BR yadm " enter [ command ]
|
||||||
|
|
||||||
.BR yadm " decrypt
|
.BR yadm " decrypt
|
||||||
.RB [ -l ]
|
.RB [ -l ]
|
||||||
|
@ -187,10 +187,14 @@ See the ENCRYPTION section for more details.
|
||||||
Run a sub-shell with all Git variables set. Exit the sub-shell the same way you
|
Run a sub-shell with all Git variables set. Exit the sub-shell the same way you
|
||||||
leave your normal shell (usually with the "exit" command). This sub-shell can
|
leave your normal shell (usually with the "exit" command). This sub-shell can
|
||||||
be used to easily interact with your yadm repository using "git" commands. This
|
be used to easily interact with your yadm repository using "git" commands. This
|
||||||
could be useful if you are using a tool which uses Git directly.
|
could be useful if you are using a tool which uses Git directly, such as tig,
|
||||||
|
vim-fugitive, git-cola, etc.
|
||||||
|
|
||||||
For example, Emacs Tramp and Magit can manage files by using this
|
Optionally, you can provide a command after "enter", and instead of invoking
|
||||||
configuration:
|
your shell, that command will be run with all of the Git variables exposed to
|
||||||
|
the command's environment.
|
||||||
|
|
||||||
|
Emacs Tramp and Magit can manage files by using this configuration:
|
||||||
|
|
||||||
.RS
|
.RS
|
||||||
(add-to-list 'tramp-methods
|
(add-to-list 'tramp-methods
|
||||||
|
|
Loading…
Reference in a new issue