X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=zpm-script.c;h=7c03b241792ae1f91ea504215b1400526580c71b;hb=62f6ff407bc4f2cf03d1fa7cf3dc9a3f4026624a;hp=ceca239530873d7036c7549db8afa1cb0d6cd7dc;hpb=30aa9bfe1e9a0e682f7c942b8e68054551f14857;p=zpackage diff --git a/zpm-script.c b/zpm-script.c index ceca239..7c03b24 100644 --- a/zpm-script.c +++ b/zpm-script.c @@ -26,15 +26,16 @@ */ void usage(void) { - fprintf(stderr, "usage: db hash file\n"); + fprintf(stderr, "usage: zpm script ...\n"); } int setdir(char *rootdir) { + if (chdir(rootdir ? rootdir : "/") == -1) { + perror("can not chdir to rootdir"); + return 0; + } +#if 0 if (rootdir && strcmp(rootdir, "/")) { - if (chdir(rootdir) == -1) { - perror("can not chdir to rootdir"); - return 0; - } if (geteuid() == 0) { /* chroot is deprecated, and not in posix. need to use * OS/kernel specific code. @@ -43,12 +44,8 @@ int setdir(char *rootdir) { } else { fprintf(stderr, "unable to chroot as non root user\n"); } - } else { - if (chdir("/") == -1) { - perror("can not chdir to /"); - return 0; - } } +#endif return 1; } @@ -119,6 +116,12 @@ int run(char *program, char **args, char *output, int *status) { #define SOFT 1 #define HARD 2 +static int list_scripts(void *ud, const char *pkg, const char *stage, + const char *hash) { + printf("%s %s %.8s\n", pkg, stage, hash); + return 0; +} + int main(int ac, char **av){ struct zpm zpm; int rv; @@ -133,14 +136,14 @@ int main(int ac, char **av){ char *pkgid; char *rootdir = 0; - char *db = "/var/lib/zpm/zpm.db"; + char *db = "/var/lib/zpm/local.db"; char *script = "/var/tmp/zpm-script"; char *output = "/var/tmp/zpm-script.out"; char *phase = 0; + char *envvar = 0; int quiet = 0; int scriptishash = 0; int mode = RUN; - int all = 0; if (getenv("ZPMDB")) { db = getenv("ZPMDB"); @@ -149,6 +152,16 @@ int main(int ac, char **av){ rootdir = getenv("ZPM_ROOT_DIR"); + envvar = getenv("ZPM_SCRIPT_FILE"); + if (envvar) { + script = envvar; + } + + envvar = getenv("ZPM_SCRIPT_OUTPUT"); + if (envvar) { + output = envvar; + } + /* run, set, show, hash */ /* set -S, if -H set the hash, output hash, unless quiet * show: -o, or stdout, @@ -172,12 +185,11 @@ int main(int ac, char **av){ case 'l': mode = LIST; break; case 'R': rootdir = optarg; break; case 'F': required = 1; break; - case 'a': all = 1; break; case 'h': scriptishash = 1; break; case 'o': output = optarg; break; case 'S': script = optarg; break; - case 'q': quiet = 1; + case 'q': quiet = 1; break; default: usage(); @@ -248,10 +260,14 @@ int main(int ac, char **av){ fail = HARD; } } else if (mode == LIST) { - if (!zpm_script_hash(&zpm, pkgid, phase, hash)) { + if (!phase) { + zpm_foreach_script(&zpm, pkgid, phase, 0, list_scripts); + } else if (!zpm_script_hash(&zpm, pkgid, phase, hash)) { fail = SOFT; } else if (scriptishash) { - printf("%s\n", hash); + if (!quiet) { + printf("%s\n", hash); + } } else { if (!output) { output = "-"; @@ -300,6 +316,7 @@ int main(int ac, char **av){ if (!zpm_extract(&zpm, hash, script, 0700)) { fprintf(stderr, "unable to extract script"); fail = HARD; + zpm_note_add(&zpm, pkgid, NULL, hash, "unable to extract %s script", phase); goto cleanup; } @@ -307,6 +324,10 @@ int main(int ac, char **av){ if (rv) { fprintf(stderr, "package %s script failed with code %d\n", pkgid, rv); + + zpm_import(&zpm, output, 0, hash); + zpm_note_add(&zpm, pkgid, NULL, hash, "package %s script failed with code %d", phase, rv); + fail = HARD; } @@ -324,5 +345,4 @@ cleanup: zpm_close(&zpm); return (fail == HARD || (required && fail)) ? EXIT_FAILURE : 0; - }