blob: 49ef853ff2228b44c14984f5ac18dc028ab2a71c [file] [log] [blame]
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05001From e391bdba238d1371fc5b67cdae08b06eb5ada5c2 Mon Sep 17 00:00:00 2001
Patrick Williamsc124f4f2015-09-15 14:41:29 -05002From: Alexander Kanavin <alex.kanavin@gmail.com>
3Date: Wed, 26 Aug 2015 15:48:13 +0300
Patrick Williamsd8c66bc2016-06-20 12:57:21 -05004Subject: [PATCH] When running do_package_write_deb, we have trees of
Patrick Williamsc124f4f2015-09-15 14:41:29 -05005 hardlinked files such as the dbg source files in ${PN}-dbg. If something
6 makes another copy of one of those files (or deletes one), the number of
7 links a file has changes and tar can notice this, e.g.:
8
9| DEBUG: Executing python function do_package_deb
10| 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'.
11| tar: ./usr/lib/sed/ptest/testsuite/tst-regex2: file changed as we read it
12| dpkg-deb: error: subprocess tar -cf returned error exit status 1
13
14Tar returns an error of 1 when files 'change' and other errors codes
15in other error cases. We tweak dpkg-deb here so that it ignores an exit
16code of 1 from tar. The files don't really change (and we have locking in
17place to avoid that kind of issue).
18
19Upstream-Status: Inappropriate
20RP 2015/3/27
21---
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050022 dpkg-deb/build.c | 12 ++++++++----
23 1 file changed, 8 insertions(+), 4 deletions(-)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050024
25diff --git a/dpkg-deb/build.c b/dpkg-deb/build.c
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050026index 2ddeec6..af363f0 100644
Patrick Williamsc124f4f2015-09-15 14:41:29 -050027--- a/dpkg-deb/build.c
28+++ b/dpkg-deb/build.c
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050029@@ -452,7 +452,7 @@ static void
30 tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
31 struct compress_params *tar_compress_params, int fd_out)
32 {
33- int pipe_filenames[2], pipe_tarball[2];
34+ int pipe_filenames[2], pipe_tarball[2], rc;
35 pid_t pid_tar, pid_comp;
36
37 /* Fork off a tar. We will feed it a list of filenames on stdin later. */
38@@ -493,7 +493,9 @@ tarball_pack(const char *dir, filenames_feed_func *tar_filenames_feeder,
39 /* All done, clean up wait for tar and <compress> to finish their job. */
40 close(pipe_filenames[1]);
41 subproc_reap(pid_comp, _("<compress> from tar -cf"), 0);
42- subproc_reap(pid_tar, "tar -cf", 0);
43+ rc = subproc_reap(pid_tar, "tar -cf", SUBPROC_RETERROR);
44+ if (rc && rc != 1)
45+ ohshite(_("subprocess %s returned error exit status %d"), "tar -cf", rc);
46 }
47
48 /**
49@@ -509,7 +511,7 @@ do_build(const char *const *argv)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050050 char *debar;
51 char *tfbuf;
52 int arfd;
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050053- int p1[2], gzfd;
54+ int p1[2], gzfd, rc;
Patrick Williamsc124f4f2015-09-15 14:41:29 -050055 pid_t c1, c2;
56
57 /* Decode our arguments. */
Patrick Williamsd8c66bc2016-06-20 12:57:21 -050058@@ -590,7 +592,9 @@ do_build(const char *const *argv)
Patrick Williamsc124f4f2015-09-15 14:41:29 -050059 }
60 close(p1[0]);
61 subproc_reap(c2, _("<compress> from tar -cf"), 0);
62- subproc_reap(c1, "tar -cf", 0);
63+ rc = subproc_reap(c1, "tar -cf", SUBPROC_RETERROR);
64+ if (rc && rc != 1)
65+ ohshite(_("subprocess %s returned error exit status %d"), "tar -cf", rc);
66
67 if (lseek(gzfd, 0, SEEK_SET))
68 ohshite(_("failed to rewind temporary file (%s)"), _("control member"));
Patrick Williamsc124f4f2015-09-15 14:41:29 -050069--
Patrick Williamsd8c66bc2016-06-20 12:57:21 -0500702.7.0
Patrick Williamsc124f4f2015-09-15 14:41:29 -050071