summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDan McGee <dan@archlinux.org>2011-08-10 00:01:13 +0200
committerLukas Fleischer <archlinux@cryptocrack.de>2011-08-10 14:34:07 +0200
commit9a79d2105e2dea9876883da65a00d245d475bed2 (patch)
tree3ae0b4d6e98d2b83b78df183929a8d6a386e96f1
parent1f79258e81207829c59f4a8fa4d44a32683e2a77 (diff)
downloadaur-9a79d2105e2dea9876883da65a00d245d475bed2.tar.gz
aur-9a79d2105e2dea9876883da65a00d245d475bed2.tar.xz
Segment the upload directory by package name prefix
This implements the following scheme: * /packages/cower/ --> /packages/co/cower/ * /packages/j/ --> /packages/j/j/ * /packages/zqy/ --> /packages/zq/zqy/ We take up to the first two characters of each package name as a intermediate subdirectory, and then the full package name lives underneath that. Shorter named packages live in a single letter directory. Why, you ask? Well because earlier today the AUR hit 32,000 entries in the unsupported/ directory, making new package uploads impossible. While some might argue we shouldn't have so many damn packages in the repos, we should be able to handle this case. Why two characters instead of one? Our two biggest two-char groups, 'pe' and 'py', both start with 'p', and have nearly 2000 packages each. Go Python and Perl. Still needed is a "move the existing data" script, as well as a set of rewrite rules for those wishing to preserve backward compatible URLs for any helper programs doing the wrong thing and relying on them. Signed-off-by: Dan McGee <dan@archlinux.org> Signed-off-by: Lukas Fleischer <archlinux@cryptocrack.de>
-rwxr-xr-xscripts/cleanup23
-rw-r--r--web/html/pkgsubmit.php7
-rw-r--r--web/lib/aurjson.class.php2
-rw-r--r--web/template/pkg_details.php2
4 files changed, 21 insertions, 13 deletions
diff --git a/scripts/cleanup b/scripts/cleanup
index f2873501..d3ba3f9e 100755
--- a/scripts/cleanup
+++ b/scripts/cleanup
@@ -22,16 +22,23 @@ include("pkgfuncs.inc.php");
$count = 0;
-$files = scandir(INCOMING_DIR);
-foreach ($files as $pkgname) {
- if ($pkgname == '.' || $pkgname == '..') {
+$buckets = scandir(INCOMING_DIR);
+foreach ($buckets as $bucket) {
+ $bucketpath = INCOMING_DIR . $bucket;
+ if ($bucket == '.' || $bucket == '..' || !is_dir($bucketpath)) {
continue;
}
- $fullpath = INCOMING_DIR . $pkgname;
- if (!package_exists($pkgname) && is_dir($fullpath)) {
- echo 'Removing ' . $fullpath . "\n";
- rm_tree($fullpath);
- $count++;
+ $files = scandir(INCOMING_DIR . $bucket);
+ foreach ($files as $pkgname) {
+ if ($pkgname == '.' || $pkgname == '..') {
+ continue;
+ }
+ $fullpath = INCOMING_DIR . $bucket . "/" . $pkgname;
+ if (!package_exists($pkgname) && is_dir($fullpath)) {
+ echo 'Removing ' . $fullpath . "\n";
+ rm_tree($fullpath);
+ $count++;
+ }
}
}
diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php
index 793f8ca8..d21e6ae3 100644
--- a/web/html/pkgsubmit.php
+++ b/web/html/pkgsubmit.php
@@ -256,7 +256,7 @@ if ($uid):
}
if (isset($pkg_name)) {
- $incoming_pkgdir = INCOMING_DIR . $pkg_name;
+ $incoming_pkgdir = INCOMING_DIR . substr($pkg_name, 0, 2) . "/" . $pkg_name;
}
if (!$error) {
@@ -268,7 +268,8 @@ if ($uid):
rm_tree($incoming_pkgdir);
}
- if (!@mkdir($incoming_pkgdir)) {
+ # The mode is masked by the current umask, so not as scary as it looks
+ if (!mkdir($incoming_pkgdir, 0777, true)) {
$error = __( "Could not create directory %s.", $incoming_pkgdir);
}
} else {
@@ -286,7 +287,7 @@ if ($uid):
}
if (!$error) {
- if (!@chdir($incoming_pkgdir)) {
+ if (!chdir($incoming_pkgdir)) {
$error = __("Could not change directory to %s.", $incoming_pkgdir);
}
diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php
index 5d15b890..277c824e 100644
--- a/web/lib/aurjson.class.php
+++ b/web/lib/aurjson.class.php
@@ -125,7 +125,7 @@ class AurJSON {
$search_data = array();
while ( $row = mysql_fetch_assoc($result) ) {
$name = $row['Name'];
- $row['URLPath'] = URL_DIR . $name . "/" . $name . ".tar.gz";
+ $row['URLPath'] = URL_DIR . substr($name, 0, 2) . "/" . $name . "/" . $name . ".tar.gz";
if ($type == 'info') {
$search_data = $row;
diff --git a/web/template/pkg_details.php b/web/template/pkg_details.php
index 06580639..52391232 100644
--- a/web/template/pkg_details.php
+++ b/web/template/pkg_details.php
@@ -90,7 +90,7 @@ $out_of_date_time = ($row["OutOfDateTS"] == 0) ? $msg : gmdate("r", intval($row[
<p><span class='f3'>
<?php
- $urlpath = URL_DIR . $row['Name'];
+ $urlpath = URL_DIR . substr($row['Name'], 0, 2) . "/" . $row['Name'];
print "<a href='$urlpath/" . $row['Name'] . ".tar.gz'>".__("Tarball")."</a> :: ";
print "<a href='$urlpath/PKGBUILD'>".__("PKGBUILD")."</a></span>";