summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Deutschmann <whissi@gentoo.org>2018-06-19 14:27:22 +0200
committerThomas Deutschmann <whissi@gentoo.org>2018-06-19 14:27:37 +0200
commite13b5d814ae6368708c659ae6ff578a51e479ca4 (patch)
tree7a1e1267c10bf566bce21057faeb5af99b254445 /app-arch/tar
parentx11-terms/xterm: Removed old. (diff)
downloadgentoo-e13b5d814ae6368708c659ae6ff578a51e479ca4.tar.gz
gentoo-e13b5d814ae6368708c659ae6ff578a51e479ca4.tar.bz2
gentoo-e13b5d814ae6368708c659ae6ff578a51e479ca4.zip
app-arch/tar: fix race in dirrem01 and dirrem02 test
Package-Manager: Portage-2.3.40, Repoman-2.3.9
Diffstat (limited to 'app-arch/tar')
-rw-r--r--app-arch/tar/files/tar-1.30-fix-test-117-and-118.patch89
-rw-r--r--app-arch/tar/tar-1.30.ebuild5
2 files changed, 93 insertions, 1 deletions
diff --git a/app-arch/tar/files/tar-1.30-fix-test-117-and-118.patch b/app-arch/tar/files/tar-1.30-fix-test-117-and-118.patch
new file mode 100644
index 000000000000..2f75da6cd247
--- /dev/null
+++ b/app-arch/tar/files/tar-1.30-fix-test-117-and-118.patch
@@ -0,0 +1,89 @@
+tests: fix race in dirrem01 and dirrem02
+
+Previously the '--checkpoint-action=echo' was triggered after
+'--checkpoint-action=sleep=1' - so the order of events *usually*
+was (for --format='gnu'):
+
+ ...
+ 1. checkpoint handler before write of 'dir/sub' member
+ 2. one-second delay
+ 3. stderr write: 'tar: Write checkpoint 3'
+ 4. write the member 'dir/sub' into the archive
+ 5. check that the member's ctime has not been changed
+ 6. genfile's detecting 'Write checkpoint', doing unlink
+ ...
+
+But sometimes, the genfile was fast enough to win the race and
+unlinked the directory before the member was written into the
+archive (IOW, the order was 1-2-3-6-4-5). This led to the
+occasional warning 'tar: dir/sub: file changed as we read it'.
+
+Swap the order of 'sleep=1' and 'echo' actions so the genfile
+utility has (hopefully) enough time to do the unlink before
+writing the file into the archive (enforce 1-2-3-6-4-5 order).
+
+* tests/dirrem01.at: Swap 'sleep=1' and 'echo' actions.
+* tests/dirrem02.at: Likewise.
+
+Origin: https://lists.gnu.org/archive/html/bug-tar/2018-01/msg00000.html
+---
+ tests/dirrem01.at | 5 +++--
+ tests/dirrem02.at | 7 ++++---
+ 2 files changed, 7 insertions(+), 5 deletions(-)
+
+diff --git a/tests/dirrem01.at b/tests/dirrem01.at
+index 40344dc..dabc206 100644
+--- a/tests/dirrem01.at
++++ b/tests/dirrem01.at
+@@ -47,14 +47,15 @@ gnu) CPT=3;;
+ esac
+
+ genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \
+- tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+- --checkpoint-action='echo' -c -f archive.tar \
++ tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='echo' \
++ --checkpoint-action='sleep=1' -c -f archive.tar \
+ --listed-incremental db -v dir >/dev/null
+ ],
+ [1],
+ [ignore],
+ [tar: dir: Directory is new
+ tar: dir/sub: Directory is new
++tar: dir/sub: file changed as we read it
+ tar: dir/sub: File removed before we read it
+ ],[],[],[gnu,posix])
+
+diff --git a/tests/dirrem02.at b/tests/dirrem02.at
+index e1cf9ef..924454f 100644
+--- a/tests/dirrem02.at
++++ b/tests/dirrem02.at
+@@ -20,7 +20,7 @@
+
+ # Description:
+ #
+-# When an explicitley named directory disappears during creation
++# When an explicitly named directory disappears during creation
+ # of incremental dump, tar should still exit with TAREXIT_FAILURE (2).
+ #
+ # For further details see dirrem01.at
+@@ -44,14 +44,15 @@ gnu) CPT=3;;
+ esac
+
+ genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \
+- tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='sleep=1' \
+- --checkpoint-action='echo' -c -f archive.tar \
++ tar --blocking-factor=1 --checkpoint=1 --checkpoint-action='echo' \
++ --checkpoint-action='sleep=1' -c -f archive.tar \
+ --listed-incremental db -v dir dir/sub >/dev/null
+ ],
+ [2],
+ [ignore],
+ [tar: dir: Directory is new
+ tar: dir/sub: Directory is new
++tar: dir/sub: file changed as we read it
+ tar: dir/sub: Cannot open: No such file or directory
+ tar: Exiting with failure status due to previous errors
+ ],[],[],[gnu,posix])
+--
+cgit v1.0-41-gc330
+
diff --git a/app-arch/tar/tar-1.30.ebuild b/app-arch/tar/tar-1.30.ebuild
index bf37c56a0758..d777e30c76c2 100644
--- a/app-arch/tar/tar-1.30.ebuild
+++ b/app-arch/tar/tar-1.30.ebuild
@@ -21,7 +21,10 @@ DEPEND="${RDEPEND}
nls? ( >=sys-devel/gettext-0.10.35 )
xattr? ( elibc_glibc? ( sys-apps/attr ) )"
-PATCHES=( "${FILESDIR}"/${P}-fix-test-92.patch )
+PATCHES=(
+ "${FILESDIR}"/${P}-fix-test-92.patch
+ "${FILESDIR}"/${P}-fix-test-117-and-118.patch
+)
src_prepare() {
default