[v2] Display warning when flagging VCS packages

Message ID 20190525230152.6418-1-lfleischer@archlinux.org
State New
Headers show
Series
  • [v2] Display warning when flagging VCS packages
Related show

Commit Message

Lukas Fleischer May 25, 2019, 11:01 p.m. UTC
VCS packages should not be flagged out-of-date when the package version
does not match the most recent commit.

Implements FS#62733.

Signed-off-by: Lukas Fleischer <lfleischer@archlinux.org>
---
 web/html/css/aurweb.css      |  4 ++++
 web/html/pkgflag.php         |  9 +++++++++
 web/lib/pkgbasefuncs.inc.php | 21 +++++++++++++++++++++
 3 files changed, 34 insertions(+)

Patch

diff --git a/web/html/css/aurweb.css b/web/html/css/aurweb.css
index ef37bf5..81bf9ab 100644
--- a/web/html/css/aurweb.css
+++ b/web/html/css/aurweb.css
@@ -195,3 +195,7 @@  label.confirmation,
 .comments .more {
 	font-weight: normal;
 }
+
+.error {
+	color: red;
+}
diff --git a/web/html/pkgflag.php b/web/html/pkgflag.php
index 61346b9..9cc6d7a 100644
--- a/web/html/pkgflag.php
+++ b/web/html/pkgflag.php
@@ -50,6 +50,15 @@  if (has_credential(CRED_PKGBASE_FLAG)): ?>
 		<li><?= htmlspecialchars($pkgname) ?></li>
 		<?php endforeach; ?>
 	</ul>
+	<?php if (pkgbase_is_vcs($base_id)): ?>
+	<p class="error">
+		This seems to be a VCS package. Please do <strong>not</strong>
+		flag it out-of-date if the package version in the AUR does not
+		match the most recent commit. Flagging this package should only
+		be done if the sources moved or changes in the PKGBUILD are
+		required because of recent upstream changes.
+	</p>
+	<?php endif; ?>
 	<p>
 		<?= __('Please do %snot%s use this form to report bugs. Use the package comments instead.',
 			'<strong>', '</strong>'); ?>
diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index 1df21a2..a492589 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -367,6 +367,27 @@  function pkgbase_get_pkgnames($base_id) {
 	return $result->fetchAll(PDO::FETCH_COLUMN, 0);
 }
 
+/**
+ * Determine whether a package base is (or contains a) VCS package
+ *
+ * @param int $base_id The ID of the package base
+ *
+ * @return bool True if the package base is/contains a VCS package
+ */
+function pkgbase_is_vcs($base_id) {
+	$suffixes = array("-cvs", "-svn", "-git", "-hg", "-bzr", "-darcs");
+	$haystack = pkgbase_get_pkgnames($base_id);
+	array_push($haystack, pkgbase_name_from_id($base_id));
+	foreach ($haystack as $pkgname) {
+		foreach ($suffixes as $suffix) {
+			if (substr_compare($pkgname, $suffix, -strlen($suffix)) === 0) {
+				return true;
+			}
+		}
+	}
+	return false;
+}
+
 /**
  * Delete all packages belonging to a package base
  *