ROS/CommandLineTools/Review
This review is scoped to command-line tools for end users. Internal tools (e.g. gendeps, rosdeb) are out of scope.
rosrecord/rosplay
- rosrun
 - vizdeps
 
General requirements:
- ROS_NAMESPACE-aware, where appropriate
 composable, where appropriate (e.g. rostopic type foo | rosmsg, rosparam dump x.yaml && rosrecord)
- Well documented (currently failing at this)
 
Questions:
- What is the status of tcsch support?
 Should rosmsg/rossrv adopt the command-based syntax of rostopic/rosnode/rosparam instead of the option-based syntax, e.g. rosmsg show std_msgs/String instead of rosmsg std_msgs/String?
- rosnode has now moved to the command-based syntax in the sessions branch
 
- Deprecations?
 
Current unfulfilled needs:
ability to query service state. This should probably be folded into rossrv, but this will cause some incongruity with rosmsg
- other needs?
 
Todos:
- promote rosgraphviz/rosconviz to top level
 - standardize naming (vizdeps should have ros prefix)
 - remove roscd package
 - remove rosmap (DONE)
 - remove shparam (DONE)
 - remove xmlparam (DONE)
 
Comments
Brian:
- I like the idea of moving to a common command syntax (e.g., rostopic list, rosmsg show, rospack deps)
 - I added rospack to the list, because it is often used by developers.
 In the rospack code review, Rob expressed a desire for placing command-specific options after the command, e.g.:
program command [options] [package]
- kwc: rostopic/rosnode/rosparam follow this convention
 
- If rosparam subsumes the functionality of xmlparam (which it seems to), then the latter should indeed be removed. No need to confuse people with too many options.
 - Why do we provide both rosmsg and rossrv?  Given that message and service types live in the same namespace, wouldn't a single tool suffice? 
- kwc: rossrv is mostly just an alias of rosmsg as it seemed confusing to call rosmsg to search for a .srv file. They share the same common code, though they do a different search. I'm contemplating whether or not the rossrv tool would get the ability query live services, or whether that is a separate 'rosservice' tool. 
- tbf: The seperation of msg and srv lookups is good to keep. I think that instead of rosservice it could be part of rosnode since they are associated with nodes (e.g. rosnode list-services, or rosnode services my_node)
 
 
 - kwc: rossrv is mostly just an alias of rosmsg as it seemed confusing to call rosmsg to search for a .srv file. They share the same common code, though they do a different search. I'm contemplating whether or not the rossrv tool would get the ability query live services, or whether that is a separate 'rosservice' tool. 
 
Tully:
- If we're doing rosrun, shouldn't rosmake be standardized this way too? 
- And if we're doing rosmake I'd really like to be able to build a list of packages efficiently. Two rosmake's of high level packages overlaps a lot.
 
 - rospack vcs is close to unused. remove?
 - we may want to differentiate between bash scripts and tools? if you simply type $ros and tab complete there are a lot of options. I can't even identify all of them. I think some of them should be demoted and roslaunched such as rosmakeall it doesn't need to be called from anywhere.
 
~tfoote $ ros rosapt-get roscore rosed roslaunch rosmake-download rospack rospmake rosrun rostopic rosbusybox roscp rosgcov rosls rosmap rosparam rosprereq rossrv rosupdate roscd rosd rosgcov_summarize rosmake rosmsg rospd rosrebag rostar roscmd rosdeb rosinstall rosmakeall rosnode rosplay rosrecord rostest
Jeremy:
- Tab-completions, in their current implementation are hard to maintain. You always have to go edit the rosbash and rostcsh definitions, and these need to be added for new rostools on an as-needed basis. A solution to this is to count on the programs themselves to generate their own list of tab-completions. This can be done using a special argument such as "TABCOMPLETE" as a first argument that the program always checks for. Then all that needs to go in the rosbash file is a line such as:
 
complete -C "rosrecord TABCOMPLETE" rosrecord
- In this case, the rosrecord executable is then passed the argument TABCOMPLETE followed by the contents of the arguents being tab-completed. Everything it prints out is then used as the tab-complete candidates. This makes it possible to easily add intelligent tab-completion including options or sub-commands. I'm 99% sure tcsh has a comparable construct which would allow tab-completion rules to live in a single place (the program itself) and work for both bash and tcsh.
 
Meeting Notes
- rosmsg/rossrv 
- move to command syntax #828
 - add search by default to rosmsg/srv #869
 
 - rospack 
- replace deps with depends but keep deps as an alias #860
 - move command specific options after command (rospack #861 #862)
 
 - add rosservice #867
 - roslaunch #868 
- consolidate rosrun and roslaunch
 - standardize on *.launch
 - add flag to force it to launch a file as a launch file if extension is different
 
 - combine rosmake and rospmake, kill rosmake-download #863 
- add profiling
 - add ability to target
 - add switch to do parallel make inside packages
 - add -k to keep going
 - replace rosmake-download with "rosmake -k -t download"
 
 - Follow Jeremy's recommendation for self-reporting of tab completion by tools
 - potentially remove rosupdate
 - remove rosdeb from PATH #865
 - hide #865 
- rosbusybox #865
 - rostar #865
 
 - Hide in rosbash #866 
- roscmd
 - rosd
 
 - promote rosgraphviz #870
 - rename vizdeps to rosvizdeps #871 
- change to interactive(long term)
 
 - hide rosinstall until ready #865
 
Package statuses
- rosmsg: conditionally cleared #828 #869
 - rospack: API conditionally cleared #860 #861 #862
 - roslaunch: API conditionally cleared #868
 - rosparam: API cleared
 - rostopic: API cleared
 - rosnode: API cleared
 - ros(graph)viz: API cleared #870
 - rosvizdeps: API cleared #871