summarylogtreecommitdiffstats
path: root/import_catkin_packages.py
diff options
context:
space:
mode:
Diffstat (limited to 'import_catkin_packages.py')
-rwxr-xr-ximport_catkin_packages.py29
1 files changed, 26 insertions, 3 deletions
diff --git a/import_catkin_packages.py b/import_catkin_packages.py
index fc3678ab3884..63de68c9a66d 100755
--- a/import_catkin_packages.py
+++ b/import_catkin_packages.py
@@ -12,6 +12,11 @@ import yaml
import re
from collections import OrderedDict
from termcolor import colored, cprint
+import pickle
+
+updates_packages_dir = "/tmp/import_catkin_packages"
+updated_packages_file = os.path.join(updates_packages_dir,
+ "updated_packages.dump")
class PackageBase(object):
@@ -455,10 +460,10 @@ def generate_pkgbuild(distro, package, directory, force=False,
no_overwrite=False, recursive=False, update=False,
exclude_dependencies=[], rosdep_urls=[], generated=None):
if generated is None:
- generated = []
+ generated = set()
elif package.name in generated:
return
- generated.append(package.name)
+ generated.add(package.name)
if package.packages:
for child_package in package.packages:
generate_pkgbuild(distro, child_package, directory,
@@ -539,13 +544,31 @@ def main():
list_packages(distro)
return
elif args:
+ generated = set()
+ if os.path.isfile(updated_packages_file):
+ # Load dump of already updated packages to speedup updates
+ print('Loading set of previously updated packages: %s'
+ % (colored(updated_packages_file, 'white',
+ attrs=['bold'])))
+ updated_packages = open(updated_packages_file, "r")
+ generated = pickle.load(updated_packages)
+ updated_packages.close()
+ for package in generated:
+ print('Ignoring %s'
+ % (colored(package, 'yellow', attrs=['bold'])))
+
for package in args:
generate_pkgbuild(distro, distro.package(package),
os.path.abspath(options.output_directory),
exclude_dependencies=options.exclude_dependencies.split(','),
force=options.force, no_overwrite=options.no_overwrite,
update=options.update, recursive=options.recursive,
- rosdep_urls=options.rosdep_urls)
+ rosdep_urls=options.rosdep_urls, generated=generated)
+ if not os.path.exists(updates_packages_dir):
+ os.makedirs(updates_packages_dir)
+ updated_packages = open(updated_packages_file, "w+")
+ pickle.dump(generated, updated_packages)
+ updated_packages.close()
else:
parser.error('No package specified.')