Changed ros:📦:command() to use librospack, instead of shelling

out to rospack via popen().  Added a couple of tests for ros::package to
test_roslib.  Updated other tests in test_roslib to account for the new
dependency from roslib to rospack.

This change *should* fix the interrupted system cal bug, #1915.
This commit is contained in:
Brian Gerkey 2009-10-27 20:24:27 +00:00
parent 1e2286204c
commit e96f899a5c
5 changed files with 28 additions and 7 deletions

View File

@ -13,6 +13,7 @@
<rosdoc config="${prefix}/rosdoc.yaml" />
</export>
<depend package="genmsg_cpp"/>
<depend package="rospack"/>
<!-- for roslib.params -->
<rosdep name="python"/>

View File

@ -26,6 +26,7 @@
*/
#include "ros/package.h"
#include "rospack/rospack.h"
#include <cstdio>
#include <iostream>
@ -41,6 +42,7 @@ namespace package
std::string command(const std::string& _cmd)
{
/*
if (!getenv("ROS_ROOT"))
{
std::cerr << "ROS_ROOT is not set! Cannot execute " << _cmd << std::endl;
@ -61,8 +63,24 @@ std::string command(const std::string& _cmd)
pclose(pipe);
}
return output;
*/
rospack::ROSPack rp;
int ret;
try
{
ret = rp.run(_cmd);
if(ret == 0)
return rp.getOutput();
else
std::cerr << "ROSPack::run returned non-zero." << std::endl;
}
catch(std::runtime_error &e)
{
std::cerr << "[rospack] " << e.what() << std::endl;
}
return std::string("");
}
void command(const std::string& cmd, V_string& output)

View File

@ -22,3 +22,5 @@ rosbuild_add_pyunit(test/test_roslib_scriptutil.py)
rosbuild_add_pyunit(test/test_roslib_substitution_args.py)
rosbuild_add_pyunit(test/test_roslib_xmlrpc.py)
rosbuild_add_gtest(test/utest test/utest.cpp)

View File

@ -45,10 +45,10 @@ class RoslibRospackTest(unittest.TestCase):
rospack_depends_on, rospack_depends_on_1
val = rospackexec(['list'])
self.assertEquals(['genmsg_cpp'], rospack_depends('roslib'))
self.assertEquals(['genmsg_cpp'], rospack_depends_1('roslib'))
self.assertEquals(set(['genmsg_cpp', 'rospack']), set(rospack_depends('roslib')))
self.assertEquals(set(['genmsg_cpp', 'rospack']), set(rospack_depends_1('roslib')))
self.assertEquals(set(['roslib', 'roslang']), set(rospack_depends_1('rospy')))
self.assertEquals(set(['roslib', 'roslang', 'genmsg_cpp']), set(rospack_depends('rospy')))
self.assertEquals(set(['rospack', 'roslib', 'roslang', 'genmsg_cpp']), set(rospack_depends('rospy')))
val = rospack_depends_on('roslang')
self.assert_('rospy' in val, val)

View File

@ -45,10 +45,10 @@ class RoslibScriptutilTest(unittest.TestCase):
rospack_depends_on, rospack_depends_on_1
val = rospackexec(['list'])
self.assertEquals(['genmsg_cpp'], rospack_depends('roslib'))
self.assertEquals(['genmsg_cpp'], rospack_depends_1('roslib'))
self.assertEquals(set(['genmsg_cpp', 'rospack']), set(rospack_depends('roslib')))
self.assertEquals(set(['genmsg_cpp', 'rospack']), set(rospack_depends_1('roslib')))
self.assertEquals(set(['roslib', 'roslang']), set(rospack_depends_1('rospy')))
self.assertEquals(set(['roslib', 'roslang', 'genmsg_cpp']), set(rospack_depends('rospy')))
self.assertEquals(set(['rospack', 'roslib', 'roslang', 'genmsg_cpp']), set(rospack_depends('rospy')))
val = rospack_depends_on('roslang')
self.assert_('rospy' in val, val)