The base class for package/stack ("stackage") crawlers. Users of the library should use the functionality provided here through one of the derived classes, Rosstack or Rospack. More...
#include <rospack.h>
Public Member Functions | |
virtual | ~Rosstackage () |
Destructor. | |
virtual const char * | usage () |
Usage string, to be overridden by derived classes. | |
void | crawl (std::vector< std::string > search_path, bool force) |
Crawl the filesystem, accumulating a database of stackages. May read results from a cache file instead of crawling. This method should be called before any making any queries (find, list, etc.). | |
bool | inStackage (std::string &name) |
Is the current working directory a stackage? | |
void | setQuiet (bool quiet) |
Control warning and error console output. | |
const std::string & | getName () |
Get the name of the tool that's in use (e.g., "rospack" or "rosstack"). | |
bool | getSearchPathFromEnv (std::vector< std::string > &sp) |
Helper method to construct a directory search path by looking at relevant environment variables. The value of ROS_ROOT goes first, followed by each element of a colon-separated ROS_PACKAGE_PATH. | |
bool | find (const std::string &name, std::string &path) |
Look for a stackage. | |
bool | contents (const std::string &name, std::set< std::string > &packages) |
Compute the packages that are contained in a stack. | |
bool | contains (const std::string &name, std::string &stack, std::string &path) |
Find the stack that contains a package. | |
void | list (std::set< std::pair< std::string, std::string > > &list) |
List names and paths of all stackages. | |
void | listDuplicates (std::vector< std::string > &dups) |
Identify duplicate stackages. Forces crawl. | |
bool | deps (const std::string &name, bool direct, std::vector< std::string > &deps) |
Compute dependencies of a stackage (i.e., stackages that this stackages depends on). | |
bool | depsOn (const std::string &name, bool direct, std::vector< std::string > &deps) |
Compute reverse dependencies of a stackage (i.e., stackages that depend on this stackage). Forces crawl. | |
bool | depsManifests (const std::string &name, bool direct, std::vector< std::string > &manifests) |
List the manifests of a stackage's dependencies. Used by rosbuild. | |
bool | depsMsgSrv (const std::string &name, bool direct, std::vector< std::string > &gens) |
List the marker files in a packages's dependencies that indicate that those packages contain auto-generated message and/or service code. Used by rosbuild. | |
bool | depsIndent (const std::string &name, bool direct, std::vector< std::string > &deps) |
Generate indented list of a stackage's dependencies, including duplicates. Intended for visual debugging of dependency structures. | |
bool | depsWhy (const std::string &from, const std::string &to, std::string &output) |
Compute all dependency chains from one stackage to another. Intended for visual debugging of dependency structures. | |
bool | rosdeps (const std::string &name, bool direct, std::set< std::string > &rosdeps) |
Compute rosdep entries that are declared in manifest of a package and its dependencies. Used by rosmake. | |
bool | vcs (const std::string &name, bool direct, std::vector< std::string > &vcs) |
Compute vcs entries that are declared in manifest of a package and its dependencies. Was used by Hudson build scripts; might not be needed. | |
bool | exports (const std::string &name, const std::string &lang, const std::string &attrib, bool deps_only, std::vector< std::string > &flags) |
Compute exports declared in a package and its dependencies. Used by rosbuild. | |
bool | plugins (const std::string &name, const std::string &attrib, const std::string &top, std::vector< std::string > &flags) |
Compute exported plugins declared in packages that depend on a package. Forces crawl. Used by rosbuild and roslib. | |
bool | profile (const std::vector< std::string > &search_path, bool zombie_only, int length, std::vector< std::string > &dirs) |
Report on time taken to crawl for stackages. Intended for use in debugging misconfigured stackage trees. Forces crawl. | |
void | logWarn (const std::string &msg, bool append_errno=false) |
Log a warning (usually goes to stderr). | |
void | logError (const std::string &msg, bool append_errno=false) |
Log a error (usually goes to stderr). | |
Protected Member Functions | |
Rosstackage (const std::string &manifest_name, const std::string &cache_name, const std::string &name, const std::string &tag) | |
Constructor, only used by derived classes. |
The base class for package/stack ("stackage") crawlers. Users of the library should use the functionality provided here through one of the derived classes, Rosstack or Rospack.
rospack::Rosstackage::Rosstackage | ( | const std::string & | manifest_name, | |
const std::string & | cache_name, | |||
const std::string & | name, | |||
const std::string & | tag | |||
) | [protected] |
Constructor, only used by derived classes.
manifest_name | What the manifest is called (e.g., "manifest.xml or stack.xml") | |
cache_name | What the cache is called (e.g., "rospack_cache" or "rosstack_cache") | |
name | Name of the tool we're building (e.g., "rospack" or "rosstack") | |
tag | Name of the attribute we look for in a "depend" tag in a manifest (e.g., "package" or "stack") |
bool rospack::Rosstackage::contains | ( | const std::string & | name, | |
std::string & | stack, | |||
std::string & | path | |||
) |
Find the stack that contains a package.
name | The package to work on. | |
stack | If the containing stack is found, its name is written here. | |
path | If the containing stack is found, its absolute path is written here. |
bool rospack::Rosstackage::contents | ( | const std::string & | name, | |
std::set< std::string > & | packages | |||
) |
Compute the packages that are contained in a stack.
name | The stack to work on. | |
packages | The stack's constituent packages are written here. |
void rospack::Rosstackage::crawl | ( | std::vector< std::string > | search_path, | |
bool | force | |||
) |
Crawl the filesystem, accumulating a database of stackages. May read results from a cache file instead of crawling. This method should be called before any making any queries (find, list, etc.).
search_path | List of directories to crawl, in precenence order. Directories should be absolute paths. It's passed by value to allow callers (e.g., find()) to safely pass in search_paths_. | |
force | If true, then crawl even if the cache looks valid |
bool rospack::Rosstackage::deps | ( | const std::string & | name, | |
bool | direct, | |||
std::vector< std::string > & | deps | |||
) |
Compute dependencies of a stackage (i.e., stackages that this stackages depends on).
name | The stackage to work on. | |
direct | If true, then compute only direct dependencies. If false, then compute full (including indirect) dependencies. | |
deps | If dependencies are computed, then they're written here. |
bool rospack::Rosstackage::depsIndent | ( | const std::string & | name, | |
bool | direct, | |||
std::vector< std::string > & | deps | |||
) |
Generate indented list of a stackage's dependencies, including duplicates. Intended for visual debugging of dependency structures.
name | The stackage to work on. | |
direct | If true, then compute only direct dependencies. If false, then compute full (including indirect) dependencies. | |
deps | List of the stackage's dependencies, with leading spaces to indicate depth, is written here. Print this list to console, with newlines separating each element. Example output:
roscpp_traits cpp_common cpp_common rostime cpp_common |
bool rospack::Rosstackage::depsManifests | ( | const std::string & | name, | |
bool | direct, | |||
std::vector< std::string > & | manifests | |||
) |
List the manifests of a stackage's dependencies. Used by rosbuild.
name | The stackage to work on. | |
direct | If true, then compute only direct dependencies. If false, then compute full (including indirect) dependencies. | |
manifests | The list of absolute paths to manifests of stackages that the given stackage depends on is written here. |
bool rospack::Rosstackage::depsMsgSrv | ( | const std::string & | name, | |
bool | direct, | |||
std::vector< std::string > & | gens | |||
) |
List the marker files in a packages's dependencies that indicate that those packages contain auto-generated message and/or service code. Used by rosbuild.
name | The package to work on. | |
direct | If true, then compute only direct dependencies. If false, then compute full (including indirect) dependencies. | |
gens | The list of absolute paths to marker files (e.g., "/opt/ros/electric/stacks/ros_comm/messages/std_msgs/msg_gen/generated") is written here. |
bool rospack::Rosstackage::depsOn | ( | const std::string & | name, | |
bool | direct, | |||
std::vector< std::string > & | deps | |||
) |
Compute reverse dependencies of a stackage (i.e., stackages that depend on this stackage). Forces crawl.
name | The stackage to work on. | |
direct | If true, then compute only direct dependencies. If false, then compute full (including indirect) dependencies. | |
deps | If dependencies are computed, then they're written here. |
bool rospack::Rosstackage::depsWhy | ( | const std::string & | from, | |
const std::string & | to, | |||
std::string & | output | |||
) |
Compute all dependency chains from one stackage to another. Intended for visual debugging of dependency structures.
from | The stackage that depends on. | |
to | The stackage that is depended on. | |
output | A list of dependency chains. Print this list to console, with newlines separating each element. Example output:
Dependency chains from roscpp to roslib: * roscpp -> roslib * roscpp -> std_msgs -> roslib * roscpp -> rosgraph_msgs -> std_msgs -> roslib |
bool rospack::Rosstackage::exports | ( | const std::string & | name, | |
const std::string & | lang, | |||
const std::string & | attrib, | |||
bool | deps_only, | |||
std::vector< std::string > & | flags | |||
) |
Compute exports declared in a package and its dependencies. Used by rosbuild.
name | The package to work on. | |
lang | The value of the 'lang' attribute to search for. | |
attrib | The value of the 'attrib' attribute to search for. | |
deps_only | If true, then only return information from the pacakge's dependencies; if false, then also include the package's own export information. | |
flags | The accumulated flags are written here. |
bool rospack::Rosstackage::find | ( | const std::string & | name, | |
std::string & | path | |||
) |
Look for a stackage.
name | The stackage to look for. | |
path | If found, the absolute path to the stackage is written here. |
const std::string& rospack::Rosstackage::getName | ( | ) | [inline] |
Get the name of the tool that's in use (e.g., "rospack" or "rosstack").
bool rospack::Rosstackage::getSearchPathFromEnv | ( | std::vector< std::string > & | sp | ) |
Helper method to construct a directory search path by looking at relevant environment variables. The value of ROS_ROOT goes first, followed by each element of a colon-separated ROS_PACKAGE_PATH.
sp | The computed search path is written here. |
bool rospack::Rosstackage::inStackage | ( | std::string & | name | ) |
Is the current working directory a stackage?
name | If in a stackage, then the stackage's name is written here. |
void rospack::Rosstackage::list | ( | std::set< std::pair< std::string, std::string > > & | list | ) |
List names and paths of all stackages.
list | Pairs of (name,path) are written here. |
void rospack::Rosstackage::listDuplicates | ( | std::vector< std::string > & | dups | ) |
Identify duplicate stackages. Forces crawl.
dups | Names of stackages that are found more than once while crawling are written here. |
void rospack::Rosstackage::logError | ( | const std::string & | msg, | |
bool | append_errno = false | |||
) |
Log a error (usually goes to stderr).
msg | The error. | |
append_errno | If true, then append a colon, a space, and the return from 'sterror(errno)'. |
void rospack::Rosstackage::logWarn | ( | const std::string & | msg, | |
bool | append_errno = false | |||
) |
Log a warning (usually goes to stderr).
msg | The warning. | |
append_errno | If true, then append a colon, a space, and the return from 'sterror(errno)'. |
bool rospack::Rosstackage::plugins | ( | const std::string & | name, | |
const std::string & | attrib, | |||
const std::string & | top, | |||
std::vector< std::string > & | flags | |||
) |
Compute exported plugins declared in packages that depend on a package. Forces crawl. Used by rosbuild and roslib.
name | The package to work on. | |
attrib | The value of the 'attrib' attribute to search for. | |
top | If non-empty, then limit the reverse dependency search to packages that 'top' depends on. Otherwise, examine all packages that depend on 'name'. | |
flags | The accumulated flags are written here. |
bool rospack::Rosstackage::profile | ( | const std::vector< std::string > & | search_path, | |
bool | zombie_only, | |||
int | length, | |||
std::vector< std::string > & | dirs | |||
) |
Report on time taken to crawl for stackages. Intended for use in debugging misconfigured stackage trees. Forces crawl.
search_path | Directories to search; passed to crawl(). | |
zombie_only | If false, then produce formatted output, with timing information. Example output:
Full tree crawl took 0.014954 seconds. Directories marked with (*) contain no manifest. You may want to delete these directories. To get just of list of directories without manifests, re-run the profile with --zombie-only ------------------------------------------------------------- 0.013423 /opt/ros/electric/stacks 0.002989 /opt/ros/electric/stacks/ros_comm If true, then produce a list of absolute paths that contain no stackages ("zombies"); these directories can likely be safely deleted. Example output: /opt/ros/electric/stacks/pr2_controllers/trajectory_msgs /opt/ros/electric/stacks/pr2_controllers/trajectory_msgs/msg | |
length | Limit on how many directories to include in report (ordered in decreasing order of time taken to crawl). | |
dirs | Profile output. Print this list to console, with newlines separating each element. |
bool rospack::Rosstackage::rosdeps | ( | const std::string & | name, | |
bool | direct, | |||
std::set< std::string > & | rosdeps | |||
) |
Compute rosdep entries that are declared in manifest of a package and its dependencies. Used by rosmake.
name | The package to work on. | |
direct | If true, then compute only direct dependencies. If false, then compute full (including indirect) dependencies. | |
rosdeps | List of rosdep entries found in the package and its dependencies is written here. |
void rospack::Rosstackage::setQuiet | ( | bool | quiet | ) |
Control warning and error console output.
quiet | If true, then don't output any warnings or errors to console. If false, then output warnings and errors to stderr (default behavior). |
virtual const char* rospack::Rosstackage::usage | ( | ) | [inline, virtual] |
Usage string, to be overridden by derived classes.
Reimplemented in rospack::Rospack, and rospack::Rosstack.
bool rospack::Rosstackage::vcs | ( | const std::string & | name, | |
bool | direct, | |||
std::vector< std::string > & | vcs | |||
) |
Compute vcs entries that are declared in manifest of a package and its dependencies. Was used by Hudson build scripts; might not be needed.
name | The package to work on. | |
direct | If true, then compute only direct dependencies. If false, then compute full (including indirect) dependencies. | |
vcs | List of vcs entries found in the package and its dependencies is written here. |