blob: 95a49053e85f09b70277b05233e6ada53a95697a [file] [log] [blame]
Patrick Williams44b3caf2024-04-12 16:51:14 -05001From 4c5e6c280a2ab4d2009d3264e94286f5fe244d0b Mon Sep 17 00:00:00 2001
Andrew Geisslerd25ed322020-06-27 00:28:28 -05002From: Paul Eggleton <paul.eggleton@linux.microsoft.com>
3Date: Tue, 16 Jun 2020 03:57:25 +0000
4Subject: [PATCH] build.c: ignore return of 1 from tar -cf
5
6When running do_package_write_deb, we have trees of hardlinked files
7such as the dbg source files in ${PN}-dbg. If something makes another
8copy of one of those files (or deletes one), the number of links a file
9has changes and tar can notice this, e.g.:
10
11| DEBUG: Executing python function do_package_deb
12| dpkg-deb: building package `sed-ptest' in `/media/build1/poky/build/tmp/work/i586-poky-linux/sed/4.2.2-r0/deploy-debs/i586/sed-ptest_4.2.2-r0.3_i386.deb'.
13| tar: ./usr/lib/sed/ptest/testsuite/tst-regex2: file changed as we read it
14| dpkg-deb: error: subprocess tar -cf returned error exit status 1
15
16Tar returns an error of 1 when files 'change' and other errors codes
17in other error cases. We tweak dpkg-deb here so that it ignores an exit
18code of 1 from tar. The files don't really change (and we have locking in
19place to avoid that kind of issue).
20
21Upstream-Status: Inappropriate [OE specific]
22
23Original patch by RP 2015/3/27, rebased by Paul Eggleton
24
25Signed-off-by: Paul Eggleton <paul.eggleton@microsoft.com>
26---
Andrew Geissler9aee5002022-03-30 16:27:02 +000027 src/deb/build.c | 5 ++++-
Andrew Geisslerd25ed322020-06-27 00:28:28 -050028 1 file changed, 4 insertions(+), 1 deletion(-)
29
Andrew Geissler9aee5002022-03-30 16:27:02 +000030diff --git a/src/deb/build.c b/src/deb/build.c
Patrick Williams44b3caf2024-04-12 16:51:14 -050031index 92aba9553..6436b33da 100644
Andrew Geissler9aee5002022-03-30 16:27:02 +000032--- a/src/deb/build.c
33+++ b/src/deb/build.c
Patrick Williams44b3caf2024-04-12 16:51:14 -050034@@ -481,6 +481,7 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
Andrew Geisslerd25ed322020-06-27 00:28:28 -050035 {
36 int pipe_filenames[2], pipe_tarball[2];
37 pid_t pid_tar, pid_comp;
38+ int rc;
39
40 /* Fork off a tar. We will feed it a list of filenames on stdin later. */
41 m_pipe(pipe_filenames);
Patrick Williams44b3caf2024-04-12 16:51:14 -050042@@ -533,7 +534,9 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
Andrew Geisslerd25ed322020-06-27 00:28:28 -050043 /* All done, clean up wait for tar and <compress> to finish their job. */
44 close(pipe_filenames[1]);
45 subproc_reap(pid_comp, _("<compress> from tar -cf"), 0);
46- subproc_reap(pid_tar, "tar -cf", 0);
47+ rc = subproc_reap(pid_tar, "tar -cf", SUBPROC_RETERROR);
48+ if (rc && rc != 1)
49+ ohshite(_("subprocess %s returned error exit status %d"), "tar -cf", rc);
50 }
51
Andrew Geisslerd1e89492021-02-12 15:35:20 -060052 static intmax_t