[aur-dev] [PATCH] Remove aurblup configuration file parser
canyonknight
canyonknight at gmail.com
Thu Feb 14 20:26:15 EST 2013
On Thu, Feb 14, 2013 at 7:02 PM, Lukas Fleischer
<archlinux at cryptocrack.de> wrote:
> Drop the (very bad) PHP parser and allow for passing all necessary
> configuration via command line parameters.
>
> Also, add a convenience wrapper written in PHP that parses the
> configuration file and subsequently calls aurblup with correct command
> line options.
>
> Signed-off-by: Lukas Fleischer <archlinux at cryptocrack.de>
> ---
> scripts/aurblup/aurblup-wrapper | 17 +++++++
> scripts/aurblup/aurblup.c | 108 +++++++++++++++-------------------------
> 2 files changed, 58 insertions(+), 67 deletions(-)
> create mode 100755 scripts/aurblup/aurblup-wrapper
>
> diff --git a/scripts/aurblup/aurblup-wrapper b/scripts/aurblup/aurblup-wrapper
> new file mode 100755
> index 0000000..b056030
> --- /dev/null
> +++ b/scripts/aurblup/aurblup-wrapper
> @@ -0,0 +1,17 @@
> +#!/usr/bin/php
> +<?php
> +$dir = $argv[1];
> +
> +if (empty($dir)) {
> + echo "Please specify AUR directory.\n";
> + exit;
> +}
> +
> +set_include_path(get_include_path() . PATH_SEPARATOR . "$dir/lib");
> +include("config.inc.php");
> +
> +exec($dir . "/../scripts/aurblup/aurblup " .
> + "-S /var/run/mysqld/mysqld.sock " .
> + "-u " . escapeshellarg(AUR_db_user) . " " .
> + "-p " . escapeshellarg(AUR_db_pass) . " " .
> + "-D " . escapeshellarg(AUR_db_name));
> diff --git a/scripts/aurblup/aurblup.c b/scripts/aurblup/aurblup.c
> index 3236554..be398f8 100644
> --- a/scripts/aurblup/aurblup.c
> +++ b/scripts/aurblup/aurblup.c
> @@ -5,6 +5,7 @@
> */
>
> #include <alpm.h>
> +#include <getopt.h>
> #include <mysql.h>
> #include <stdio.h>
> #include <string.h>
> @@ -22,15 +23,15 @@ static void blacklist_remove(const char *);
> static void blacklist_sync(alpm_list_t *, alpm_list_t *);
> static alpm_list_t *dblist_get_pkglist(alpm_list_t *);
> static alpm_list_t *dblist_create(void);
> -static void read_config(const char *);
> +static int parse_options(int, char **);
> static void init(void);
> static void cleanup(void);
>
> -static char *mysql_host = NULL;
> +static char *mysql_host = "localhost";
> static char *mysql_socket = NULL;
> -static char *mysql_user = NULL;
> -static char *mysql_passwd = NULL;
> -static char *mysql_db = NULL;
> +static char *mysql_user = "aur";
> +static char *mysql_passwd = "aur";
> +static char *mysql_db = "AUR";
>
> static MYSQL *c;
>
> @@ -208,65 +209,42 @@ dblist_create(void)
> return dblist;
> }
>
> -static void
> -read_config(const char *fn)
> +static int parse_options(int argc, char **argv)
> {
> - FILE *fp;
> - char line[128];
> - char **t, **u, *p, *q;
> -
> - if (!(fp = fopen(fn, "r")))
> - die("failed to open AUR config file (\"%s\")\n", fn);
> -
> - while (fgets(line, sizeof(line), fp)) {
> - u = NULL;
> - if (strstr(line, CONFIG_KEY_HOST)) {
> - t = &mysql_host;
> - u = &mysql_socket;
> - }
> - else if (strstr(line, CONFIG_KEY_USER))
> - t = &mysql_user;
> - else if (strstr(line, CONFIG_KEY_PASSWD))
> - t = &mysql_passwd;
> - else if (strstr(line, CONFIG_KEY_DB))
CONFIG_KEY_* can all be removed from config.h.proto
> - t = &mysql_db;
> - else
> - t = NULL;
> -
> - if (t) {
> - strtok(line, "\"");
> - strtok(NULL, "\"");
> - strtok(NULL, "\"");
> - p = strtok(NULL, "\"");
> -
> - if (u) {
> - p = strtok(p, ":");
> - q = strtok(NULL, ":");
> - }
> - else q = NULL;
> -
> - if (p && !*t) {
> - *t = malloc(strlen(p) + 1);
> - strncpy(*t, p, strlen(p) + 1);
> - }
> -
> - if (q && !*u) {
> - *u = malloc(strlen(q) + 1);
> - strncpy(*u, q, strlen(q) + 1);
> - }
> + int opt;
> +
> + static const struct option opts[] = {
> + { "mysql-host", required_argument, 0, 'h' },
> + { "mysql-socket", required_argument, 0, 'S' },
> + { "mysql-user", required_argument, 0, 'u' },
> + { "mysql-passwd", required_argument, 0, 'p' },
> + { "mysql-db", required_argument, 0, 'D' },
> + { 0, 0, 0, 0 }
> + };
> +
> + while((opt = getopt_long(argc, argv, "h:S:u:p:D:", opts, NULL)) != -1) {
> + switch(opt) {
> + case 'h':
> + mysql_host = optarg;
> + break;;
> + case 'S':
> + mysql_socket = optarg;
> + break;;
> + case 'u':
> + mysql_user = optarg;
> + break;;
> + case 'p':
> + mysql_passwd = optarg;
> + break;;
> + case 'D':
> + mysql_db = optarg;
> + break;;
> + default:
> + return 0;
> }
> }
>
> - fclose(fp);
> -
> - if (!mysql_host)
> - die("MySQL host setting not found in AUR config file\n");
> - if (!mysql_user)
> - die("MySQL user setting not found in AUR config file\n");
> - if (!mysql_passwd)
> - die("MySQL password setting not found in AUR config file\n");
> - if (!mysql_db)
> - die("MySQL database setting not found in AUR config file\n");
> + return 1;
> }
>
> static void
> @@ -288,12 +266,6 @@ init(void)
> static void
> cleanup(void)
> {
> - free(mysql_host);
> - free(mysql_socket);
> - free(mysql_user);
> - free(mysql_passwd);
> - free(mysql_db);
> -
> alpm_release(handle);
> mysql_close(c);
> mysql_library_end();
> @@ -303,7 +275,9 @@ int main(int argc, char *argv[])
> {
> alpm_list_t *pkgs_cur, *pkgs_new;
>
> - read_config(AUR_CONFIG);
AUR_CONFIG can also be removed from config.h.proto
> + if (!parse_options(argc, argv))
> + return 1;
> +
> init();
>
> pkgs_cur = blacklist_get_pkglist();
> --
> 1.8.1.3
>
More information about the aur-dev
mailing list