From b0902e36108b49e6bc88d6b251cc2f8cffcd5a13 Mon Sep 17 00:00:00 2001
From: Ricardo Ribalda <ricardo@ribalda.com>
Date: Sun, 5 Apr 2020 11:40:30 +0000
Subject: [PATCH] pseudo: On a DB fixup remove files that do not exist anymore

If the user decides to fix a database, remove the files that do not
exist anymore.
If only DB test is selected do not change the behaviour (return error).

Signed-off-by: Ricardo Ribalda <ricardo@ribalda.com>
Upstream-Status: Submitted [https://lists.openembedded.org/g/openembedded-core/message/137045]
---
 pseudo.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/pseudo.c b/pseudo.c
index 0f5850e..98e5b0c 100644
--- a/pseudo.c
+++ b/pseudo.c
@@ -1087,9 +1087,15 @@ pseudo_db_check(int fix) {
 			int fixup_needed = 0;
 			pseudo_debug(PDBGF_DB, "Checking <%s>\n", m->path);
 			if (lstat(m->path, &buf)) {
-				errors = EXIT_FAILURE;
-				pseudo_diag("can't stat <%s>\n", m->path);
-				continue;
+				if (!fix) {
+					pseudo_diag("can't stat <%s>\n", m->path);
+					errors = EXIT_FAILURE;
+					continue;
+				} else {
+					pseudo_debug(PDBGF_DB, "can't stat <%s>\n", m->path);
+					fixup_needed = 2;
+					goto do_fixup;
+				}
 			}
 			/* can't check for device type mismatches, uid/gid, or
 			 * permissions, because those are the very things we
@@ -1125,6 +1131,7 @@ pseudo_db_check(int fix) {
 					S_ISDIR(m->mode));
 				fixup_needed = 2;
 			}
+			do_fixup:
 			if (fixup_needed) {
 				/* in fixup mode, either delete (mismatches) or
 				 * correct (dev/ino).
-- 
2.21.1

