From 00687513b0181bcef1259fa159c58ea2f09e7343 Mon Sep 17 00:00:00 2001
From: Natanael Copa <ncopa@alpinelinux.org>
Date: Wed, 24 Jan 2024 19:35:52 +0000
Subject: [PATCH] setup-xorg-base: avoid duplicate community repos

simplify and remove duplicate logic of adding community repos.
---
 setup-xorg-base.in         | 32 ++++++++------------------------
 tests/setup_xorg_base_test | 36 ++++++++++++++++++++++++++++++++++--
 2 files changed, 42 insertions(+), 26 deletions(-)

diff --git a/setup-xorg-base.in b/setup-xorg-base.in
index 8c457dd..757f2b8 100644
--- a/setup-xorg-base.in
+++ b/setup-xorg-base.in
@@ -24,31 +24,15 @@ done
 shift $(($OPTIND - 1))
 
 # For every main/ repo, enable corresponding community/ repo
-orig="$ROOT"/etc/apk/repositories
-if test -f "$orig"; then
-	echo '>> Enabling community repositories'
-	tmp="$orig".setup-xorg-base.tmp
-	:> "$tmp"
-	while read line ; do
-		echo "$line"
-		nosharp="${line##\#*}"
-		nomain="${line%%/main}"
-		if test "$line" = "$nosharp" && test "$line" != "$nomain"; then
-			echo "$nomain"/community
-		fi
-	done < "$orig" >> "$tmp"
-	mv -f "$tmp" "$orig"
-	apk update
-fi
+for repo in $(grep '^[^#].*/main$' "$ROOT"/etc/apk/repositories 2>/dev/null); do
+	crepo="${repo%%/main}/community"
+	if ! grep -q -x -- "$crepo" "$ROOT"/etc/apk/repositories; then
+		echo ">>> Enabling repository $crepo"
+		echo "$crepo" >> "$ROOT"/etc/apk/repositories
+	fi
+done
 
-# enable community repo
-if [ -f "$ROOT"/etc/apk/repositories ] && ! grep -q '^[^#].*/community$' "$ROOT"/etc/apk/repositories; then
-	repo=$(grep '^[^#].*/main$' /etc/apk/repositories | sed 's:/main$:/community:')
-	escaped_repo=$(echo $repo | sed -e 's:/:\\/:g' -e 's:\.:\\.:g')
-	sed -i -e "/^[^#].*\/main$/a $repo" \
-		-e "/^#${escaped_repo}$/d" \
-		"$ROOT"/etc/apk/repositories \
-		&& echo ">> Enabling community repository"
+if [ -n "$crepo" ]; then
 	apk update
 fi
 
diff --git a/tests/setup_xorg_base_test b/tests/setup_xorg_base_test
index b661035..cffb004 100755
--- a/tests/setup_xorg_base_test
+++ b/tests/setup_xorg_base_test
@@ -3,7 +3,8 @@
 . $(atf_get_srcdir)/test_env.sh
 init_tests \
 	setup_xorg_base_usage \
-	setup_xorg_base
+	setup_xorg_base \
+	setup_xorg_base_community_duplicates
 
 setup_xorg_base_usage_body() {
 	test_usage setup-xorg-base
@@ -12,11 +13,42 @@ setup_xorg_base_usage_body() {
 setup_xorg_base_body() {
 	init_env
 	mkdir -p etc/apk
-	echo "https://dl-cdn.alpinelinux.org/alpine/edge/main" > etc/apk/repositories
+	cat > etc/apk/repositories <<-EOF
+		https://dl-cdn.alpinelinux.org/alpine/edge/main
+		#https://dl-cdn.alpinelinux.org/alpine/edge/community
+	EOF
 
 	atf_check -s exit:0 \
 		-o match:"apk add.*xorg-server.*foobar" \
 		-o match:"Starting udev" \
 		-e empty \
 		setup-xorg-base foobar
+
+	atf_check \
+		-o match:"https://dl-cdn.alpinelinux.org/alpine/edge/community" \
+		cat etc/apk/repositories
+}
+
+setup_xorg_base_community_duplicates_body() {
+	init_env
+	mkdir -p etc/apk
+	cat > etc/apk/repositories <<-EOF
+		https://dl-cdn.alpinelinux.org/alpine/edge/main
+		https://example.tld/main
+		https://dl-cdn.alpinelinux.org/alpine/edge/community
+	EOF
+
+	atf_check -s exit:0 \
+		-o match:"apk update" \
+		-e empty \
+		setup-xorg-base
+
+	atf_check \
+		-o match:"https://example.tld/community" \
+		-o match:"https://dl-cdn.alpinelinux.org/alpine/edge/community" \
+		cat etc/apk/repositories
+
+	atf_check \
+		-o match:"2" \
+		grep -c -w "community" etc/apk/repositories
 }
-- 
GitLab