source = conf->src ? conf->src : conf->log;
+ if (mkleading) {
+ rv = create_leading_dirs(item->dest);
+ if (!rv) {
+ setsyserr(conf, "can't create leading dirs for %s", item->dest);
+ return failure;
+ }
+ }
+
if (unlink_file) {
rv = remove_existing(conf, item->dest);
} else if (rm_dir) {
return failure;
}
- if (mkleading) {
- rv = create_leading_dirs(item->dest);
- if (!rv) {
- setsyserr(conf, "can't create leading dirs for %s", item->dest);
- return failure;
- }
- }
-
errno = 0;
switch (item->ftype) {
case 'r': rv = zpm_extract(source, item->hash, item->dest, item->mode);
/* fix md */
return set_md(conf, &nitem);
}
- if (mdsame && !hashsame) {
- /* install */
- return install(conf, &nitem, 3);
- }
- if (!mdsame && !hashsame) {
- /* install */
- return install(conf, &nitem, 3);
+
+ if (!hashsame) {
+ /* doesn't matter on the md */
+ int flags = INS_MD | INS_CLD;
+ if (nitem.ftype == 'l') {
+ flags |= INS_UNLINK;
+ }
+ return install(conf, &nitem, flags);
}
}