[pacman-dev] [PATCH v7 03/12] bacman: parallel packaging

Gordian Edenhofer gordian.edenhofer at gmail.com
Sat Sep 3 16:53:00 UTC 2016


Signed-off-by: Gordian Edenhofer <gordian.edenhofer at gmail.com>
---
 contrib/bacman.sh.in | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/contrib/bacman.sh.in b/contrib/bacman.sh.in
index e7a7f57..0c71541 100644
--- a/contrib/bacman.sh.in
+++ b/contrib/bacman.sh.in
@@ -354,8 +354,29 @@ fakebuild() {
 	rm -rf "$work_dir"
 }
 
+# Run fakebuild in parralel with at maximum $MAX_JOBS jobs
+# By default only run one job
+MAX_JOBS=${MAX_JOBS:-1}
+# TODO: Use wait -n instead of this hack as soon as it is ok
+# to bump the version of the bash dependency
+parallelize() {
+	while [[ $# -gt 0 ]]; do
+		job_count=($(jobs -p))
+		if [[ ${#job_count[@]} -lt $MAX_JOBS ]] ; then
+			fakebuild "$1" &
+			shift
+		fi
+		sleep 0.1
+	done
+	wait
+}
 
-for PKG in $@; do fakebuild $PKG; done
+# Initiate assembly function
+if [[ $MAX_JOBS -gt "1" ]]; then
+	parallelize "$@"
+else
+	for PKG in $@; do fakebuild $PKG; done
+fi
 msg "Done."
 
 exit 0
-- 
2.9.3


More information about the pacman-dev mailing list