From c26043748e272c02c0002b001fbb21bc88fa5c73 Mon Sep 17 00:00:00 2001
From: Jakub Panek <me@panekj.dev>
Date: Thu, 22 Jun 2023 04:04:50 +0000
Subject: [PATCH] abuild: fix completions to vendor dir, warn on incorrect dir

Signed-off-by: Jakub Panek <me@panekj.dev>
---
 abuild.in         | 14 +++++++++++++-
 tests/abuild_test | 45 ++++++++++++++++++++++++++++++++++++++++++++-
 2 files changed, 57 insertions(+), 2 deletions(-)

diff --git a/abuild.in b/abuild.in
index 00463b15..e9ccc42d 100755
--- a/abuild.in
+++ b/abuild.in
@@ -939,6 +939,10 @@ prepare_subpackages() {
 		warning2 "Add \$pkgname-zsh-completion to subpackages"
 	fi
 	if [ -d "$pkgdir"/usr/share/fish/completions ]; then
+		warning "Found /usr/share/fish/completions"
+		warning2 "fish completions for programs should be located in /usr/share/fish/vendor_completions.d"
+	fi
+	if [ -d "$pkgdir"/usr/share/fish/vendor_completions.d ]; then
 		warning "Found /usr/share/fish/completions"
 		warning2 "Add \$pkgname-fish-completion to subpackages"
 	fi
@@ -2179,7 +2183,15 @@ default_fishcomp() {
 	install_if="$pkgname=$pkgver-r$pkgrel fish"
 
 	cd "$pkgdir" || return 0
-	amove usr/share/fish/completions
+
+	if [ -d usr/share/fish/vendor_completions.d ]; then
+		amove usr/share/fish/vendor_completions.d
+	fi
+
+	if [ -d usr/share/fish/completions ]; then
+		warning "fish completions for programs should be in /usr/share/fish/vendor_completions.d"
+		amove usr/share/fish/completions
+	fi
 }
 
 fishcomp() {
diff --git a/tests/abuild_test b/tests/abuild_test
index 80264b24..b7c431d6 100755
--- a/tests/abuild_test
+++ b/tests/abuild_test
@@ -44,7 +44,8 @@ init_tests \
 	abuild_setcap_binary_with_option \
 	abuild_command_provides \
 	abuild_gocache_dir \
-	abuild_cargo_home_dir
+	abuild_cargo_home_dir \
+	abuild_fish_comp_split
 
 export ABUILD_SHAREDIR=$(atf_get_srcdir)/..
 export ABUILD_CONF=/dev/null
@@ -1018,3 +1019,45 @@ abuild_cargo_home_dir_body() {
 		-o match:"dir:.*/tmp/cargo" \
 		abuild prepare build
 }
+
+abuild_fish_comp_split_body() {
+	init_keys
+	mkdir fish-split-dir
+	cd fish-split-dir
+	cat >APKBUILD<<-EOF
+		# Maintainer: Joe User <juser@example.com>
+		pkgname="fish-split-dir"
+		pkgver="1.0"
+		pkgrel=0
+		pkgdesc="Dummy test package"
+		url="https://gitlab.alpinelinux.org/alpine/aports"
+		arch="noarch"
+		license="MIT"
+		prepare() {
+			mkdir -p "\$builddir"
+		}
+		package() {
+			mkdir -p "\$pkgdir"/usr/share/fish/completions/
+			mkdir -p "\$pkgdir"/usr/share/fish/vendor_completions.d/
+			echo "comp" > "\$pkgdir"/usr/share/fish/completions/comp.fish
+			echo "comp" > "\$pkgdir"/usr/share/fish/vendor_completions.d/comp.fish
+		}
+	EOF
+	# test that there is a warning for the legacy dir existing
+	atf_check -s exit:0 \
+		-e match:"fish completions for programs should be located in /usr/share/fish/vendor_completions.d" \
+		abuild prepare build rootpkg
+
+	# now add the correct subpackage
+	echo 'subpackages="$pkgname-fish-completion"' >> APKBUILD
+	abuild clean prepare build rootpkg
+
+	if ! [ -d pkg/fish-split-dir-fish-completion/usr/share/fish/completions ]; then
+		echo "missing old dir"
+		exit 1
+	fi
+	if ! [ -d pkg/fish-split-dir-fish-completion/usr/share/fish/vendor_completions.d ]; then
+		echo "missing new dir"
+		exit 1
+	fi
+}
-- 
GitLab