summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLukas Fleischer <archlinux@cryptocrack.de>2014-04-26 14:07:20 +0200
committerLukas Fleischer <archlinux@cryptocrack.de>2014-04-26 14:07:20 +0200
commitcc3244ea8ae0202265df3d0fd2cfe86fbbeb9d30 (patch)
treeacdf3629538c57886b41f9216bb4e132939d7452
parent3720bdf6b264cb4bb603e4199f2758598c260ed4 (diff)
Store package groups in the database
Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
-rw-r--r--UPGRADING18
-rw-r--r--schema/aur-schema.sql21
-rw-r--r--web/html/pkgsubmit.php9
-rw-r--r--web/lib/pkgfuncs.inc.php43
4 files changed, 90 insertions, 1 deletions
diff --git a/UPGRADING b/UPGRADING
index f523140..814fea1 100644
--- a/UPGRADING
+++ b/UPGRADING
@@ -199,6 +199,24 @@ CREATE TABLE PackageRelations (
) ENGINE = InnoDB;
----
+17. Create tables to store package groups:
+
+----
+CREATE TABLE Groups (
+ ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
+ Name VARCHAR(64) NOT NULL,
+ PRIMARY KEY (ID),
+ UNIQUE (Name)
+) ENGINE = InnoDB;
+CREATE TABLE PackageGroups (
+ PackageID INTEGER UNSIGNED NOT NULL,
+ GroupID INTEGER UNSIGNED NOT NULL,
+ PRIMARY KEY (PackageID, GroupID),
+ FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE,
+ FOREIGN KEY (GroupID) REFERENCES Groups(ID) ON DELETE CASCADE
+) ENGINE = InnoDB;
+----
+
From 2.2.0 to 2.3.0
-------------------
diff --git a/schema/aur-schema.sql b/schema/aur-schema.sql
index c98ba77..ae42fd3 100644
--- a/schema/aur-schema.sql
+++ b/schema/aur-schema.sql
@@ -133,6 +133,27 @@ CREATE TABLE Packages (
) ENGINE = InnoDB;
+-- Information about groups
+--
+CREATE TABLE Groups (
+ ID INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
+ Name VARCHAR(64) NOT NULL,
+ PRIMARY KEY (ID),
+ UNIQUE (Name)
+) ENGINE = InnoDB;
+
+
+-- Information about package-group-relations
+--
+CREATE TABLE PackageGroups (
+ PackageID INTEGER UNSIGNED NOT NULL,
+ GroupID INTEGER UNSIGNED NOT NULL,
+ PRIMARY KEY (PackageID, GroupID),
+ FOREIGN KEY (PackageID) REFERENCES Packages(ID) ON DELETE CASCADE,
+ FOREIGN KEY (GroupID) REFERENCES Groups(ID) ON DELETE CASCADE
+) ENGINE = InnoDB;
+
+
-- Define the package dependency types
--
CREATE TABLE DependencyTypes (
diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php
index 3df38d8..107441f 100644
--- a/web/html/pkgsubmit.php
+++ b/web/html/pkgsubmit.php
@@ -151,6 +151,7 @@ if ($uid):
}
}
$section_info = array(
+ 'groups' => array(),
'depends' => array(),
'makedepends' => array(),
'checkdepends' => array(),
@@ -169,6 +170,7 @@ if ($uid):
case 'license':
$section_info[$key] = $value;
break;
+ case 'groups':
case 'source':
case 'depends':
case 'makedepends':
@@ -196,7 +198,7 @@ if ($uid):
if (!isset($pkgbase_info['pkgbase'])) {
$pkgbase_info['pkgbase'] = $pkgbase_info['pkgname'];
}
- foreach (array('source', 'depends', 'makedepends', 'checkdepends', 'optdepends', 'conflicts', 'provides', 'replaces') as $array_opt) {
+ foreach (array('groups', 'source', 'depends', 'makedepends', 'checkdepends', 'optdepends', 'conflicts', 'provides', 'replaces') as $array_opt) {
if (empty($pkgbase_info[$array_opt])) {
$pkgbase_info[$array_opt] = array();
} else {
@@ -357,6 +359,11 @@ if ($uid):
foreach ($pkginfo as $pi) {
$pkgid = pkg_create($base_id, $pi['pkgname'], $pi['license'], $pi['full-version'], $pi['pkgdesc'], $pi['url']);
+ foreach ($pi['groups'] as $grp) {
+ $grpid = pkg_create_group($grp);
+ pkg_add_grp($pkgid, $grpid);
+ }
+
foreach (array('depends', 'makedepends', 'checkdepends', 'optdepends') as $deptype) {
foreach ($pi[$deptype] as $dep) {
$deppkgname = preg_replace("/(<|=|>).*/", "", $dep);
diff --git a/web/lib/pkgfuncs.inc.php b/web/lib/pkgfuncs.inc.php
index a04f525..f80d4b4 100644
--- a/web/lib/pkgfuncs.inc.php
+++ b/web/lib/pkgfuncs.inc.php
@@ -805,3 +805,46 @@ function pkg_add_src($pkgid, $pkgsrc) {
$dbh->exec($q);
}
+
+/**
+ * Creates a new group and returns its ID
+ *
+ * If the groups already exists, the ID of the already existing group is
+ * returned.
+ *
+ * @param string $name The name of the group to create
+ *
+ * @return int The ID of the group
+ */
+function pkg_create_group($name) {
+ $dbh = DB::connect();
+ $q = sprintf("SELECT ID FROM Groups WHERE Name = %s", $dbh->quote($name));
+ $result = $dbh->query($q);
+ if ($result) {
+ $grpid = $result->fetch(PDO::FETCH_COLUMN, 0);
+ if ($grpid > 0) {
+ return $grpid;
+ }
+ }
+
+ $q = sprintf("INSERT INTO Groups (Name) VALUES (%s)", $dbh->quote($name));
+ $dbh->exec($q);
+ return $dbh->lastInsertId();
+}
+
+/**
+ * Add a package to a group
+ *
+ * @param int $pkgid The package ID of the package to add
+ * @param int $grpid The group ID of the group to add the package to
+ *
+ * @return void
+ */
+function pkg_add_grp($pkgid, $grpid) {
+ $dbh = DB::connect();
+ $q = sprintf("INSERT INTO PackageGroups (PackageID, GroupID) VALUES (%d, %d)",
+ $pkgid,
+ $grpid
+ );
+ $dbh->exec($q);
+}