[aur-dev] [PATCH 3/3] Segment the upload directory by package name prefix
Lukas Fleischer
archlinux at cryptocrack.de
Fri Jul 29 20:15:06 EDT 2011
On Thu, Jul 28, 2011 at 01:59:07PM -0500, Dan McGee wrote:
> This implements the following scheme:
>
> * /packages/cower/ --> /packages/co/cower/
> * /packages/j/ --> /packages/j/j/
> * /packages/zqy/ --> /packages/zq/y/
This should be fixed, as I mentioned before :)
>
> 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.
>
> 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 at archlinux.org>
> ---
> scripts/cleanup | 24 ++++++++++++++++--------
> web/html/pkgsubmit.php | 2 +-
> web/lib/aurjson.class.php | 2 +-
> web/template/pkg_details.php | 2 +-
> 4 files changed, 19 insertions(+), 11 deletions(-)
>
> diff --git a/scripts/cleanup b/scripts/cleanup
> index f287350..813d577 100755
> --- a/scripts/cleanup
> +++ b/scripts/cleanup
> @@ -22,16 +22,24 @@ 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;
> + echo $fullpath . "\n";
> + if (!package_exists($pkgname) && is_dir($fullpath)) {
> + echo 'Removing ' . $fullpath . "\n";
> + #rm_tree($fullpath);
Any reason you did comment this out here?
> + $count++;
> + }
> }
> }
>
> diff --git a/web/html/pkgsubmit.php b/web/html/pkgsubmit.php
> index fd51c7e..9637dcd 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;
This won't work. You need to patch the mkdir() invocation below and
enable "$recursive":
----
if (!@mkdir($incoming_pkgdir, 0777, true)) {
----
> }
>
> if (!$error) {
> diff --git a/web/lib/aurjson.class.php b/web/lib/aurjson.class.php
> index 5d15b89..277c824 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 0658063..5239123 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>";
>
> --
> 1.7.6
More information about the aur-dev
mailing list