From b0ae59724ed36242459a91c0f9c5ce036c46de41 Mon Sep 17 00:00:00 2001
From: Dominik Fischer <d.f.fischer@web.de>
Date: Thu, 23 Apr 2015 16:41:46 +0200
Subject: makepkg-template: support multiple --template-dirs

Especially when maintaining local templates in addition to the ones
stored in /usr/share/makepkg-template, it can be useful to include
templates stored in multiple different locations into one PKGBUILD. This
patch makes this possible by allowing --template-dir to be specified
multiple times.

This also introduces a dedicated error message when a template cannot be
found, in contrast to the already existing "Couldn't detect version for
template '%s'".

If a template of the same name is present in more than one of the given
directories, the last one always takes precedence.

Neither the default behaviour without the option given, nor the handling
of a single template dir is changed.

Signed-off-by: Dominik Fischer <d.f.fischer@web.de>
Signed-off-by: Florian Pritz <bluewind@xinu.at>
Signed-off-by: Allan McRae <allan@archlinux.org>
---
 .../compose-multiple-template-dirs/PKGBUILD            |  5 +++++
 .../templates/build/build-1.template                   |  1 +
 .../templates/package/package-1.template               |  1 +
 .../compose-multiple-template-dirs/testcase-config     | 18 ++++++++++++++++++
 .../last-template-dir-has-precedece/PKGBUILD           |  4 ++++
 .../last-template-dir-has-precedece/PKGBUILD.expanded  |  6 ++++++
 .../templates/first/perl-module-1.0.template           |  1 +
 .../templates/last/perl-module-1.0.template            |  1 +
 .../last-template-dir-has-precedece/testcase-config    | 15 +++++++++++++++
 .../missing-template-file/testcase-config              |  2 +-
 .../missing-template-symlink/testcase-config           |  4 ++--
 .../template-without-version/testcase-config           |  2 +-
 12 files changed, 56 insertions(+), 4 deletions(-)
 create mode 100644 test/scripts/makepkg-template-tests/compose-multiple-template-dirs/PKGBUILD
 create mode 100644 test/scripts/makepkg-template-tests/compose-multiple-template-dirs/templates/build/build-1.template
 create mode 100644 test/scripts/makepkg-template-tests/compose-multiple-template-dirs/templates/package/package-1.template
 create mode 100644 test/scripts/makepkg-template-tests/compose-multiple-template-dirs/testcase-config
 create mode 100644 test/scripts/makepkg-template-tests/last-template-dir-has-precedece/PKGBUILD
 create mode 100644 test/scripts/makepkg-template-tests/last-template-dir-has-precedece/PKGBUILD.expanded
 create mode 100644 test/scripts/makepkg-template-tests/last-template-dir-has-precedece/templates/first/perl-module-1.0.template
 create mode 100644 test/scripts/makepkg-template-tests/last-template-dir-has-precedece/templates/last/perl-module-1.0.template
 create mode 100644 test/scripts/makepkg-template-tests/last-template-dir-has-precedece/testcase-config

(limited to 'test/scripts/makepkg-template-tests')

diff --git a/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/PKGBUILD b/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/PKGBUILD
new file mode 100644
index 00000000..f8e09f8a
--- /dev/null
+++ b/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/PKGBUILD
@@ -0,0 +1,5 @@
+pkgname=foo
+pkgver=1
+
+# template input; name=build; version=1;
+# template input; name=package; version=1;
diff --git a/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/templates/build/build-1.template b/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/templates/build/build-1.template
new file mode 100644
index 00000000..81f2745c
--- /dev/null
+++ b/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/templates/build/build-1.template
@@ -0,0 +1 @@
+build() {}
diff --git a/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/templates/package/package-1.template b/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/templates/package/package-1.template
new file mode 100644
index 00000000..056096fd
--- /dev/null
+++ b/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/templates/package/package-1.template
@@ -0,0 +1 @@
+package() {}
diff --git a/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/testcase-config b/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/testcase-config
new file mode 100644
index 00000000..3c58a617
--- /dev/null
+++ b/test/scripts/makepkg-template-tests/compose-multiple-template-dirs/testcase-config
@@ -0,0 +1,18 @@
+arguments+=(--template-dir $testdir/$testcase/templates/build)
+arguments+=(--template-dir $testdir/$testcase/templates/package)
+expected_exitcode=0
+
+IFS="" read -d '' expected_output <<'EOF'
+EOF
+
+IFS="" read -d '' expected_result <<'EOF'
+pkgname=foo
+pkgver=1
+
+# template start; name=build; version=1;
+build() {}
+# template end;
+# template start; name=package; version=1;
+package() {}
+# template end;
+EOF
diff --git a/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/PKGBUILD b/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/PKGBUILD
new file mode 100644
index 00000000..2813b757
--- /dev/null
+++ b/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/PKGBUILD
@@ -0,0 +1,4 @@
+pkgname=foo
+pkgver=1
+
+# template input; name=perl-module; version=1.0;
diff --git a/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/PKGBUILD.expanded b/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/PKGBUILD.expanded
new file mode 100644
index 00000000..c1dbeb4a
--- /dev/null
+++ b/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/PKGBUILD.expanded
@@ -0,0 +1,6 @@
+pkgname=foo
+pkgver=1
+
+# template start; name=perl-module; version=1.0;
+this should be included
+# template end;
diff --git a/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/templates/first/perl-module-1.0.template b/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/templates/first/perl-module-1.0.template
new file mode 100644
index 00000000..2649f782
--- /dev/null
+++ b/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/templates/first/perl-module-1.0.template
@@ -0,0 +1 @@
+this should be overwritten
diff --git a/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/templates/last/perl-module-1.0.template b/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/templates/last/perl-module-1.0.template
new file mode 100644
index 00000000..409e8d43
--- /dev/null
+++ b/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/templates/last/perl-module-1.0.template
@@ -0,0 +1 @@
+this should be included
diff --git a/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/testcase-config b/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/testcase-config
new file mode 100644
index 00000000..fe38d659
--- /dev/null
+++ b/test/scripts/makepkg-template-tests/last-template-dir-has-precedece/testcase-config
@@ -0,0 +1,15 @@
+arguments+=(--template-dir $testdir/$testcase/templates/first)
+arguments+=(--template-dir $testdir/$testcase/templates/last)
+expected_exitcode=0
+
+IFS="" read -d '' expected_output <<'EOF'
+EOF
+
+IFS="" read -d '' expected_result <<'EOF'
+pkgname=foo
+pkgver=1
+
+# template start; name=perl-module; version=1.0;
+this should be included
+# template end;
+EOF
diff --git a/test/scripts/makepkg-template-tests/missing-template-file/testcase-config b/test/scripts/makepkg-template-tests/missing-template-file/testcase-config
index bdfde40d..2fc400e3 100644
--- a/test/scripts/makepkg-template-tests/missing-template-file/testcase-config
+++ b/test/scripts/makepkg-template-tests/missing-template-file/testcase-config
@@ -7,7 +7,7 @@ _setup_testcase() {
 
 # set IFS="" if you want trailing new lines, otherwise remove it
 IFS="" read -d '' expected_output <<'EOF'
-failed to open './makepkg-template-tests/missing-template-file/templates/perl-module-1.0.template': No such file or directory
+Failed to find template file matching 'perl-module-1.0.template'
 EOF
 
 IFS="" read -d '' expected_result <<'EOF'
diff --git a/test/scripts/makepkg-template-tests/missing-template-symlink/testcase-config b/test/scripts/makepkg-template-tests/missing-template-symlink/testcase-config
index c0eabe0d..8f4c8b88 100644
--- a/test/scripts/makepkg-template-tests/missing-template-symlink/testcase-config
+++ b/test/scripts/makepkg-template-tests/missing-template-symlink/testcase-config
@@ -1,8 +1,8 @@
 arguments+=()
-expected_exitcode=255
+expected_exitcode=2
 
 IFS="" read -d '' expected_output <<'EOF'
-Couldn't detect version for template 'perl-module'
+Failed to find template file matching 'perl-module.template'
 EOF
 
 IFS="" read -d '' expected_result <<'EOF'
diff --git a/test/scripts/makepkg-template-tests/template-without-version/testcase-config b/test/scripts/makepkg-template-tests/template-without-version/testcase-config
index ec04f2fa..b078f51a 100644
--- a/test/scripts/makepkg-template-tests/template-without-version/testcase-config
+++ b/test/scripts/makepkg-template-tests/template-without-version/testcase-config
@@ -2,7 +2,7 @@ arguments+=()
 expected_exitcode=255
 
 IFS="" read -d '' expected_output <<'EOF'
-Couldn't detect version for template 'template-without_version'
+Couldn't detect version for template './makepkg-template-tests/template-without-version/templates/template-without_version.template'
 EOF
 
 IFS="" read -d '' expected_result <<'EOF'
-- 
cgit v1.2.3-70-g09d2