[aur-dev] [PATCH 1/2] Allow users to delete their own packages

Lukas Fleischer archlinux at cryptocrack.de
Wed Mar 4 11:24:03 UTC 2015


Allow users to remove their own package bases for a short period of time
after initial submission (defaults to one day).

Implements FS#43648.

Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>
---
 conf/config.proto            |  1 +
 web/lib/pkgbasefuncs.inc.php |  5 +++--
 web/lib/pkgreqfuncs.inc.php  | 14 ++++++++++++++
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/conf/config.proto b/conf/config.proto
index b4a381d..95194a7 100644
--- a/conf/config.proto
+++ b/conf/config.proto
@@ -25,6 +25,7 @@ max_rpc_results = 5000
 aur_request_ml = aur-requests at archlinux.org
 request_idle_time = 1209600
 auto_orphan_age = 15552000
+auto_delete_age = 86400
 
 [auth]
 key-prefixes = ssh-rsa ssh-dss ecdsa-sha2-nistp256 ecdsa-sha2-nistp384 ecdsa-sha2-nistp521 ssh-ed25519
diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
index 5741b01..6f9ef85 100644
--- a/web/lib/pkgbasefuncs.inc.php
+++ b/web/lib/pkgbasefuncs.inc.php
@@ -436,11 +436,12 @@ function pkgbase_unflag($base_ids) {
  * @param array $base_ids Array of package base IDs to delete
  * @param int $merge_base_id Package base to merge the deleted ones into
  * @param int $via Package request to close upon deletion
+ * @param bool $grant Allow anyone to delete the package base
  *
  * @return array Tuple of success/failure indicator and error message
  */
-function pkgbase_delete ($base_ids, $merge_base_id, $via) {
-	if (!has_credential(CRED_PKGBASE_DELETE)) {
+function pkgbase_delete ($base_ids, $merge_base_id, $via, $grant=false) {
+	if (!$grant && !has_credential(CRED_PKGBASE_DELETE)) {
 		return array(false, __("You do not have permission to delete packages."));
 	}
 
diff --git a/web/lib/pkgreqfuncs.inc.php b/web/lib/pkgreqfuncs.inc.php
index a5d6be8..0fab447 100644
--- a/web/lib/pkgreqfuncs.inc.php
+++ b/web/lib/pkgreqfuncs.inc.php
@@ -184,6 +184,7 @@ function pkgreq_file($ids, $type, $merge_into, $comments) {
 		   " Request for " .  $row['Name'], $body, $headers);
 
 	$auto_orphan_age = config_get('options', 'auto_orphan_age');
+	$auto_delete_age = config_get('options', 'auto_delete_age');
 	$details = pkgbase_get_details($base_id);
 	if ($type == 'orphan' && $details['OutOfDateTS'] > 0 &&
 	    time() - $details['OutOfDateTS'] >= $auto_orphan_age &&
@@ -201,6 +202,19 @@ function pkgreq_file($ids, $type, $merge_into, $comments) {
 		$q = "UPDATE PackageBases SET MaintainerUID = NULL ";
 		$q.= "WHERE ID = " . $base_id;
 		$dbh->exec($q);
+	} else if ($type == 'deletion' && $details['MaintainerUID'] == $uid &&
+	    $details['SubmittedTS'] > 0 && $auto_delete_age > 0 &&
+	    time() - $details['SubmittedTS'] <= $auto_delete_age) {
+		/*
+		 * Close package request. NOTE: This needs to happen *before*
+		 * the actual deletion operation. Otherwise, the former
+		 * maintainer will not be included in the Cc list of the
+		 * request notification email.
+		 */
+		pkgreq_close($request_id, "accepted",
+			     "Deletion of a fresh package requested by its " .
+			     "current maintainer.", true);
+		pkgbase_delete(array($base_id), NULL, NULL, true);
 	}
 
 	return array(true, __("Added request successfully."));
-- 
2.3.1


More information about the aur-dev mailing list