[aur-dev] [PATCH 1/2] Merge user ids in CommentNotify

Lukas Fleischer lfleischer at archlinux.org
Wed Jun 17 08:38:07 UTC 2015


On Wed, 17 Jun 2015 at 02:08:19, Marcel Korpel wrote:
> Fixes FS#27687.
> 
> Signed-off-by: Marcel Korpel <marcel.korpel at gmail.com>
> ---
>  web/lib/pkgbasefuncs.inc.php | 18 ++++++++++++++++++
>  1 file changed, 18 insertions(+)
> 
> diff --git a/web/lib/pkgbasefuncs.inc.php b/web/lib/pkgbasefuncs.inc.php
> index c8c99eb..e255cb4 100644
> --- a/web/lib/pkgbasefuncs.inc.php
> +++ b/web/lib/pkgbasefuncs.inc.php
> @@ -508,6 +508,24 @@ function pkgbase_delete ($base_ids, $merge_base_id, $via, $grant=false) {
>                 $q.= "WHERE PackageBaseID IN (" . implode(",", $base_ids) . ")";
>                 $dbh->exec($q);
>  
> +               /* Merge comment notifications */
> +               $q = "SELECT UserID FROM CommentNotify ";
> +               $q.= "WHERE PackageBaseID IN (" . implode(",", $base_ids) . ")";
> +               $result = $dbh->query($q);
> +
> +               while ($uid = $result->fetchColumn(0)) {
> +                       /* Check if a user already gets notifications from $merge_base_id */
> +                       $q = "SELECT COUNT(*) FROM CommentNotify WHERE ";
> +                       $q .= "UserID = $uid AND PackageBaseID = " . intval($merge_base_id);
> +
> +                       $result_notif = $dbh->query($q);
> +                       if ($result_notif->fetchColumn() == 0) {
> +                               $q = "INSERT INTO CommentNotify (PackageBaseID, UserID) VALUES (";
> +                               $q.= intval($merge_base_id) . ", $uid)";
> +                               $dbh->exec($q);
> +                       }
> +               }
> +

Looks good at a glance. Two things come into my mind, though:

1. We could greatly reduce the number of SQL queries by using an
   approach similar to what we do in the AUR blacklist updater. Fetch
   the lists of notified users for both packages, compute the set
   difference, then only insert the remaining users. This applies to
   many other parts of the AUR code base, too.

2. Since it won't make it into 4.0.0 anyway, might this be a good
   candidate for being ported to Python? All the package actions
   (disown, delete, merge) could be implemented in a Python script that
   returns an exit code and prints error messages to stderr. We could
   invoke that script from PHP code and fetch the exit status, as well
   as the error message quite easily. When that works fine, it would be
   easy to add a command to our SSH interface that even allows for
   performing package actions via the command line.

Opinions?

>                 /* Merge votes */
>                 foreach ($base_ids as $base_id) {
>                         $q = "UPDATE PackageVotes ";
> -- 
> 2.4.3


More information about the aur-dev mailing list