From a45f88d01ccf5cb44c805da793a3070d6629724c Mon Sep 17 00:00:00 2001
From: Chizi123 <joelgrun@gmail.com>
Date: Sun, 14 Jul 2019 09:10:59 +0000
Subject: [PATCH] Added parallel compression and limited number of old packages

---
 README.org |    2 ++
 build.sh   |   50 +++++++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 51 insertions(+), 1 deletions(-)

diff --git a/README.org b/README.org
index 8d13769..2157bd3 100755
--- a/README.org
+++ b/README.org
@@ -10,6 +10,8 @@
 Be sure to sign in to git in the chroot and set ~git config --global credential.helper store~, with an appropriate remote repository.
 
 You may also want to set ~MAKEFLAGS="-j$(nproc)"~ within the chroot to enable parallel compilation.
+For xz compression, add the ~--threads=0~ option to COMPRESSXZ such that it reads ~COMPRESSXZ=(xz -c -z - --threads=0)~.
+ccache may be useful to decrease the times of git packages, due to the little changes.
 
 Script coming soon.
 * Usage
diff --git a/build.sh b/build.sh
index 6dfcb3c..fee8d1f 100755
--- a/build.sh
+++ b/build.sh
@@ -1,5 +1,8 @@
 #!/bin/bash
 
+#Number of old packages to store, should be at least 1
+NUM_BACK=5
+
 function newest_matching_file
 {
     # Use ${1-} instead of $1 in case 'nounset' is set
@@ -34,6 +37,40 @@
     return 0
 }
 
+function oldest_matching_file
+{
+    # Use ${1-} instead of $1 in case 'nounset' is set
+    local -r glob_pattern=${1-}
+
+    if (( $# != 1 )) ; then
+        echo 'usage: oldest_matching_file GLOB_PATTERN' >&2
+        return 1
+    fi
+
+    # To avoid printing garbage if no files match the pattern, set
+    # 'nullglob' if necessary
+    local -i need_to_unset_nullglob=0
+    if [[ ":$BASHOPTS:" != *:nullglob:* ]] ; then
+        shopt -s nullglob
+        need_to_unset_nullglob=1
+    fi
+
+    oldest_file=
+    for file in $glob_pattern ; do
+        [[ -z $oldest_file || $file -ot $oldest_file ]] \
+            && oldest_file=$file
+    done
+
+    # To avoid unexpected behaviour elsewhere, unset nullglob if it was
+    # set by this function
+    (( need_to_unset_nullglob )) && shopt -u nullglob
+
+    # Use printf instead of echo in case the file name begins with '-'
+    [[ -n $oldest_file ]] && printf '%s\n' "$oldest_file"
+
+    return 0
+}
+
 #update system
 sudo pacman -Syu --noconfirm
 
@@ -42,6 +79,7 @@
 
 #Remove old packages
 git rm -r x86_64/*
+rm -r x86_64
 mkdir x86_64
 
 #dependencies
@@ -57,6 +95,11 @@
 	git pull
 	makepkg -si --noconfirm
 	latest=$(newest_matching_file '*.pkg.tar.xz')
+	while [ $NUM_BACK \< $(find . -name "*.pkg.tar.xz" | wc -l) ]
+	do
+		oldest=$(oldest_matching_file '*.pkg.tar.xz')
+		rm $oldest
+	done
 	cd ..
 	ln $d/$latest ../x86_64/$latest
 	repo-add ../Chizi123.db.tar.xz ../x86_64/$latest
@@ -67,7 +110,7 @@
 for d in `find . -maxdepth 1 -not -path '*/\.*' -type d`
 do
 	#Only do package directories
-	if [ "$d" = "./x86_64" ] || [ "$d" = "." ] || [ "$d" = "dependencies" ]; then
+	if [ "$d" = "./x86_64" ] || [ "$d" = "." ] || [ "$d" = "./dependencies" ]; then
 		continue
 	fi
 	cd $d
@@ -75,6 +118,11 @@
 	git pull
 	makepkg -s --noconfirm
 	latest=$(newest_matching_file '*.pkg.tar.xz')
+	while [ $NUM_BACK \< $(find . -name "*.pkg.tar.xz" | wc -l) ]
+	do
+		oldest=$(oldest_matching_file '*.pkg.tar.xz')
+		rm $oldest
+	done
 	cd ..
 	ln $d/$latest x86_64/$latest
 	repo-add ./Chizi123.db.tar.xz x86_64/$latest

--
Gitblit v1.9.3