Allow moving the gadget/configuration dirs to arbitrary location

This commit is contained in:
Ben Jackson 2020-05-09 15:22:42 +01:00
commit 5837135fee
6 changed files with 106 additions and 14 deletions

View file

@ -85,7 +85,12 @@ There are 2 ways:
follow the instructions for running tets directly. follow the instructions for running tets directly.
1. Directly: Run `./install_gadget.py --all` and then `./run_tests`. Note that 1. Directly: Run `./install_gadget.py --all` and then `./run_tests`. Note that
this depends on your runtime environment and might not match CI. I recommend this depends on your runtime environment and might not match CI. I recommend
running the tests in the docker container. running the tests in the docker container. If you have your own custom
gadgets and/or custom configurations (in `vimspector/configurations` and/or
`vimspector/gadget`, then consider using `./run_tests --install --basedir
/tmp/vimspector_test` (then delete `/tmp/vimspector_test`). This will install
the gadgets to that dir and use it for the gadget dir/config dir so that your
custom configuration won't interfere with the tess.
When tests fail, they dump a load of logs to a directory for each failed tests. When tests fail, they dump a load of logs to a directory for each failed tests.
Usually the most useful output is `messages`, which tells you what actually Usually the most useful output is `messages`, which tells you what actually

View file

@ -530,12 +530,10 @@ def InstallGagdet( name, gadget, failed, all_adapters ):
print( "FAILED installing {}: {}".format( name, e ) ) print( "FAILED installing {}: {}".format( name, e ) )
vimspector_base = os.path.dirname( __file__ ) # ------------------------------------------------------------------------------
OS = install.GetOS() # Entry point
gadget_dir = install.GetGadgetDir( vimspector_base, OS ) # ------------------------------------------------------------------------------
print( 'OS = ' + OS )
print( 'gadget_dir = ' + gadget_dir )
parser = argparse.ArgumentParser( parser = argparse.ArgumentParser(
formatter_class = argparse.RawDescriptionHelpFormatter, formatter_class = argparse.RawDescriptionHelpFormatter,
@ -566,6 +564,14 @@ parser.add_argument( '--force-all',
action = 'store_true', action = 'store_true',
help = 'Enable all unsupported completers' ) help = 'Enable all unsupported completers' )
parser.add_argument( '--basedir',
action = 'store',
help = 'Advanced option. '
'Base directory under which to keep gadgets, '
'configurations, etc.. Default: vimspector '
'installation dir. Useful for developers or '
'multi-user installations' )
parser.add_argument( '--no-gadget-config', parser.add_argument( '--no-gadget-config',
action = 'store_true', action = 'store_true',
help = "Don't write the .gagets.json, just install" ) help = "Don't write the .gagets.json, just install" )
@ -623,6 +629,18 @@ args = parser.parse_args()
installer.AbortIfSUperUser( args.sudo ) installer.AbortIfSUperUser( args.sudo )
vimspector_base = os.path.dirname( __file__ )
if args.basedir:
vimspector_base = os.path.abspath( args.basedir )
install.MakeInstallDirs( vimspector_base )
OS = install.GetOS()
gadget_dir = install.GetGadgetDir( vimspector_base, OS )
print( 'OS = ' + OS )
print( 'gadget_dir = ' + gadget_dir )
if args.force_all and not args.all: if args.force_all and not args.all:
args.all = True args.all = True
@ -675,3 +693,9 @@ else:
if failed: if failed:
raise RuntimeError( 'Failed to install gadgets: {}'.format( raise RuntimeError( 'Failed to install gadgets: {}'.format(
','.join( failed ) ) ) ','.join( failed ) ) )
if args.basedir:
print( "" )
print( "***NOTE***: You set --basedir to " + args.basedir +
". Therefore you _must_ ensure this is in your vimrc:\n"
"let g:vimspector_base_dir='" + vimspector_base + "'" )

View file

@ -32,9 +32,8 @@ from vimspector import ( breakpoints,
variables ) variables )
from vimspector.vendor.json_minify import minify from vimspector.vendor.json_minify import minify
VIMSPECTOR_HOME = os.path.abspath( os.path.join( os.path.dirname( __file__ ), # We cache this once, and don't allow it to change (FIXME?)
'..', VIMSPECTOR_HOME = utils.GetVimspectorBase()
'..' ) )
# cache of what the user entered for any option we ask them # cache of what the user entered for any option we ask them
USER_CHOICES = {} USER_CHOICES = {}
@ -1007,7 +1006,7 @@ def PathsToAllGadgetConfigs( vimspector_base, current_file ):
def PathsToAllConfigFiles( vimspector_base, current_file, filetypes ): def PathsToAllConfigFiles( vimspector_base, current_file, filetypes ):
for ft in filetypes: for ft in filetypes + [ '_all' ]:
for p in sorted( glob.glob( for p in sorted( glob.glob(
os.path.join( install.GetConfigDirForFiletype( vimspector_base, ft ), os.path.join( install.GetConfigDirForFiletype( vimspector_base, ft ),
'*.json' ) ) ): '*.json' ) ) ):

View file

@ -26,6 +26,18 @@ def GetOS():
return 'linux' return 'linux'
def mkdirs( p ):
try:
os.makedirs( p )
except FileExistsError:
pass
def MakeInstallDirs( vimspector_base ):
mkdirs( GetGadgetConfigDir( vimspector_base ) )
mkdirs( GetConfigDirForFiletype( vimspector_base, '_all' ) )
def GetGadgetDir( vimspector_base, OS ): def GetGadgetDir( vimspector_base, OS ):
return os.path.join( os.path.abspath( vimspector_base ), 'gadgets', OS ) return os.path.join( os.path.abspath( vimspector_base ), 'gadgets', OS )

View file

@ -563,3 +563,12 @@ def HideSplash( api_prefix, splash ):
Call( f'vimspector#internal#{api_prefix}popup#HideSplash', splash ) Call( f'vimspector#internal#{api_prefix}popup#HideSplash', splash )
return None return None
def GetVimspectorBase():
try:
return vim.vars[ 'vimspector_base_dir' ].decode( 'utf-8' )
except KeyError:
return os.path.abspath( os.path.join( os.path.dirname( __file__ ),
'..',
'..' ) )

View file

@ -1,16 +1,54 @@
#!/usr/bin/env bash #!/usr/bin/env bash
if [ "$1" == "--help" ]; then if [ "$1" == "--help" ]; then
echo "$(basename $0) <optional list of tests in form file:func>" echo "$(basename $0) [--basedir <basedir>] [--install] <optional list of tests in form file:func>"
echo ""
echo " --basedir <basedir> path to runtime directory like the optino to install_gadget.py"
echo " --install run install_gadget.py, useful with --basedir"
echo "e.g.: " echo "e.g.: "
echo " - run all tests: $0" echo " - run all tests: $0"
echo " - run specific tests script: $0 signature_help.test.vim" echo " - run specific tests script: $0 signature_help.test.vim"
echo " - run specific tests fun: $0 signature_help.test.vim:Test_signatures_TopLine\(\)" echo " - run specific tests fun: $0 signature_help.test.vim:Test_signatures_TopLine\(\)"
echo " - run all tests in a clean env: $0 --basedir \$(mktemp -d) --install"
exit 0 exit 0
fi fi
RUN_VIM="vim --clean --not-a-term"
BASEDIR=$(dirname $0)
INSTALL=0
RUN_VIM="vim -N --clean --not-a-term"
RUN_TEST="${RUN_VIM} -S lib/run_test.vim" RUN_TEST="${RUN_VIM} -S lib/run_test.vim"
BASEDIR_CMD='py3 pass'
while [ -n "$1" ]; do
case "$1" in
"--basedir")
BASEDIR=$2
if [[ ! $BASEDIR = /* ]]; then
# Relative
BASEDIR=$(pwd)/${BASEDIR}
fi
BASEDIR_CMD="let g:vimspector_base_dir='${BASEDIR}'"
shift
shift
;;
"--install")
INSTALL=1
shift
;;
"--")
shift
break
;;
*)
break
;;
esac
done
if [ $INSTALL = 1 ]; then
python3 $(dirname $0)/install_gadget.py --basedir ${BASEDIR} --all
fi
if [ -z "$VIMSPECTOR_MIMODE" ]; then if [ -z "$VIMSPECTOR_MIMODE" ]; then
if which lldb >/dev/null 2>&1; then if which lldb >/dev/null 2>&1; then
@ -25,6 +63,10 @@ fi
echo "Testing with:" echo "Testing with:"
echo " * VIMSPECTOR_MIMODE=$VIMSPECTOR_MIMODE" echo " * VIMSPECTOR_MIMODE=$VIMSPECTOR_MIMODE"
echo " * RUN_VIM=$RUN_VIM"
echo " * RUN_TEST=$RUN_TEST"
echo " * BASEDIR_CMD=$BASEDIR_CMD"
echo "%SETUP - Building test programs..." echo "%SETUP - Building test programs..."
set -e set -e
@ -53,9 +95,10 @@ for t in ${TESTS}; do
# split on : into fileName and testName # split on : into fileName and testName
IFS=: read -s t T <<< "$t" IFS=: read -s t T <<< "$t"
TESTLOGDIR=$(pwd)/logs/$t TESTLOGDIR=${BASEDIR}/tests/logs/$t
if ${RUN_TEST} --cmd 'au SwapExists * let v:swapchoice = "e"' $t $T \ if ${RUN_TEST} --cmd "${BASEDIR_CMD}" \
--cmd 'au SwapExists * let v:swapchoice = "e"' $t $T \
&& [ -f $t.res ]; then && [ -f $t.res ]; then
echo "%PASS: $t PASSED" echo "%PASS: $t PASSED"
else else