From 956b40459714687f64d0433e96db7fa5c5f9aa53 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Thu, 5 Mar 2009 08:39:25 +0000
Subject: buildrepo: improve index regeneration handling

This will hopefully fix the checksum errors
---
 buildrepo | 59 ++++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 34 insertions(+), 25 deletions(-)

(limited to 'buildrepo')

diff --git a/buildrepo b/buildrepo
index b1f36cd..5b4133d 100755
--- a/buildrepo
+++ b/buildrepo
@@ -28,17 +28,6 @@ listpackages() {
 	done
 }
 
-# purge obsolete packages
-purge() {
-	[ -z "$dopurge" ] && return 0
-	local tmp=$(mktemp /tmp/$program-XXXXXX)	
-	cd "$repodir/$1" || return 1
-	trap 'rm -f "$tmp"; exit 1' INT
-	( listpackages "$1") >$tmp
-	ls *.apk 2>/dev/null | grep -v -w -f $tmp | xargs rm 2>/dev/null
-	return 0
-}
-
 build() {
 	local repo="$1" i indexupdate needbuild
 
@@ -69,11 +58,6 @@ build() {
 		indexupdate="$indexupdate $i"
 	done
 
-	if [ -z "$indexupdate" ] && [ -z "$needbuild" ]; then
-		echo ">>> Repository $repo is up-to-date."
-		return 0
-	fi
-
 	# build the postponed packages if any
 	if [ -n "$needbuild" ]; then
 		for i in $needbuild; do
@@ -83,18 +67,43 @@ build() {
 	fi
 
 	# kill old packages in repo
-	purge "$repo"
+	if [ -n "$dopurge" ]; then
+		local tmp=$(mktemp /tmp/$program-XXXXXX)
+		local purgefiles
+		cd "$repodir/$1" || return 1
+		trap 'rm -f "$tmp"; exit 1' INT
+		( listpackages "$1") >$tmp
+		purge=$(ls *.apk 2>/dev/null | grep -v -w -f $tmp)
+		if [ -n "$purge" ]; then
+			rm -f $purge
+			indexupdate="$indexupdate $purge"
+		fi
+		rm -f "$tmp"
+	fi
 
-	# generate the repository index
+	# check if we have any .apk newer than our index
 	cd "$repodir/$repo"
-	echo ">>> Generating Index for $repo..."
-	md5sum *.apk | gzip -9 > INDEX.md5.gz
-	if which apk >/dev/null; then
-		local deps
-		for i in $deprepo; do
-			deps="--repo $repodir/$i"
+	if [ -z "$indexupdate" ]; then
+		for i in *.apk; do
+			if [ $i -nt APK_INDEX.gz ]; then
+				indexupdate=1
+				break;
+			fi
 		done
-		apk $deps index *.apk | gzip -9 > APK_INDEX.gz
+	fi
+
+	# generate the repository index if needed
+	if [ -z "$indexupdate" ]; then
+		echo ">>> Index for $repo is up-to-date"
+	else
+		echo ">>> Generating Index for $repo..."
+		if which apk >/dev/null; then
+			local deps
+			for i in $deprepo; do
+				deps="--repo $repodir/$i"
+			done
+			apk $deps index *.apk | gzip -9 > APK_INDEX.gz
+		fi
 	fi
 }
 
-- 
cgit v1.2.3-70-g09d2