add roscd, rosls support (#210)
* Add roscd, rosls support (#16) * refactor findpath.py, remove error msg from ros_location_find * rename findpath.py to rosfindpath.py
This commit is contained in:
parent
28b5778712
commit
496184db95
|
@ -8,6 +8,9 @@ install(FILES rosbash rosfish rostcsh roszsh
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
install(PROGRAMS scripts/rosrun.bat
|
install(PROGRAMS scripts/rosrun.bat
|
||||||
DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION})
|
DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION})
|
||||||
|
|
||||||
|
install(PROGRAMS scripts/rosfindpath.py scripts/roscd.bat scripts/rosls.bat
|
||||||
|
DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION})
|
||||||
else()
|
else()
|
||||||
install(PROGRAMS scripts/rosrun
|
install(PROGRAMS scripts/rosrun
|
||||||
DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION})
|
DESTINATION ${CATKIN_GLOBAL_BIN_DESTINATION})
|
||||||
|
|
|
@ -0,0 +1,52 @@
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
if "%1" equ "--help" goto :usage
|
||||||
|
if not "%2" equ "" goto :usage
|
||||||
|
|
||||||
|
if "%1" equ "" (
|
||||||
|
if not "%ROS_WORKSPACE%" equ "" (
|
||||||
|
cd /d %ROS_WORKSPACE%
|
||||||
|
exit /b 0
|
||||||
|
)
|
||||||
|
|
||||||
|
if not "%CMAKE_PREFIX_PATH%" equ "" (
|
||||||
|
for %%a in ("%CMAKE_PREFIX_PATH:;=";"%") do (
|
||||||
|
if exist %%a\.catkin (
|
||||||
|
cd /d %%a
|
||||||
|
exit /b 0
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
echo Neither ROS_WORKSPACE is set nor a catkin workspace is listed in CMAKE_PREFIX_PATH. Please set ROS_WORKSPACE or source a catkin workspace to use roscd with no arguments.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
for /f "tokens=*" %%g in ('call python %~dp0\findpath.py %1 forceeval') do (
|
||||||
|
set target_path=%%~g
|
||||||
|
)
|
||||||
|
|
||||||
|
if /i "%target_path:~0,7%"=="Error: " (
|
||||||
|
echo roscd: %target_path:~7%
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
if "%target_path%" equ "" (
|
||||||
|
if not "%ROS_WORKSPACE%" equ "" (
|
||||||
|
cd /d %ROS_WORKSPACE%
|
||||||
|
exit /b 0
|
||||||
|
)
|
||||||
|
|
||||||
|
echo No ROS_WORKSPACE set. Please set ROS_WORKSPACE to use roscd with no arguments.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
cd /d "%target_path%"
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
:usage
|
||||||
|
echo usage: roscd package
|
||||||
|
echo.
|
||||||
|
echo.
|
||||||
|
echo Jump to target package.
|
||||||
|
exit /b 0
|
|
@ -0,0 +1,79 @@
|
||||||
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import os
|
||||||
|
import subprocess
|
||||||
|
import sys
|
||||||
|
|
||||||
|
ROS_CACHE_TIMEOUT_ENV_NAME = 'ROS_CACHE_TIMEOUT'
|
||||||
|
ROS_LOCATIONS_ENV_NAME = 'ROS_LOCATIONS'
|
||||||
|
ROS_LOCATION_SEP = ';'
|
||||||
|
ERROR_PREFIX = 'Error: '
|
||||||
|
|
||||||
|
def ros_location_find(package_name):
|
||||||
|
# process ROS_LOCATION and return if found
|
||||||
|
ros_location = os.environ.get(ROS_LOCATIONS_ENV_NAME)
|
||||||
|
if ros_location is not None:
|
||||||
|
locations = ros_location.split(ROS_LOCATION_SEP)
|
||||||
|
for loc in locations:
|
||||||
|
index = loc.find('=')
|
||||||
|
if index != -1:
|
||||||
|
if package_name == loc[:index]:
|
||||||
|
return 0, loc[index + 1:]
|
||||||
|
|
||||||
|
if package_name == 'log':
|
||||||
|
p = subprocess.Popen('roslaunch-logs', stdout=subprocess.PIPE)
|
||||||
|
result_location = p.communicate()[0].strip()
|
||||||
|
result_code = p.returncode
|
||||||
|
return result_code, result_location if result_code == 0 else ''
|
||||||
|
|
||||||
|
if package_name == 'test_results':
|
||||||
|
p = subprocess.Popen('rosrun.bat rosunit test_results_dir.py', stdout=subprocess.PIPE)
|
||||||
|
result_location = p.communicate()[0].strip()
|
||||||
|
result_code = p.returncode
|
||||||
|
return result_code, result_location if result_code == 0 else ''
|
||||||
|
|
||||||
|
# process package_name and return
|
||||||
|
env = os.environ
|
||||||
|
env[ROS_CACHE_TIMEOUT_ENV_NAME] = '-1.0'
|
||||||
|
p = subprocess.Popen(['rospack', 'find', package_name], stdout=subprocess.PIPE)
|
||||||
|
result_location = p.communicate()[0].strip()
|
||||||
|
result_code = p.returncode
|
||||||
|
if result_code == 0:
|
||||||
|
return result_code, result_location
|
||||||
|
|
||||||
|
p = subprocess.Popen(['rosstack', 'find', package_name], stdout=subprocess.PIPE)
|
||||||
|
result_location = p.communicate()[0].strip()
|
||||||
|
result_code = p.returncode
|
||||||
|
if result_code == 0:
|
||||||
|
return result_code, result_location
|
||||||
|
|
||||||
|
# package <package_name> not found
|
||||||
|
return result_code, ''
|
||||||
|
|
||||||
|
# takes as argument either just a package-path or just a pkgname
|
||||||
|
# returns 0 for no argument or if package (+ path) exist, 1 else
|
||||||
|
# on success with arguments print result_path or Error: error message
|
||||||
|
def findpathmain(argv):
|
||||||
|
reldir = ''
|
||||||
|
parameters = os.path.normpath(argv[0]).split(os.path.sep)
|
||||||
|
package_name = parameters[0]
|
||||||
|
if len(parameters) > 1:
|
||||||
|
reldir = os.path.sep.join(parameters[1:])
|
||||||
|
else:
|
||||||
|
if len(argv) < 2 or argv[1] != 'forceeval':
|
||||||
|
print(ERROR_PREFIX + '[' + package_name + '] is not a valid argument!', file=sys.stderr)
|
||||||
|
return 1
|
||||||
|
|
||||||
|
error_code, package_dir = ros_location_find(package_name)
|
||||||
|
if error_code != 0:
|
||||||
|
print(ERROR_PREFIX + '[' + package_name + '] not found!', file=sys.stderr)
|
||||||
|
return error_code
|
||||||
|
else:
|
||||||
|
rosdir = os.path.normpath(os.path.sep.join([package_dir, reldir]))
|
||||||
|
print(rosdir)
|
||||||
|
return 0
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
if len(sys.argv) < 2:
|
||||||
|
sys.exit(1)
|
||||||
|
sys.exit(findpathmain(sys.argv[1:]))
|
|
@ -0,0 +1,21 @@
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
if "%1" equ "--help" goto :usage
|
||||||
|
for /f "tokens=*" %%g in ('call python %~dp0\findpath.py %1 forceeval') do (
|
||||||
|
set target_path=%%~g
|
||||||
|
)
|
||||||
|
|
||||||
|
if /i "%target_path:~0,7%"=="Error: " (
|
||||||
|
echo rosls: %target_path:~7%
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
dir "%target_path%"
|
||||||
|
exit /b 0
|
||||||
|
|
||||||
|
:usage
|
||||||
|
echo usage: rosls [package]
|
||||||
|
echo.
|
||||||
|
echo.
|
||||||
|
echo Lists contents of a package directory.
|
||||||
|
exit /b 0
|
Loading…
Reference in New Issue