[aur-dev] [PATCH] Add support for architecture-specific sources

Lukas Fleischer archlinux at cryptocrack.de
Fri Oct 10 10:40:50 UTC 2014


As a follow-up to 4d7da95 (Add support for architecture-specific fields,
2014-08-10), handle architecture-specific source fields as well.

Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>
---
 schema/aur-schema.sql        |  1 +
 upgrading/3.5.0.txt          |  1 +
 web/html/pkgsubmit.php       |  8 +++++---
 web/lib/pkgfuncs.inc.php     | 40 ++++++++++++++++++++++++++++++++++------
 web/template/pkg_details.php | 24 +++++-------------------
 5 files changed, 46 insertions(+), 28 deletions(-)

diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql
index 149695c..08f87d8 100644
--- a/schema/aur-schema.sql
+++ b/schema/aur-schema.sql
@@ -238,6 +238,7 @@ CREATE TABLE PackageRelations (
 CREATE TABLE PackageSources (
 	PackageID INTEGER UNSIGNED NOT NULL,
 	Source VARCHAR(255) NOT NULL DEFAULT "/dev/null",
+	SourceArch VARCHAR(255) NULL DEFAULT NULL,
 	INDEX (PackageID),
 	FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE
 ) ENGINE = InnoDB;
diff --git a/upgrading/3.5.0.txt b/upgrading/3.5.0.txt
index a0ee389..152fc84 100644
--- a/upgrading/3.5.0.txt
+++ b/upgrading/3.5.0.txt
@@ -3,4 +3,5 @@
 ----
 ALTER TABLE PackageDepends ADD COLUMN DepArch VARCHAR(255) NULL DEFAULT NULL;
 ALTER TABLE PackageRelations ADD COLUMN RelArch VARCHAR(255) NULL DEFAULT NULL;
+ALTER TABLE PackageSources ADD COLUMN SourceArch VARCHAR(255) NULL DEFAULT NULL;
 ----
diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php
index e1963de..8cecd67 100644
--- a/web/html/pkgsubmit.php
+++ b/web/html/pkgsubmit.php
@@ -176,7 +176,6 @@ if ($uid):
 				break;
 			case 'license':
 			case 'groups':
-			case 'source':
 				$section_info[$key][] = $value;
 				break;
 			case 'depends':
@@ -186,6 +185,7 @@ if ($uid):
 			case 'conflicts':
 			case 'provides':
 			case 'replaces':
+			case 'source':
 				$section_info[$key][$arch][] = $value;
 				break;
 			}
@@ -382,8 +382,10 @@ if ($uid):
 					}
 				}
 
-				foreach ($pi['source'] as $src) {
-					pkg_add_src($pkgid, $src);
+				foreach ($pi['source'] as $srcarch => $srcgrp) {
+					foreach ($srcgrp as $src) {
+						pkg_add_src($pkgid, $src, $srcarch);
+					}
 				}
 			}
 
diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index 6a43a48..cf8c2f9 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -292,6 +292,31 @@ function pkg_rel_html($name, $cond, $arch) {
 }
 
 /**
+ * Get the HTML code to display a source link
+ *
+ * @param string $url The URL of the source
+ * @param string $arch The source architecture
+ *
+ * @return string The HTML code of the label to display
+ */
+function pkg_source_link($url, $arch) {
+	$url = explode('::', $url);
+	$parsed_url = parse_url($url[0]);
+
+	if (isset($parsed_url['scheme']) || isset($url[1])) {
+		$link = '<a href="' .  htmlspecialchars((isset($url[1]) ? $url[1] : $url[0]), ENT_QUOTES) . '">' . htmlspecialchars($url[0]) . '</a>';
+	} else {
+		$link = htmlspecialchars($url[0]);
+	}
+
+	if ($arch) {
+		$link .= ' <em>(' . htmlspecialchars($arch) . ')</em>';
+	}
+
+	return $link;
+}
+
+/**
  * Determine packages that depend on a package
  *
  * @param string $name The package name for the dependency search
@@ -327,7 +352,7 @@ function pkg_sources($pkgid) {
 	$pkgid = intval($pkgid);
 	if ($pkgid > 0) {
 		$dbh = DB::connect();
-		$q = "SELECT Source FROM PackageSources ";
+		$q = "SELECT Source, SourceArch FROM PackageSources ";
 		$q.= "WHERE PackageID = " . $pkgid;
 		$q.= " ORDER BY Source";
 		$result = $dbh->query($q);
@@ -335,7 +360,7 @@ function pkg_sources($pkgid) {
 			return array();
 		}
 		while ($row = $result->fetch(PDO::FETCH_NUM)) {
-			$sources[] = $row[0];
+			$sources[] = $row;
 		}
 	}
 	return $sources;
@@ -831,14 +856,17 @@ function pkg_add_rel($pkgid, $type, $relname, $relcondition, $relarch) {
  *
  * @param int $pkgid The package ID to add the source for
  * @param string $pkgsrc The package source to add to the database
+ * @param string $srcarch The architecture of the source to add
  *
  * @return void
  */
-function pkg_add_src($pkgid, $pkgsrc) {
+function pkg_add_src($pkgid, $pkgsrc, $srcarch) {
 	$dbh = DB::connect();
-	$q = "INSERT INTO PackageSources (PackageID, Source) VALUES (";
-	$q .= $pkgid . ", " . $dbh->quote($pkgsrc) . ")";
-
+	$q = sprintf("INSERT INTO PackageSources (PackageID, Source, SourceArch) VALUES (%d, %s, %s)",
+		$pkgid,
+		$dbh->quote($pkgsrc),
+		$srcarch ? $dbh->quote($srcarch) : 'NULL'
+	);
 	$dbh->exec($q);
 }
 
diff --git a/web/template/pkg_details.php b/web/template/pkg_details.php
index 3752e1a..d09b3d8 100644
--- a/web/template/pkg_details.php
+++ b/web/template/pkg_details.php
@@ -379,28 +379,14 @@ if ($row["PackagerUID"]):
 		<div id="pkgfiles" class="listing">
 			<h3><?= __('Sources') ?></h3>
 		</div>
-<?php if (count($sources) > 0): ?>
+		<?php if (count($sources) > 0): ?>
 		<div>
 			<ul id="pkgsrcslist">
-<?php
-	while (list($k, $src) = each($sources)):
-		$src = explode('::', $src);
-		$parsed_url = parse_url($src[0]);
-
-		# It is an external source
-		if (isset($parsed_url['scheme']) || isset($src[1])):
-?>
-				<li><a href="<?= htmlspecialchars((isset($src[1]) ? $src[1] : $src[0]), ENT_QUOTES) ?>"><?= htmlspecialchars($src[0]) ?> </a></li>
-<?php
-		else:
-			# It is presumably an internal source
-			$src = $src[0];
-?>
-				<li><?= htmlspecialchars($src) ?></li>
-		<?php endif; ?>
-	<?php endwhile; ?>
+					<?php while (list($k, $src) = each($sources)): ?>
+					<li><?= pkg_source_link($src[0], $src[1]) ?></li>
+					<?php endwhile; ?>
 			</ul>
 		</div>
-<?php endif; ?>
+		<?php endif; ?>
 	</div>
 </div>
-- 
2.1.2


More information about the aur-dev mailing list