Merge pull request #33408 from poettering/install-change-fix

install: some follow-up fixes to #33254
This commit is contained in:
Yu Watanabe 2024-06-22 16:24:47 +09:00 committed by GitHub
commit 5ab6845036
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -1810,7 +1810,8 @@ static int install_info_discover(
r = install_info_traverse(ctx, lp, info, flags, ret); r = install_info_traverse(ctx, lp, info, flags, ret);
if (r < 0) if (r < 0)
install_changes_add(changes, n_changes, r, name_or_path, NULL); return install_changes_add(changes, n_changes, r, name_or_path, NULL);
return r; return r;
} }
@ -1871,7 +1872,10 @@ int unit_file_verify_alias(
if (!p) if (!p)
p = endswith(dir, ".requires"); p = endswith(dir, ".requires");
if (!p) { if (!p) {
install_changes_add(changes, n_changes, -EXDEV, dst, NULL); r = install_changes_add(changes, n_changes, -EXDEV, dst, NULL);
if (r != -EXDEV)
return r;
return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), "Invalid path \"%s\" in alias.", dir); return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), "Invalid path \"%s\" in alias.", dir);
} }
@ -1879,7 +1883,9 @@ int unit_file_verify_alias(
UnitNameFlags type = unit_name_classify(dir); UnitNameFlags type = unit_name_classify(dir);
if (type < 0) { if (type < 0) {
install_changes_add(changes, n_changes, -EXDEV, dst, NULL); r = install_changes_add(changes, n_changes, -EXDEV, dst, NULL);
if (r != -EXDEV)
return r;
return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), return log_debug_errno(SYNTHETIC_ERRNO(EXDEV),
"Invalid unit name component \"%s\" in alias.", dir); "Invalid unit name component \"%s\" in alias.", dir);
} }
@ -1891,7 +1897,10 @@ int unit_file_verify_alias(
if (r < 0) if (r < 0)
return log_error_errno(r, "Failed to verify alias validity: %m"); return log_error_errno(r, "Failed to verify alias validity: %m");
if (r == 0) { if (r == 0) {
install_changes_add(changes, n_changes, -EXDEV, dst, info->name); r = install_changes_add(changes, n_changes, -EXDEV, dst, info->name);
if (r != -EXDEV)
return r;
return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), return log_debug_errno(SYNTHETIC_ERRNO(EXDEV),
"Invalid unit \"%s\" symlink \"%s\".", "Invalid unit \"%s\" symlink \"%s\".",
info->name, dst); info->name, dst);
@ -1905,7 +1914,9 @@ int unit_file_verify_alias(
UnitNameFlags type = unit_name_to_instance(info->name, &inst); UnitNameFlags type = unit_name_to_instance(info->name, &inst);
if (type < 0) { if (type < 0) {
install_changes_add(changes, n_changes, -EUCLEAN, info->name, NULL); r = install_changes_add(changes, n_changes, -EUCLEAN, info->name, NULL);
if (r != -EUCLEAN)
return r;
return log_debug_errno(type, "Failed to extract instance name from \"%s\": %m", info->name); return log_debug_errno(type, "Failed to extract instance name from \"%s\": %m", info->name);
} }
@ -2288,10 +2299,14 @@ static int install_context_mark_for_removal(
} }
} else if (r < 0) { } else if (r < 0) {
log_debug_errno(r, "Failed to find unit %s, removing name: %m", i->name); log_debug_errno(r, "Failed to find unit %s, removing name: %m", i->name);
install_changes_add(changes, n_changes, r, i->path ?: i->name, NULL); int k = install_changes_add(changes, n_changes, r, i->path ?: i->name, NULL);
if (k != r)
return k;
} else if (i->install_mode == INSTALL_MODE_MASKED) { } else if (i->install_mode == INSTALL_MODE_MASKED) {
log_debug("Unit file %s is masked, ignoring.", i->name); log_debug("Unit file %s is masked, ignoring.", i->name);
install_changes_add(changes, n_changes, INSTALL_CHANGE_IS_MASKED, i->path ?: i->name, NULL); r = install_changes_add(changes, n_changes, INSTALL_CHANGE_IS_MASKED, i->path ?: i->name, NULL);
if (r < 0)
return r;
continue; continue;
} else if (i->install_mode != INSTALL_MODE_REGULAR) { } else if (i->install_mode != INSTALL_MODE_REGULAR) {
log_debug("Unit %s has install mode %s, ignoring.", log_debug("Unit %s has install mode %s, ignoring.",
@ -2439,10 +2454,8 @@ int unit_file_unmask(
return -ENOMEM; return -ENOMEM;
if (!dry_run && unlink(path) < 0) { if (!dry_run && unlink(path) < 0) {
if (errno != ENOENT) { if (errno != ENOENT)
RET_GATHER(r, -errno); RET_GATHER(r, install_changes_add(changes, n_changes, -errno, path, NULL));
install_changes_add(changes, n_changes, -errno, path, NULL);
}
continue; continue;
} }