Hey.

The epoch field in PKGBUILD files is completely ignored now, and the
final Version field for the package consists only of pkgver and pkgrel
(example: 5.0-1)

This means that various AUR helpers cannot perform updates on packages
that have epoch > 0, because the local package is from that higher
epoch and the one in the AUR (as reported by rpc.php) is from epoch 0.

I'm providing a patch that supposedly fixes the problem by inspecting
the epoch field, and if not 0 prepending it to the Version (example:
1:5.0-1).

Comments welcome.
From 43edc10872ede698a647805e6b1c798f6a13e8b8 Mon Sep 17 00:00:00 2001
From: Slavi Pantaleev <s.pantal...@gmail.com>
Date: Fri, 24 Jun 2011 08:27:55 +0300
Subject: [PATCH] Honor epoch field in PKGBUILD files.

The epoch field in PKGBUILD files was completely ignored until now,
and the final Version field for the package consisted only of
pkgver and pkgrel (example: 5.0-1)

This means that various AUR helpers cannot perform updates on packages
that have epoch > 0, because the local package is from that higher epoch
and the one in the AUR (as reported by rpc.php) is from epoch 0.

The epoch field is taken into consideration now, and if not 0,
will be prepended to the final Version field (example: 1:5.0-1)
---
 web/html/pkgsubmit.php |   18 ++++++++++++------
 1 files changed, 12 insertions(+), 6 deletions(-)

diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php
index b5fe3b7..699b64f 100644
--- a/web/html/pkgsubmit.php
+++ b/web/html/pkgsubmit.php
@@ -240,6 +240,8 @@ if ($uid):
 				}
 				$new_pkgbuild[$k] = $v;
 			}
+
+			$new_pkgbuild['epoch'] = (isset($new_pkgbuild['epoch']) ? (int)$new_pkgbuild['epoch'] : 0);
 		}
 
 		# Now we've parsed the pkgbuild, let's move it to where it belongs
@@ -324,11 +326,16 @@ if ($uid):
 					db_query($q, $dbh);
 				}
 
+				if ($new_pkgbuild['epoch'] !== 0) {
+					$pkg_version = sprintf('%d:%s-%s', $new_pkgbuild['epoch'], $new_pkgbuild['pkgver'], $new_pkgbuild['pkgrel']);
+				} else {
+					$pkg_version = sprintf('%s-%s', $new_pkgbuild['pkgver'], $new_pkgbuild['pkgrel']);
+				}
+
 				# Update package data
-				$q = sprintf("UPDATE Packages SET ModifiedTS = UNIX_TIMESTAMP(), Name = '%s', Version = '%s-%s', License = '%s', Description = '%s', URL = '%s', OutOfDateTS = NULL, MaintainerUID = %d WHERE ID = %d",
+				$q = sprintf("UPDATE Packages SET ModifiedTS = UNIX_TIMESTAMP(), Name = '%s', Version = '%s', License = '%s', Description = '%s', URL = '%s', OutOfDateTS = NULL, MaintainerUID = %d WHERE ID = %d",
 					mysql_real_escape_string($new_pkgbuild['pkgname']),
-					mysql_real_escape_string($new_pkgbuild['pkgver']),
-					mysql_real_escape_string($new_pkgbuild['pkgrel']),
+					mysql_real_escape_string($pkg_version),
 					mysql_real_escape_string($new_pkgbuild['license']),
 					mysql_real_escape_string($new_pkgbuild['pkgdesc']),
 					mysql_real_escape_string($new_pkgbuild['url']),
@@ -339,11 +346,10 @@ if ($uid):
 
 			} else {
 				# This is a brand new package
-				$q = sprintf("INSERT INTO Packages (Name, License, Version, CategoryID, Description, URL, SubmittedTS, ModifiedTS, SubmitterUID, MaintainerUID) VALUES ('%s', '%s', '%s-%s', %d, '%s', '%s', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), %d, %d)",
+				$q = sprintf("INSERT INTO Packages (Name, License, Version, CategoryID, Description, URL, SubmittedTS, ModifiedTS, SubmitterUID, MaintainerUID) VALUES ('%s', '%s', '%s', %d, '%s', '%s', UNIX_TIMESTAMP(), UNIX_TIMESTAMP(), %d, %d)",
 					mysql_real_escape_string($new_pkgbuild['pkgname']),
 					mysql_real_escape_string($new_pkgbuild['license']),
-					mysql_real_escape_string($new_pkgbuild['pkgver']),
-					mysql_real_escape_string($new_pkgbuild['pkgrel']),
+					mysql_real_escape_string($pkg_version),
 					mysql_real_escape_string($_REQUEST['category']),
 					mysql_real_escape_string($new_pkgbuild['pkgdesc']),
 					mysql_real_escape_string($new_pkgbuild['url']),
-- 
1.7.5.2

Reply via email to