summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Fleischer <archlinux@cryptocrack.de>2013-03-05 11:49:09 +0100
committerLukas Fleischer <archlinux@cryptocrack.de>2013-03-09 00:33:15 +0100
commit5a1137363cb358593a64e0e6d0b0adeb1a9514ff (patch)
treeacf4780a3fa3c8e500569b7d2b8cf71f5fedc6dd
parent1f27b2fb9bcb61f4ea66dd15b69565428b36f639 (diff)
downloadaur-5a1137363cb358593a64e0e6d0b0adeb1a9514ff.tar.gz
aur-5a1137363cb358593a64e0e6d0b0adeb1a9514ff.tar.xz
pkgsubmit.php: Parse .AURINFO metadata
This allows for adding a metadata file called ".AURINFO" to source tarballs to overwrite specific PKGBUILD fields. .AURINFO files are parsed line by line. The syntax for each line is "key = value", where key is any of the following field names: * pkgname * pkgver * pkgdesc * url * license * depend Multiple "depend" lines can be specified to add multiple dependencies. This format closely matches the .PKGINFO format that is used for binary packages in pacman/libalpm. It can be extended by field name prefixes or sections to support split packages later. Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
-rw-r--r--web/html/pkgsubmit.php37
1 files changed, 33 insertions, 4 deletions
diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php
index d9bb6bc8..d2fe5128 100644
--- a/web/html/pkgsubmit.php
+++ b/web/html/pkgsubmit.php
@@ -81,8 +81,8 @@ if ($uid):
if (!$error) {
$tar = new Archive_Tar($_FILES['pfile']['tmp_name']);
- # Extract PKGBUILD into a string
- $pkgbuild_raw = '';
+ # Extract PKGBUILD and .AURINFO into a string
+ $pkgbuild_raw = $srcinfo_raw = '';
$dircount = 0;
foreach ($tar->listContent() as $tar_file) {
if ($tar_file['typeflag'] == 0) {
@@ -93,6 +93,9 @@ if ($uid):
elseif (substr($tar_file['filename'], -9) == '/PKGBUILD') {
$pkgbuild_raw = $tar->extractInString($tar_file['filename']);
}
+ elseif (substr($tar_file['filename'], -9) == '/.AURINFO') {
+ $srcinfo_raw = $tar->extractInString($tar_file['filename']);
+ }
}
elseif ($tar_file['typeflag'] == 5) {
if (substr_count($tar_file['filename'], "/") > 1) {
@@ -254,6 +257,30 @@ if ($uid):
}
}
+ # Parse .AURINFO and overwrite PKGBUILD fields accordingly
+ unset($pkg_version);
+ $depends = array();
+ foreach (explode("\n", $srcinfo_raw) as $line) {
+ if (empty($line) || $line[0] == '#') {
+ continue;
+ }
+ list($key, $value) = explode(' = ', $line, 2);
+ switch ($key) {
+ case 'pkgname':
+ case 'pkgdesc':
+ case 'url':
+ case 'license':
+ $new_pkgbuild[$key] = $value;
+ break;
+ case 'pkgver':
+ $pkg_version = $value;
+ break;
+ case 'depend':
+ $depends[] = $value;
+ break;
+ }
+ }
+
# Validate package name
if (!$error) {
$pkg_name = $new_pkgbuild['pkgname'];
@@ -266,7 +293,7 @@ if ($uid):
}
# Determine the full package version with epoch
- if (!$error) {
+ if (!$error && !isset($pkg_version)) {
if (isset($new_pkgbuild['epoch']) && (int)$new_pkgbuild['epoch'] > 0) {
$pkg_version = sprintf('%d:%s-%s', $new_pkgbuild['epoch'], $new_pkgbuild['pkgver'], $new_pkgbuild['pkgrel']);
} else {
@@ -389,8 +416,10 @@ if ($uid):
}
# Update package depends
- if (!empty($new_pkgbuild['depends'])) {
+ if (empty($depends) && !empty($new_pkgbuild['depends'])) {
$depends = explode(" ", $new_pkgbuild['depends']);
+ }
+ if (!empty($depends)) {
foreach ($depends as $dep) {
$deppkgname = preg_replace("/(<|<=|=|>=|>).*/", "", $dep);
$depcondition = str_replace($deppkgname, "", $dep);