summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--support/schema/aur-schema.sql19
-rw-r--r--support/schema/dummy-data.sql.bz2bin687908 -> 782756 bytes
-rwxr-xr-xsupport/schema/gendummydata.py38
-rw-r--r--web/lib/aur.inc18
-rw-r--r--web/lib/pkgfuncs.inc102
5 files changed, 174 insertions, 3 deletions
diff --git a/support/schema/aur-schema.sql b/support/schema/aur-schema.sql
index dd023109..fde8b95e 100644
--- a/support/schema/aur-schema.sql
+++ b/support/schema/aur-schema.sql
@@ -108,7 +108,6 @@ CREATE TABLE Packages (
CategoryID TINYINT UNSIGNED NOT NULL,
Description CHAR(128) NOT NULL DEFAULT "An Arch Package",
URL CHAR(255) NOT NULL DEFAULT "http://www.archlinux.org",
- Source CHAR(255) NOT NULL DEFAULT "/dev/null",
LocationID TINYINT UNSIGNED NOT NULL,
NumVotes INTEGER UNSIGNED NOT NULL DEFAULT 0,
OutOfDate TINYINT UNSIGNED DEFAULT 0,
@@ -133,6 +132,24 @@ CREATE TABLE Packages (
);
+-- Track which dependencies a package has
+--
+CREATE TABLE PackageDepends (
+ PackageID INTEGER UNSIGNED NOT NULL,
+ DepPkgID INTEGER UNSIGNED NOT NULL,
+ INDEX (PackageID)
+);
+
+
+-- Track which sources a package has
+--
+CREATE TABLE PackageSources (
+ PackageID INTEGER UNSIGNED NOT NULL,
+ Source CHAR(255) NOT NULL DEFAULT "/dev/null",
+ INDEX (PackageID)
+);
+
+
-- Track votes for packages
--
CREATE TABLE PackageVotes (
diff --git a/support/schema/dummy-data.sql.bz2 b/support/schema/dummy-data.sql.bz2
index 6a502a01..7f34228f 100644
--- a/support/schema/dummy-data.sql.bz2
+++ b/support/schema/dummy-data.sql.bz2
Binary files differ
diff --git a/support/schema/gendummydata.py b/support/schema/gendummydata.py
index 917b569f..32e202db 100755
--- a/support/schema/gendummydata.py
+++ b/support/schema/gendummydata.py
@@ -20,6 +20,8 @@ MAX_DEVS = .1 # what percentage of MAX_USERS are Developers
MAX_TUS = .2 # what percentage of MAX_USERS are Trusted Users
MAX_PKGS = 2500 # how many packages to load
PKG_FILES = (8, 30) # min/max number of files in a package
+PKG_DEPS = (1, 5) # min/max depends a package has
+PKG_SRC = (1, 3) # min/max sources a package has
VOTING = (0, .30) # percentage range for package voting
RANDOM_PATHS = [ # random path locations for package files
"/usr/bin", "/usr/lib", "/etc", "/etc/rc.d", "/usr/share", "/lib",
@@ -27,6 +29,10 @@ RANDOM_PATHS = [ # random path locations for package files
"/usr/X11R6/lib", "/usr/libexec", "/usr/man/man1", "/usr/man/man3",
"/usr/man/man5", "/usr/X11R6/man/man1", "/etc/profile.d"
]
+RANDOM_TLDS = ["edu", "com", "org", "net", "tw", "ru", "pl", "de", "es"]
+RANDOM_URL = ["http://www.", "ftp://ftp.", "http://", "ftp://"]
+RANDOM_LOCS = ["pub", "release", "files", "downloads", "src"]
+
import random
import time
@@ -327,6 +333,38 @@ for p in track_votes.keys():
s = "UPDATE Packages SET NumVotes = %d WHERE ID = %d;\n" % (track_votes[p], p)
out.write(s)
+# Create package dependencies and sources
+#
+if DBUG: print "."; print "Creating statements for package depends/sources.",
+count = 0
+for p in seen_pkgs.keys():
+ num_deps = random.randrange(PKG_DEPS[0], PKG_DEPS[1])
+ this_deps = {}
+ i = 0
+ while i != num_deps:
+ dep = random.randrange(0, len(seen_pkgs))
+ if not this_deps.has_key(dep):
+ s = "INSERT INTO PackageDepends VALUES (%d, %d);\n" % (seen_pkgs[p], dep)
+ out.write(s)
+ i += 1
+
+ num_sources = random.randrange(PKG_SRC[0], PKG_SRC[1])
+ for i in range(num_sources):
+ src_file = user_keys[random.randrange(0, len(user_keys))]
+ src = "%s%s.%s/%s/%s-%s.tar.gz" % (
+ RANDOM_URL[random.randrange(0,len(RANDOM_URL))],
+ p, RANDOM_TLDS[random.randrange(0,len(RANDOM_TLDS))],
+ RANDOM_LOCS[random.randrange(0,len(RANDOM_LOCS))],
+ src_file, genVersion())
+ s = "INSERT INTO PackageSources VALUES (%d, '%s');\n" % (
+ seen_pkgs[p], src)
+ out.write(s)
+
+ if count % 100 == 0:
+ if DBUG: print ".",
+ count += 1
+
+
# close output file
#
out.write("\n")
diff --git a/web/lib/aur.inc b/web/lib/aur.inc
index f97a1312..bdec6435 100644
--- a/web/lib/aur.inc
+++ b/web/lib/aur.inc
@@ -140,6 +140,24 @@ function new_sid() {
}
+# obtain the username if given their Users.ID
+#
+function username_from_id($id="") {
+ if (!$id) {
+ return "";
+ }
+ $dbh = db_connect();
+ $q = "SELECT Username FROM Users WHERE ID = " . mysql_escape_string($id);
+ $result = db_query($q, $dbh);
+ if (!$result) {
+ return "None";
+ }
+ $row = mysql_fetch_row($result);
+
+ return $row[0];
+}
+
+
# obtain the username if given their current SID
#
function username_from_sid($sid="") {
diff --git a/web/lib/pkgfuncs.inc b/web/lib/pkgfuncs.inc
index 8894d3c3..0c2e868c 100644
--- a/web/lib/pkgfuncs.inc
+++ b/web/lib/pkgfuncs.inc
@@ -33,10 +33,51 @@ function pkgLocations() {
return $locs;
}
+# grab package dependencies
+#
+function package_dependencies($pkgid=0) {
+ $deps = array();
+ if ($pkgid) {
+ $dbh = db_connect();
+ $q = "SELECT DepPkgID, Name FROM PackageDepends, Packages ";
+ $q.= "WHERE PackageDepends.DepPkgID = Packages.ID ";
+ $q.= "AND PackageDepends.PackageID = ".mysql_escape_string($pkgid);
+ $q.= " ORDER BY Name";
+ $result = db_query($q, $dbh);
+ if (!$result) {return array();}
+ while ($row = mysql_fetch_row($result)) {
+ $deps[] = $row;
+ }
+ }
+ return $deps;
+}
+
+# grab package sources
+#
+function package_sources($pkgid=0) {
+ $sources = array();
+ if ($pkgid) {
+ $dbh = db_connect();
+ $q = "SELECT Source FROM PackageSources ";
+ $q.= "WHERE PackageID = ".mysql_escape_string($pkgid);
+ $q.= " ORDER BY Source";
+ $result = db_query($q, $dbh);
+ if (!$result) {return array();}
+ while ($row = mysql_fetch_row($result)) {
+ $sources[] = $row[0];
+ }
+ }
+ return $sources;
+}
+
# display package details
#
function package_details($id=0) {
- $q = "SELECT * FROM Packages WHERE ID = ".intval($_REQUEST["ID"]);
+ $q = "SELECT *,Location,Category ";
+ $q.= "FROM Packages,PackageLocations,PackageCategories ";
+ $q.= "WHERE Packages.LocationID = PackageLocations.ID ";
+ $q.= "AND Packages.CategoryID = PackageCategories.ID ";
+ $q.= "ANd Packages.ID = ".intval($_REQUEST["ID"]);
$dbh = db_connect();
$results = db_query($q, $dbh);
if (!$results) {
@@ -63,7 +104,64 @@ function package_details($id=0) {
print "<center>\n";
print "<table>\n";
print "<tr>\n";
- print " <td colspan='2'><span class='f2'>NAME</span></td>\n";
+ print " <td colspan='2'><span class='f2'>";
+ print $row["Name"] . "-" . $row["Version"]."</span></td>\n";
+ print "</tr>\n";
+ print "<tr>\n";
+ print " <td colspan='2'><span class='f3'>";
+ print "<a href='".$row["URL"]."'>".$row["URL"]."</a></span></td>\n";
+ print "</tr>\n";
+ print "<tr>\n";
+ print " <td colspan='2'><span class='f3'>".$row["Description"];
+ print "</a></span></td>\n";
+ print "</tr>\n";
+ print "<tr>\n";
+ print " <td colspan='2'><img src='/images/pad.gif' height='30'></td>";
+ print "</tr>\n";
+ print "<tr>\n";
+ print " <td colspan='2'><span class='f3'>";
+ print $row["Location"]." :: ".$row["Category"]."</span></td>";
+ print "</tr>\n";
+ print "<tr>\n";
+ print " <td colspan='2'><span class='f3'>".__("Maintainer").": ";
+ if (isset($row["AURMaintainerUID"])) {
+ $maintainer = username_from_id($row["AURMaintainerUID"]);
+ } elseif (isset($row["MaintainerUID"])) {
+ $maintainer = username_from_id($row["MaintainerUID"]);
+ } else {
+ $maintainer = "None";
+ }
+ print $maintainer . "</span></td>";
+ print "</tr>\n";
+ print "<tr>\n";
+ print " <td colspan='2'><img src='/images/pad.gif' height='30'></td>";
+ print "</tr>\n";
+ print "<tr>\n";
+ print " <td valign='top' style='padding-right: 10'>";
+ print "<table class='boxSoft' style='width: 200px'>";
+ print "<tr><td class='boxSoftTitle'><span class='f3'>";
+ print "Dependencies</span></td></tr>\n";
+ print "<tr><td class='boxSoft'>";
+ $deps = package_dependencies($row["ID"]); # $deps[0] = array('id','name');
+ while (list($k, $darr) = each($deps)) {
+ print $darr[0]." - ".$darr[1]."<br />\n";
+ }
+ print "</td></tr>\n";
+ print "</table></td>";
+
+ print " <td valign='top'>";
+ print "<table class='boxSoft' style='width: 200px'>";
+ print "<tr><td class='boxSoftTitle'><span class='f3'>";
+ print "Sources</span></td></tr>\n";
+ print "<tr><td class='boxSoft'>";
+ $sources = package_sources($row["ID"]); # $sources[0] = 'src';
+ while (list($k, $src) = each($sources)) {
+ # TODO left off here... URLify
+ print $src."<br />\n";
+ }
+ print "</td></tr>\n";
+ print "</table></td>";
+
print "</tr>\n";
print "</table>\n";