From 896c436e140a4888c59135c7a2238e2ec4861632 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Thu, 4 Jun 2009 12:22:48 +0000
Subject: [PATCH] buildrepo: check if all files exist before try copy anything

seems like copy removes destination if source does not exist so
we ended up with a buildrepo that removed all packages
---
 buildrepo.in | 17 ++++++++++++++---
 1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/buildrepo.in b/buildrepo.in
index 5b4133d94dda..2be50e1f7838 100755
--- a/buildrepo.in
+++ b/buildrepo.in
@@ -28,6 +28,14 @@ listpackages() {
 	done
 }
 
+all_exist() {
+	while [ $# -gt 0 ]; do
+		[ -e "$1" ] || return 1
+		shift 1
+	done
+	return 0
+}
+	
 build() {
 	local repo="$1" i indexupdate needbuild
 
@@ -47,15 +55,18 @@ build() {
 			continue
 		fi
 
+		indexupdate="$indexupdate $i"
+
 		# try link or copy the files if they are in the ports dir
 		pkgs=$(abuild listpkg)
-		if cp -p -l $pkgs "$repodir/$repo"/ 2>/dev/null \
-			|| cp -p $pkgs "$repodir/$repo"/ 2>/dev/null; then
+		if all_exist $pkgs; then
 			echo ">>> Copying " $pkgs
+			cp -p -l $pkgs "$repodir/$repo"/ 2>/dev/null \
+				|| cp -p $pkgs "$repodir/$repo"/ \
+				|| needbuild="$needbuild $i"
 		else
 			needbuild="$needbuild $i"
 		fi
-		indexupdate="$indexupdate $i"
 	done
 
 	# build the postponed packages if any
-- 
GitLab