summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorBenjamin Chrétien2015-08-13 18:33:36 +0200
committerBenjamin Chrétien2015-08-13 19:09:56 +0200
commitdf2fd86b44091aff304f6c95da37c347eb256334 (patch)
treee4e4880314cbf5de5147cfef5612e8deca82d915
parent84384055aee2007fbb2c4e91642622bdf451ef58 (diff)
downloadaur-df2fd86b44091aff304f6c95da37c347eb256334.tar.gz
Use submodules for new packages
-rw-r--r--PKGBUILD6
-rwxr-xr-ximport_catkin_packages.py61
2 files changed, 57 insertions, 10 deletions
diff --git a/PKGBUILD b/PKGBUILD
index 398669ae69d2..d0614708726e 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -5,9 +5,9 @@ pkgdesc='Utilities for building arch packages for ROS stacks.'
url="https://github.com/bchretien/arch-ros-stacks"
pkgname='ros-build-tools'
-pkgver='0.1.0'
+pkgver='0.1.1'
arch=('i686' 'x86_64')
-pkgrel=5
+pkgrel=1
license=('BSD')
makedepends=()
depends=()
@@ -48,5 +48,5 @@ md5sums=('ed01573e0ecc0f7ca451d7e2849cc5ee'
'd257f7f20384e894b0431ee61068aa96'
'563c9d1320a3a997db25d3087303dcfb'
'8d6d7eb89a12c449497b209f1a06655b'
- '6686b653fd628d8cd31bd46ed7a33053'
+ '2f284263bd513b4fa460ed305d0425e2'
'07f5253eb3f8cb5295c32026a20ab6c0')
diff --git a/import_catkin_packages.py b/import_catkin_packages.py
index 93e0165bd91b..1e43fc5c42c5 100755
--- a/import_catkin_packages.py
+++ b/import_catkin_packages.py
@@ -1,5 +1,6 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
+# vim:set et sw=4 ts=2 shiftwidth=2:
from __future__ import print_function
@@ -14,6 +15,7 @@ import re
from collections import OrderedDict
from termcolor import colored, cprint
import pickle
+import subprocess
# Directory containing some data files
updates_packages_dir = "/tmp/import_catkin_packages"
@@ -135,9 +137,9 @@ class PackageBase(object):
Returns (build_dependencies, run_dependencies)
"""
known_packages = self.distro.package_names(expand_metapackages=True)
- build_dep = list(set([self._rosify_package_name('ros-%s-' % self.distro.name + dependency)
+ build_dep = list(set([self._get_full_package_name(dependency)
for dependency in self.build_dependencies if dependency in known_packages]))
- run_dep = list(set([self._rosify_package_name('ros-%s-' % self.distro.name + dependency)
+ run_dep = list(set([self._get_full_package_name(dependency)
for dependency in self.run_dependencies if dependency in known_packages]))
return build_dep, run_dep
@@ -156,6 +158,9 @@ class PackageBase(object):
def _rosify_package_name(self, name):
return name.replace('_', '-')
+ def _get_full_package_name(self, name):
+ return "ros-%s-%s" % (self.distro.name, name.replace('_', '-'))
+
def _ensure_python2_dependency(self, dependency):
# python ---> python2
# python-foo ---> python2-foo
@@ -543,6 +548,51 @@ def github_raw_url(repo_url, path, commitish):
}
+def create_submodule(url_ro, url_rw, full_dir):
+ parent_dir = os.path.dirname(full_dir)
+ relative_dir = os.path.basename(full_dir)
+ # First call may fail if the remote AUR package does not exist yet
+ fail = subprocess.call(['git', '-C', parent_dir, 'submodule', 'add', '--force',
+ url_ro, relative_dir], stderr=subprocess.PIPE,
+ stdout=subprocess.PIPE)
+ if fail:
+ subprocess.check_call(['git', '-C', parent_dir, 'submodule', 'add', '--force',
+ url_ro, relative_dir], stdout=subprocess.PIPE)
+ subprocess.check_call(['git', '-C', full_dir, 'remote', 'set-url', '--push',
+ 'origin', url_rw], stderr=subprocess.PIPE,
+ stdout=subprocess.PIPE)
+
+
+def create_clone(url_ro, url_rw, full_dir):
+ subprocess.check_call(['git', 'clone', url_ro, full_dir],
+ stderr=subprocess.PIPE, stdout=subprocess.PIPE)
+ subprocess.check_call(['git', '-C', full_dir, 'remote', 'set-url', '--push',
+ 'origin', url_rw], stderr=subprocess.PIPE,
+ stdout=subprocess.PIPE)
+
+
+def create_package_directory(directory, package):
+ """
+ Create a directory or an AUR submodule based on the context.
+ """
+ full_dir = os.path.join(directory, package.name)
+
+ full_package_name = package._get_full_package_name(package.name)
+ url_ro = "https://aur.archlinux.org/%s.git" % (full_package_name)
+ url_rw = "ssh+git://aur@aur.archlinux.org/%s.git" % (full_package_name)
+
+ is_git_dir = subprocess.call(['git', '-C', directory, 'rev-parse', '--is-inside-work-tree'],
+ stdout=subprocess.PIPE, stderr=subprocess.PIPE) == 0
+
+ if not os.path.exists(full_dir):
+ if not is_git_dir:
+ create_clone(url_ro, url_rw, full_dir)
+ else:
+ create_submodule(url_ro, url_rw, full_dir)
+
+ return full_dir
+
+
def generate_pkgbuild(distro, package, directory, force=False,
no_overwrite=False, recursive=False, update=False,
exclude_dependencies=[], rosdep_urls=[],
@@ -580,11 +630,8 @@ def generate_pkgbuild(distro, package, directory, force=False,
rosdep_urls=rosdep_urls, generated=generated,
written=written)
- output_directory = os.path.join(directory, package.name)
-
- # If the directory does not exist, create it
- if not os.path.exists(output_directory):
- os.mkdir(output_directory)
+ # If the directory/submodule does not exist, create it
+ output_directory = create_package_directory(directory, package)
# If PKGBUILD already exists
if os.path.exists(os.path.join(output_directory, 'PKGBUILD')):