diff --git a/buildrepo.in b/buildrepo.in
index f1a574908d1bb0542ea5fc01165dda9bfa8bc830..23cc61e4733806b3ba456e97bdfa34fde29480d9 100755
--- a/buildrepo.in
+++ b/buildrepo.in
@@ -46,9 +46,9 @@ all_exist() {
 	done
 	return 0
 }
-	
-build() {
-	local repo="$1" i needbuild
+
+list_needbuild() {
+	local repo="$1" i=
 
 	cd "$aportsdir/$repo" || return 0
 
@@ -78,14 +78,20 @@ build() {
 
 		# try link or copy the files if they are in the ports dir
 		if all_exist $pkgs; then
-			echo ">>> Copying " $pkgs
+			echo ">>> Copying " $pkgs >&2
 			cp -p -l $pkgs "$repodir/$repo/$CARCH"/ 2>/dev/null \
 				|| cp -p $pkgs "$repodir/$repo/$CARCH"/ \
-				|| needbuild="$needbuild $i"
+				|| echo "$i"
 		else
-			needbuild="$needbuild $i"
+			echo "$i"
 		fi
 	done
+}
+
+do_build() {
+	local repo="$1" i=
+	cd "$aportsdir/$repo" || return 0
+	local needbuild="$(list_needbuild $repo)"
 
 	# build the postponed packages if any
 	if [ -n "$needbuild" ]; then
@@ -146,9 +152,9 @@ shift $(($OPTIND - 1))
 
 while [ $# -gt 0 ]; do
 	if [ -n "$logprefix" ]; then
-		build $1  >$logprefix.$1.log 2>&1 || exit 1
+		do_build $1  >$logprefix.$1.log 2>&1 || exit 1
 	else
-		build $1 || exit 1
+		do_build $1 || exit 1
 	fi
 	deprepo="$deprepo $1"
 	shift