summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Chrétien2014-02-23 17:59:49 +0100
committerBenjamin Chrétien2015-06-20 02:25:12 +0900
commit00c3d7071bcbaa6825a5ce3e36920286246cf590 (patch)
tree066d660f5b034f4c648a39c82e2fa2f9b7cb20e0
parent4c886f4e87aecc655b57fb9fd0bbf140ab2cfe9b (diff)
downloadaur-00c3d7071bcbaa6825a5ce3e36920286246cf590.tar.gz
Add update option to import_catkin_packages.py
-rwxr-xr-ximport_catkin_packages.py45
1 files changed, 35 insertions, 10 deletions
diff --git a/import_catkin_packages.py b/import_catkin_packages.py
index 79e44aac7fa4..be6d892a3c33 100755
--- a/import_catkin_packages.py
+++ b/import_catkin_packages.py
@@ -130,10 +130,25 @@ class PackageBase(object):
dependency_map[package_name] = distrib["arch"]
return dependency_map
-
def generate(self, exclude_dependencies=[]):
raise Exception('`generate` not implemented.')
+ def is_same_version(self, pkgbuild_file):
+ """
+ Checks whether a currently installed PKGBUILD contains the same version.
+ """
+ f = open(pkgbuild_file, "r")
+ content = f.read()
+ pattern_pkgver = re.compile(r"pkgver='([0-9\.]*)'")
+ pattern_pkgver_patch = re.compile(r"_pkgver_patch=([0-9]*)")
+ match_pkgver = re.search(pattern_pkgver, content)
+ match_pkgver_patch = re.search(pattern_pkgver_patch, content)
+ if match_pkgver and match_pkgver_patch:
+ return (match_pkgver.group(1) == self.version
+ and match_pkgver_patch.group(1) == self.version_patch)
+ else:
+ return False
+
class Package(PackageBase):
BUILD_TEMPLATE = """
@@ -407,8 +422,8 @@ def github_raw_url(repo_url, path, commitish):
def generate_pkgbuild(distro, package, directory, force=False,
- no_overwrite=False, recursive=False, exclude_dependencies=[],
- rosdep_urls=[], generated=None):
+ no_overwrite=False, recursive=False, update=False,
+ exclude_dependencies=[], rosdep_urls=[], generated=None):
if generated is None:
generated = []
elif package.name in generated:
@@ -419,13 +434,13 @@ def generate_pkgbuild(distro, package, directory, force=False,
generate_pkgbuild(distro, child_package, directory,
force=force, exclude_dependencies=exclude_dependencies,
no_overwrite=no_overwrite, recursive=recursive,
- rosdep_urls=rosdep_urls, generated=generated)
+ update=update, rosdep_urls=rosdep_urls, generated=generated)
if recursive:
for dependency in package.run_dependencies + package.build_dependencies:
if distro.is_package(dependency):
generate_pkgbuild(distro, distro.package(dependency), directory,
force=force, no_overwrite=no_overwrite, recursive=recursive,
- exclude_dependencies=exclude_dependencies,
+ exclude_dependencies=exclude_dependencies, update=update,
rosdep_urls=rosdep_urls, generated=generated)
output_directory = os.path.join(directory, package.name)
if not os.path.exists(output_directory):
@@ -437,8 +452,15 @@ def generate_pkgbuild(distro, package, directory, force=False,
"Directory '%s' already contains a PKGBUILD file. Overwrite?" % (
output_directory)) == "no":
return
- print('Generating PKGBUILD for package %s' % package.name)
- with open(os.path.join(output_directory, 'PKGBUILD'), 'w') as pkgbuild:
+ pkgbuild_file = os.path.join(output_directory, 'PKGBUILD')
+ if update:
+ if package.is_same_version(pkgbuild_file):
+ print('PKGBUILD for package %s already up-to-date (%s-%s)'
+ % (package.name, package.version, package.version_patch))
+ return
+ print('Generating PKGBUILD for package %s (%s-%s)'
+ % (package.name, package.version, package.version_patch))
+ with open(pkgbuild_file, 'w') as pkgbuild:
pkgbuild.write(package.generate(exclude_dependencies, rosdep_urls))
@@ -467,8 +489,10 @@ def main():
help='Always overwrite exiting PKGBUILD files.')
parser.add_option('-n', '--no-overwrite', dest='no_overwrite', action='store_true', default=False,
help='Do not overwrite PKGBUILD files.')
- parser.add_option('--recursive', dest='recursive', action='store_true', default=False,
+ parser.add_option('-r','--recursive', dest='recursive', action='store_true', default=False,
help='Recursively import dependencies')
+ parser.add_option('-u','--update', dest='update', action='store_true', default=False,
+ help='Update PKGBUILD if a newer version is found.')
options, args = parser.parse_args()
if options.distro == "fuerte" and options.distro_url == default_distro_url:
@@ -486,9 +510,10 @@ def main():
os.path.abspath(options.output_directory),
exclude_dependencies=options.exclude_dependencies.split(','),
force=options.force, no_overwrite=options.no_overwrite,
- recursive=options.recursive, rosdep_urls=options.rosdep_urls)
+ update=options.update, recursive=options.recursive,
+ rosdep_urls=options.rosdep_urls)
else:
- parser.error('No packages specified.')
+ parser.error('No package specified.')
if __name__ == '__main__':