Merge branch 'master' of ssh://hummus/home/git/pub/git-tools
[git-tools-moved-to-github.git] / id-deb-build / id-pbuild.sh
index 8c76b9e..e72f052 100755 (executable)
@@ -7,12 +7,19 @@ Options:
         [--debian=distros]
         [--ubuntu=distros]
         [--centos=distros]
+        [--concurrency=level]
+        [--update=true|false]
         [--upload]
 EOF
     exit $1
 }
+D0=`dirname $0`
+ID_DEB_BUILD=`cd $D0; pwd`
+update=true
 do_help=false
 upload=false
+concurrency=8
+ARCHS="i386 amd64"
 while test $# -gt 0; do
     case "$1" in
         -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
@@ -28,9 +35,15 @@ while test $# -gt 0; do
         --centos=*)
             CENTOS_DIST_A=$optarg
             ;;
+        --concurrency=*)
+            concurrency=$optarg
+            ;;
         --upload)
             upload=true
             ;;
+        --update=*)
+            update=$optarg
+            ;;
         -*)
             do_help=yes
             ;;
@@ -58,7 +71,6 @@ if test "$DEBIAN_DIST_A" -o "$UBUNTU_DIST_A" -o "$CENTOS_DIST_A"; then
     UBUNTU_DIST=$UBUNTU_DIST_A
     CENTOS_DIST=$CENTOS_DIST_A
 fi
-ID_DEB_BUILD=~/proj/git-tools/id-deb-build
 if test "$DEBIAN_DIST" -o "$UBUNTU_DIST"; then
     debian=true
     DNAME=`awk '/Source:/ {print $2}' debian/control`
@@ -79,6 +91,7 @@ if test "$CENTOS_DIST"; then
     fi
     PRODUCT=$RNAME
     if test ! -d ~/rpmbuild; then
+       echo "Creating ~/rpmbuild"
         mkdir -p ~/pmbuild/BUILD
         mkdir -p ~/rpmbuild/RPMS/noarch
         mkdir -p ~/rpmbuild/RPMS/x86_64
@@ -86,6 +99,12 @@ if test "$CENTOS_DIST"; then
         mkdir -p ~/rpmbuild/SPECS
         mkdir -p ~/rpmbuild/SRPMS
     fi
+    if test ! -f ~/.rpmmacros; then
+       echo "Creating ~/.rpmmacros"
+       echo "%_topdir $HOME/rpmbuild" >~/.rpmmacros
+       echo "%_source_filedigest_algorithm   0" >>~/.rpmmacros
+       echo "%_binary_filedigest_algorithm   0" >>~/.rpmmacros
+    fi
 else
     centos=false
 fi
@@ -95,7 +114,7 @@ if $upload; then
     UPLOAD_URI=${UPLOAD_HOST}:${UPLOAD_PATH}/${PRODUCT}
     echo "Uploading to ${UPLOAD_URI}"
     if $centos; then
-       pkg_names=`rpm -q --specfile ${PRODUCT}.spec --queryformat "%{NAME}-%{VERSION}-%{RELEASE}\n"`
+       pkg_names=`sudo lxc-attach -n mockbuild -- rpm -q --specfile ~/rpmbuild/SPECS/${PRODUCT}.spec --queryformat "%{NAME}-%{VERSION}-%{RELEASE}\n"`
        for dist in ${CENTOS_DIST}; do
            case $dist in
                centos5)
@@ -212,33 +231,30 @@ if $debian; then
     if grep "Architecture: all" $DSC >/dev/null; then
        USE_ARCHS=i386
     else
-       USE_ARCHS="i386 amd64"
+       USE_ARCHS=$ARCHS
     fi
+    rm -f ~/.pbuilderrc
+    i=0
+    cat ${ID_DEB_BUILD}/pbuilderrc > ~/.pbuilderrc
     for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
        for arch in ${USE_ARCHS}; do
-           echo -n "dist=$dist arch=$arch"
-           rm -f ~/.pbuilderrc
-           echo "DIST=$dist" > ~/.pbuilderrc
-           echo "ARCH=$arch" >> ~/.pbuilderrc
-           cat ${ID_DEB_BUILD}/pbuilderrc >> ~/.pbuilderrc
-           echo -n " update"
-           if ! sudo lxc-attach -n pbuilder -- pbuilder --update --override-config >update-${dist}-${arch}.log 2>&1; then
-               echo -n " create"
-               if ! sudo lxc-attach -n pbuilder -- pbuilder --create >create-${dist}-${arch}.log 2>&1; then
-                   echo " failed. Inspect deb-src/create-${dist}-${arch}.log"
-                   exit 1
-               fi
-               echo -n " update"
-               if ! sudo lxc-attach -n pbuilder -- pbuilder --update --override-config >update-${dist}-${arch}.log 2>&1; then
-                   echo " failed. Inspect deb-src/update-${dist}-${arch}.log"
+           sudo ${ID_DEB_BUILD}/id-pbuild-root.sh --update=$update --dsc=$DSC --arch=$arch --dist=$dist &
+           i=`expr $i + 1`
+           if test $i -ge $concurrency; then
+               i=0
+               wait
+               if ! test -f ${dist}-${arch}/*.dsc; then
+                   echo "FAILED: No .dsc file for ${dist}-${arch}"
                    exit 1
-               fi
+               fi
            fi
-           echo -n " build"
-           if sudo lxc-attach -n pbuilder -- pbuilder --build $DSC >build-${dist}-${arch}.log 2>&1; then
-               echo " done"
-           else
-               echo " failed. Inspect deb-src/build-${dist}-${arch}.log"
+       done
+    done
+    wait
+    for dist in ${DEBIAN_DIST} ${UBUNTU_DIST}; do
+       for arch in ${USE_ARCHS}; do
+           if ! test -f ${dist}-${arch}/*.dsc; then
+               echo "FAILED: No .dsc file for ${dist}-${arch}"
                exit 1
            fi
        done