*/
void usage(void) {
- fprintf(stderr, "usage: db hash file\n");
+ fprintf(stderr, "usage: zpm script ...\n");
}
int setdir(char *rootdir) {
#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;
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");
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,
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();
/* first non option arg is always a package id */
pkgstr = av[argn];
- pkgid = zpm_findpkg(&zpm, pkgstr);
+ pkgid = zpm_findpkg(&zpm, pkgstr, NULL);
if (!pkgid) {
fprintf(stderr, "no package for %s\n", pkgstr);
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 = "-";
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;
}
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;
}
zpm_close(&zpm);
return (fail == HARD || (required && fail)) ? EXIT_FAILURE : 0;
-
}