Fix duplicate records after --delete
Resolves: rzbz#2230127
This commit is contained in:
parent
502358945c
commit
dd0dbfb461
72
tar-1.35-revert-fix-savannah-bug-633567.patch
Normal file
72
tar-1.35-revert-fix-savannah-bug-633567.patch
Normal file
@ -0,0 +1,72 @@
|
||||
From d437ecf75de2d6fdeb2aed6f45c4b3b16373389b Mon Sep 17 00:00:00 2001
|
||||
From: Sergey Poznyakoff <gray@gnu.org>
|
||||
Date: Fri, 11 Aug 2023 21:35:30 +0300
|
||||
Subject: [PATCH] Revert "Fix savannah bug #63567"
|
||||
|
||||
Commit e89c7a45eb broke deletion from archives. The reported number
|
||||
of bytes read is rounded to the nearest record anyway, revert the
|
||||
commit and document the fact.
|
||||
|
||||
Reported by Ed Santiago. See
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=2230127
|
||||
|
||||
* doc/tar.texi: Document the fact that --totals rounds up the
|
||||
number of bytes reads to the nearest record.
|
||||
* src/buffer.c: Revert changes.
|
||||
* tests/delete06.at: Fix expected status code and stderr.
|
||||
---
|
||||
doc/tar.texi | 5 +++++
|
||||
src/buffer.c | 3 +--
|
||||
tests/delete06.at | 7 +++++--
|
||||
3 files changed, 11 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/doc/tar.texi b/doc/tar.texi
|
||||
index d43b39e4..ee631137 100644
|
||||
--- a/doc/tar.texi
|
||||
+++ b/doc/tar.texi
|
||||
@@ -4215,6 +4215,11 @@ Total bytes read: 7924664320 (7.4GiB, 95MiB/s)
|
||||
@end group
|
||||
@end smallexample
|
||||
|
||||
+Notice, that since @command{tar} operates on @dfn{records}, the number
|
||||
+of bytes reported can be rounded up to the nearest full record. This
|
||||
+can happen, in particular, when the last record in the archive is
|
||||
+partial. @xref{Blocking}.
|
||||
+
|
||||
Finally, when deleting from an archive, the @option{--totals} option
|
||||
displays both numbers plus number of bytes removed from the archive:
|
||||
|
||||
diff --git a/src/buffer.c b/src/buffer.c
|
||||
index 12a0579f..8a575f9a 100644
|
||||
--- a/src/buffer.c
|
||||
+++ b/src/buffer.c
|
||||
@@ -987,8 +987,7 @@ short_read (size_t status)
|
||||
}
|
||||
|
||||
record_end = record_start + (record_size - left) / BLOCKSIZE;
|
||||
- if (left == 0)
|
||||
- records_read++;
|
||||
+ records_read++;
|
||||
}
|
||||
|
||||
/* Flush the current buffer to/from the archive. */
|
||||
diff --git a/tests/delete06.at b/tests/delete06.at
|
||||
index 9668a28c..c84ba20e 100644
|
||||
--- a/tests/delete06.at
|
||||
+++ b/tests/delete06.at
|
||||
@@ -36,7 +36,10 @@ esac
|
||||
dd if=archive.tar of=trunc.tar bs=$size count=1 2>/dev/null
|
||||
tar --delete 'b/' -f trunc.tar
|
||||
],
|
||||
-[0],
|
||||
-[],[],[],[],[gnu, pax])
|
||||
+[2],
|
||||
+[],
|
||||
+[tar: lseek: trunc.tar: Value too large for defined data type
|
||||
+tar: Exiting with failure status due to previous errors
|
||||
+],[],[],[gnu, pax])
|
||||
|
||||
AT_CLEANUP
|
||||
--
|
||||
2.41.0
|
||||
|
6
tar.spec
6
tar.spec
@ -10,7 +10,7 @@ Summary: GNU file archiving program
|
||||
Name: tar
|
||||
Epoch: 2
|
||||
Version: 1.35
|
||||
Release: 1%{?dist}
|
||||
Release: 2%{?dist}
|
||||
License: GPL-3.0-or-later
|
||||
URL: https://www.gnu.org/software/tar/
|
||||
|
||||
@ -25,6 +25,7 @@ Patch4: tar-1.28-atime-rofs.patch
|
||||
Patch9: tar-1.28-document-exclude-mistakes.patch
|
||||
Patch10: tar-1.33-fix-capabilities-test.patch
|
||||
Patch11: tar-1.35-add-forgotten-tests-from-upstream.patch
|
||||
Patch12: tar-1.35-revert-fix-savannah-bug-633567.patch
|
||||
|
||||
BuildRequires: autoconf
|
||||
BuildRequires: automake
|
||||
@ -123,6 +124,9 @@ make check || (
|
||||
|
||||
|
||||
%changelog
|
||||
* Tue Aug 15 2023 Pavel Raiskup <praiskup@redhat.com> - 1.35-2
|
||||
- fix duplicated entries bug with --delete, rhbz#2230127
|
||||
|
||||
* Tue Jul 25 2023 Lukas Javorsky <ljavorsk@redhat.com> - 2:1.35-1
|
||||
- Rebase to version 1.35
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user