Diff of the two buildlogs: -- --- b1/build.log 2025-08-01 07:32:01.788821190 +0000 +++ b2/build.log 2025-08-01 07:34:42.669029084 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Thu Sep 3 01:52:49 -12 2026 -I: pbuilder-time-stamp: 1788443569 +I: Current time: Fri Aug 1 21:32:04 +14 2025 +I: pbuilder-time-stamp: 1754033524 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/trixie-reproducible-base.tgz] I: copying local configuration @@ -30,52 +30,84 @@ dpkg-source: info: applying tar-1.35-revert-fix-savannah-bug-633567.patch I: Not using root during the build. I: Installing the build-deps -I: user script /srv/workspace/pbuilder/1898174/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/1907254/tmp/hooks/D01_modify_environment starting +debug: Running on codethink04-arm64. +I: Changing host+domainname to test build reproducibility +I: Adding a custom variable just for the fun of it... +I: Changing /bin/sh to bash +'/bin/sh' -> '/bin/bash' +lrwxrwxrwx 1 root root 9 Aug 1 07:32 /bin/sh -> /bin/bash +I: Setting pbuilder2's login shell to /bin/bash +I: Setting pbuilder2's GECOS to second user,second room,second work-phone,second home-phone,second other +I: user script /srv/workspace/pbuilder/1907254/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/1907254/tmp/hooks/D02_print_environment starting I: set - BUILDDIR='/build/reproducible-path' - BUILDUSERGECOS='first user,first room,first work-phone,first home-phone,first other' - BUILDUSERNAME='pbuilder1' - BUILD_ARCH='arm64' - DEBIAN_FRONTEND='noninteractive' + BASH=/bin/sh + BASHOPTS=checkwinsize:cmdhist:complete_fullquote:extquote:force_fignore:globasciiranges:globskipdots:hostcomplete:interactive_comments:patsub_replacement:progcomp:promptvars:sourcepath + BASH_ALIASES=() + BASH_ARGC=() + BASH_ARGV=() + BASH_CMDS=() + BASH_LINENO=([0]="12" [1]="0") + BASH_LOADABLES_PATH=/usr/local/lib/bash:/usr/lib/bash:/opt/local/lib/bash:/usr/pkg/lib/bash:/opt/pkg/lib/bash:. + BASH_SOURCE=([0]="/tmp/hooks/D02_print_environment" [1]="/tmp/hooks/D02_print_environment") + BASH_VERSINFO=([0]="5" [1]="2" [2]="37" [3]="1" [4]="release" [5]="aarch64-unknown-linux-gnu") + BASH_VERSION='5.2.37(1)-release' + BUILDDIR=/build/reproducible-path + BUILDUSERGECOS='second user,second room,second work-phone,second home-phone,second other' + BUILDUSERNAME=pbuilder2 + BUILD_ARCH=arm64 + DEBIAN_FRONTEND=noninteractive DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=12 ' - DISTRIBUTION='trixie' - HOME='/root' - HOST_ARCH='arm64' + DIRSTACK=() + DISTRIBUTION=trixie + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=aarch64 + HOST_ARCH=arm64 IFS=' ' - INVOCATION_ID='5c9d4f1ce27045e8afe42532f31b4322' - LANG='C' - LANGUAGE='en_US:en' - LC_ALL='C' - MAIL='/var/mail/root' - OPTIND='1' - PATH='/usr/sbin:/usr/bin:/sbin:/bin:/usr/games' - PBCURRENTCOMMANDLINEOPERATION='build' - PBUILDER_OPERATION='build' - PBUILDER_PKGDATADIR='/usr/share/pbuilder' - PBUILDER_PKGLIBDIR='/usr/lib/pbuilder' - PBUILDER_SYSCONFDIR='/etc' - PPID='1898174' - PS1='# ' - PS2='> ' + INVOCATION_ID=d1409243aa7c4f32bbbf9f9369244482 + LANG=C + LANGUAGE=nl_BE:nl + LC_ALL=C + MACHTYPE=aarch64-unknown-linux-gnu + MAIL=/var/mail/root + OPTERR=1 + OPTIND=1 + OSTYPE=linux-gnu + PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path + PBCURRENTCOMMANDLINEOPERATION=build + PBUILDER_OPERATION=build + PBUILDER_PKGDATADIR=/usr/share/pbuilder + PBUILDER_PKGLIBDIR=/usr/lib/pbuilder + PBUILDER_SYSCONFDIR=/etc + PIPESTATUS=([0]="0") + POSIXLY_CORRECT=y + PPID=1907254 PS4='+ ' - PWD='/' - SHELL='/bin/bash' - SHLVL='2' - SUDO_COMMAND='/usr/bin/timeout -k 18.1h 18h /usr/bin/ionice -c 3 /usr/bin/nice /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.AvNcELBX/pbuilderrc_r69D --distribution trixie --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.AvNcELBX/b1 --logfile b1/build.log tar_1.35+dfsg-3.1.dsc' - SUDO_GID='109' - SUDO_UID='104' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://192.168.101.4:3128' + PWD=/ + SHELL=/bin/bash + SHELLOPTS=braceexpand:errexit:hashall:interactive-comments:posix + SHLVL=3 + SUDO_COMMAND='/usr/bin/timeout -k 24.1h 24h /usr/bin/ionice -c 3 /usr/bin/nice -n 11 /usr/bin/unshare --uts -- /usr/sbin/pbuilder --build --configfile /srv/reproducible-results/rbuild-debian/r-b-build.AvNcELBX/pbuilderrc_IdIN --distribution trixie --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/trixie-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.AvNcELBX/b2 --logfile b2/build.log tar_1.35+dfsg-3.1.dsc' + SUDO_GID=109 + SUDO_UID=104 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://192.168.101.4:3128 I: uname -a - Linux codethink03-arm64 6.1.0-37-cloud-arm64 #1 SMP Debian 6.1.140-1 (2025-05-22) aarch64 GNU/Linux + Linux i-capture-the-hostname 6.1.0-37-cloud-arm64 #1 SMP Debian 6.1.140-1 (2025-05-22) aarch64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 May 12 2025 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/1898174/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 May 12 19:25 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/1907254/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -166,7 +198,7 @@ Get: 37 http://deb.debian.org/debian trixie/main arm64 libpcre2-dev arm64 10.45-1 [749 kB] Get: 38 http://deb.debian.org/debian trixie/main arm64 libsepol-dev arm64 3.8.1-1 [356 kB] Get: 39 http://deb.debian.org/debian trixie/main arm64 libselinux1-dev arm64 3.8.1-1 [172 kB] -Fetched 14.1 MB in 0s (83.2 MB/s) +Fetched 14.1 MB in 0s (85.3 MB/s) Preconfiguring packages ... Selecting previously unselected package sensible-utils. (Reading database ... (Reading database ... 5% (Reading database ... 10% (Reading database ... 15% (Reading database ... 20% (Reading database ... 25% (Reading database ... 30% (Reading database ... 35% (Reading database ... 40% (Reading database ... 45% (Reading database ... 50% (Reading database ... 55% (Reading database ... 60% (Reading database ... 65% (Reading database ... 70% (Reading database ... 75% (Reading database ... 80% (Reading database ... 85% (Reading database ... 90% (Reading database ... 95% (Reading database ... 100% (Reading database ... 19965 files and directories currently installed.) @@ -338,7 +370,11 @@ Building tag database... -> Finished parsing the build-deps I: Building the package -I: Running cd /build/reproducible-path/tar-1.35+dfsg/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" HOME="/nonexistent/first-build" dpkg-genchanges -S > ../tar_1.35+dfsg-3.1_source.changes +I: user script /srv/workspace/pbuilder/1907254/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for trixie +I: user script /srv/workspace/pbuilder/1907254/tmp/hooks/A99_set_merged_usr finished +hostname: Name or service not known +I: Running cd /build/reproducible-path/tar-1.35+dfsg/ && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-buildpackage -us -uc -b && env PATH="/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/i/capture/the/path" HOME="/nonexistent/second-build" dpkg-genchanges -S > ../tar_1.35+dfsg-3.1_source.changes dpkg-buildpackage: info: source package tar dpkg-buildpackage: info: source version 1.35+dfsg-3.1 dpkg-buildpackage: info: source distribution unstable @@ -378,8 +414,8 @@ checking whether make sets $(MAKE)... yes checking whether make supports nested variables... yes checking xargs -n works... yes -checking whether UID '1111' is supported by ustar format... yes -checking whether GID '1111' is supported by ustar format... yes +checking whether UID '2222' is supported by ustar format... yes +checking whether GID '2222' is supported by ustar format... yes checking how to create a ustar tar archive... gnutar checking for gcc... gcc checking whether the C compiler works... yes @@ -1124,6 +1160,8 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./dirent.in.h > dirent.h-t +mv alloca.h-t alloca.h +mv ctype.h-t ctype.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_ERROR_H''@|1|g' \ @@ -1135,6 +1173,7 @@ -e 's|@''REPLACE_ERROR_AT_LINE''@|0|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r ./c++defs.h' \ ./error.in.h > error.h-t +mv configmake.h-t configmake.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ @@ -1158,7 +1197,6 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./fcntl.in.h > fcntl.h-t -mv alloca.h-t alloca.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_GETOPT_H''@|1|g' \ @@ -1168,21 +1206,19 @@ -e 's|@''NEXT_GETOPT_H''@||g' \ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ ./getopt.in.h > getopt.h-t -mv configmake.h-t configmake.h -mv ctype.h-t ctype.h +mv error.h-t error.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''HAVE_SYS_CDEFS_H''@|1|g' \ ./getopt-cdefs.in.h > getopt-cdefs.h-t +mv dirent.h-t dirent.h +mv fcntl.h-t fcntl.h +mv getopt.h-t getopt.h +mv getopt-cdefs.h-t getopt-cdefs.h /usr/bin/mkdir -p 'malloc' -mv error.h-t error.h /usr/bin/mkdir -p 'malloc' -mv getopt.h-t getopt.h -mv fcntl.h-t fcntl.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e '/libc_hidden_proto/d' \ ./malloc/dynarray.h > malloc/dynarray.gl.h-t -mv getopt-cdefs.h-t getopt-cdefs.h -mv dirent.h-t dirent.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|||g' \ -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \ @@ -1221,7 +1257,14 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./inttypes.in.h > inttypes.h-t +sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ + -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \ + -e 's|__glibc_likely|_GL_LIKELY|g' \ + -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ + -e '/libc_hidden_proto/d' \ + ./malloc/scratch_buffer.h > malloc/scratch_buffer.gl.h-t mv malloc/dynarray.gl.h-t malloc/dynarray.gl.h +mv malloc/dynarray-skeleton.gl.h-t malloc/dynarray-skeleton.gl.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_LANGINFO_H''@|1|g' \ @@ -1240,13 +1283,9 @@ -e '/definitions of _GL_FUNCDECL_RPL/r ./c++defs.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./langinfo.in.h > langinfo.h-t -mv malloc/dynarray-skeleton.gl.h-t malloc/dynarray-skeleton.gl.h -sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ - -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \ - -e 's|__glibc_likely|_GL_LIKELY|g' \ - -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ - -e '/libc_hidden_proto/d' \ - ./malloc/scratch_buffer.h > malloc/scratch_buffer.gl.h-t +mv inttypes.h-t inttypes.h +mv malloc/scratch_buffer.gl.h-t malloc/scratch_buffer.gl.h +mv langinfo.h-t langinfo.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ @@ -1254,9 +1293,6 @@ -e 's|@''PRAGMA_COLUMNS''@||g' \ -e 's|@''NEXT_LIMITS_H''@||g' \ ./limits.in.h > limits.h-t -mv inttypes.h-t inttypes.h -mv langinfo.h-t langinfo.h -mv malloc/scratch_buffer.gl.h-t malloc/scratch_buffer.gl.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ @@ -1283,9 +1319,19 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./locale.in.h > locale.h-t +mv limits.h-t limits.h +mv locale.h-t locale.h /usr/bin/mkdir -p 'selinux' sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_SELINUX_SELINUX_H''@/1/g' \ + -e 's|@''INCLUDE_NEXT''@|include_next|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SELINUX_SELINUX_H''@||g' \ + ./se-selinux.in.h > selinux/selinux.h-t +sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ + -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ -e 's|@''PRAGMA_COLUMNS''@||g' \ @@ -1310,15 +1356,7 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./signal.in.h > signal.h-t -mv limits.h-t limits.h -sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ - -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's/@''HAVE_SELINUX_SELINUX_H''@/1/g' \ - -e 's|@''INCLUDE_NEXT''@|include_next|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ - -e 's|@''PRAGMA_COLUMNS''@||g' \ - -e 's|@''NEXT_SELINUX_SELINUX_H''@||g' \ - ./se-selinux.in.h > selinux/selinux.h-t +mv selinux/selinux.h-t selinux/selinux.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ @@ -1453,6 +1491,8 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ > stdio.h-t +mv signal.h-t signal.h +mv stddef.h-t stddef.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ @@ -1600,7 +1640,6 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ > stdlib.h-t -mv locale.h-t locale.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ @@ -1702,9 +1741,7 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ > string.h-t -mv selinux/selinux.h-t selinux/selinux.h -mv signal.h-t signal.h -mv stddef.h-t stddef.h +mv stdio.h-t stdio.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_STRINGS_H''@|1|g' \ @@ -1720,8 +1757,9 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./strings.in.h > strings.h-t -/usr/bin/mkdir -p 'sys' -mv stdio.h-t stdio.h +mv stdlib.h-t stdlib.h +mv string.h-t string.h +mv strings.h-t strings.h /usr/bin/mkdir -p 'sys' sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ @@ -1738,7 +1776,7 @@ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./sys_random.in.h > sys/random.h-t /usr/bin/mkdir -p 'sys' -mv string.h-t string.h +mv sys/random.h-t sys/random.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ @@ -1796,13 +1834,40 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./sys_stat.in.h > sys/stat.h-t -mv stdlib.h-t stdlib.h +/usr/bin/mkdir -p 'sys' +sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ + -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's/@''HAVE_SYS_TIME_H''@/1/g' \ + -e 's|@''INCLUDE_NEXT''@|include_next|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SYS_TIME_H''@||g' \ + -e 's/@''GNULIB_GETTIMEOFDAY''@/1/g' \ + -e 's|@''HAVE_WINSOCK2_H''@|0|g' \ + -e 's/@''HAVE_GETTIMEOFDAY''@/1/g' \ + -e 's/@''HAVE_STRUCT_TIMEVAL''@/1/g' \ + -e 's/@''REPLACE_GETTIMEOFDAY''@/0/g' \ + -e 's/@''REPLACE_STRUCT_TIMEVAL''@/0/g' \ + -e '/definitions of _GL_FUNCDECL_RPL/r ./c++defs.h' \ + -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ + -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ + ./sys_time.in.h > sys/time.h-t +mv sys/stat.h-t sys/stat.h /usr/bin/mkdir -p 'sys' sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ -e 's|@''PRAGMA_COLUMNS''@||g' \ + -e 's|@''NEXT_SYS_TYPES_H''@||g' \ + -e 's|@''WINDOWS_64_BIT_OFF_T''@|0|g' \ + -e 's|@''WINDOWS_STAT_INODES''@|0|g' \ + ./sys_types.in.h > sys/types.h-t +sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ + -e 's|@''GUARD_PREFIX''@|GL|g' \ + -e 's|@''INCLUDE_NEXT''@|include_next|g' \ + -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ + -e 's|@''PRAGMA_COLUMNS''@||g' \ -e 's|@''NEXT_TIME_H''@||g' \ -e 's/@''GNULIB_CTIME''@/0/g' \ -e 's/@''GNULIB_LOCALTIME''@/0/g' \ @@ -1845,34 +1910,9 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./time.in.h > time.h-t -mv strings.h-t strings.h -mv sys/random.h-t sys/random.h -sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ - -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's/@''HAVE_SYS_TIME_H''@/1/g' \ - -e 's|@''INCLUDE_NEXT''@|include_next|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ - -e 's|@''PRAGMA_COLUMNS''@||g' \ - -e 's|@''NEXT_SYS_TIME_H''@||g' \ - -e 's/@''GNULIB_GETTIMEOFDAY''@/1/g' \ - -e 's|@''HAVE_WINSOCK2_H''@|0|g' \ - -e 's/@''HAVE_GETTIMEOFDAY''@/1/g' \ - -e 's/@''HAVE_STRUCT_TIMEVAL''@/1/g' \ - -e 's/@''REPLACE_GETTIMEOFDAY''@/0/g' \ - -e 's/@''REPLACE_STRUCT_TIMEVAL''@/0/g' \ - -e '/definitions of _GL_FUNCDECL_RPL/r ./c++defs.h' \ - -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ - -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ - ./sys_time.in.h > sys/time.h-t -sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ - -e 's|@''GUARD_PREFIX''@|GL|g' \ - -e 's|@''INCLUDE_NEXT''@|include_next|g' \ - -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ - -e 's|@''PRAGMA_COLUMNS''@||g' \ - -e 's|@''NEXT_SYS_TYPES_H''@||g' \ - -e 's|@''WINDOWS_64_BIT_OFF_T''@|0|g' \ - -e 's|@''WINDOWS_STAT_INODES''@|0|g' \ - ./sys_types.in.h > sys/types.h-t +mv sys/time.h-t sys/time.h +mv sys/types.h-t sys/types.h +mv time.h-t time.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_UCHAR_H''@/1/g' \ @@ -2068,13 +2108,9 @@ -e 's/@''GNULIB_UNINORM_NFKD_DLL_VARIABLE''@/LIBUNISTRING_DLL_VARIABLE/g' \ -e 's/@''GNULIB_UNINORM_NFKC_DLL_VARIABLE''@/LIBUNISTRING_DLL_VARIABLE/g' \ ./uninorm.in.h > uninorm.h-t -mv sys/time.h-t sys/time.h -mv sys/stat.h-t sys/stat.h -mv time.h-t time.h -mv sys/types.h-t sys/types.h +mv uchar.h-t uchar.h mv unicase.h-t unicase.h mv uninorm.h-t uninorm.h -mv uchar.h-t uchar.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|1|g' \ @@ -2272,9 +2308,11 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ > unistd.h-t +mv unictype.h-t unictype.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G -n -e 'w unitypes.h-t' ./unitypes.in.h -sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G -n -e 'w uniwidth.h-t' ./uniwidth.in.h mv unitypes.h-t unitypes.h +sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G -n -e 'w uniwidth.h-t' ./uniwidth.in.h +mv uniwidth.h-t uniwidth.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_UTIME_H''@/1/g' \ @@ -2290,7 +2328,8 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./utime.in.h > utime.h-t -mv uniwidth.h-t uniwidth.h +mv unistd.h-t unistd.h +mv utime.h-t utime.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ @@ -2414,7 +2453,6 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ > wchar.h-t -mv utime.h-t utime.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_WCTYPE_H''@/1/g' \ @@ -2444,10 +2482,8 @@ -e '/definitions of _GL_FUNCDECL_RPL/r ./c++defs.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./wctype.in.h > wctype.h-t -mv wctype.h-t wctype.h -mv unictype.h-t unictype.h mv wchar.h-t wchar.h -mv unistd.h-t unistd.h +mv wctype.h-t wctype.h make all-recursive make[4]: Entering directory '/build/reproducible-path/tar-1.35+dfsg/gnu' make[5]: Entering directory '/build/reproducible-path/tar-1.35+dfsg/gnu' @@ -2751,9 +2787,9 @@ make[4]: Leaving directory '/build/reproducible-path/tar-1.35+dfsg/tests' make check-local make[4]: Entering directory '/build/reproducible-path/tar-1.35+dfsg/tests' -/bin/bash '/build/reproducible-path/tar-1.35+dfsg/build-aux/missing' autom4te --language=autotest -I . testsuite.at -o testsuite.tmp +/bin/sh '/build/reproducible-path/tar-1.35+dfsg/build-aux/missing' autom4te --language=autotest -I . testsuite.at -o testsuite.tmp mv testsuite.tmp testsuite -/bin/bash ./testsuite -j12 --verbose +/bin/sh ./testsuite -j12 --verbose ## ------------------------ ## ## GNU tar 1.35 test suite. ## ## ------------------------ ## @@ -2768,41 +2804,34 @@ + 1. version.at:19: testing tar version ... ./version.at:21: tar --version | sed 1q +8. opcomp03.at:21: testing --verify compatibility ... +./opcomp03.at:24: +tar -tWf test.tar . + +5. options03.at:21: testing TAR_OPTIONS with string arguments ... +./options03.at:31: +echo dir/bar > exclude.list +mkdir dir +genfile --file=dir/foo +genfile --file=dir/bar +TAR_OPTIONS=--exclude-from=exclude.list tar cf arc.tar dir +tar tf arc.tar + +7. opcomp02.at:21: testing occurrence compatibility ... +./opcomp02.at:24: +tar --occurrence=1 -tf test.tar 6. opcomp01.at:21: testing occurrence compatibility ... ./opcomp01.at:24: tar --occurrence=1 -cf test.tar . -2. pipe.at:29: testing decompressing from stdin ... -./pipe.at:33: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -mkdir directory -genfile --length 10240 --pattern zeros --file directory/file1 -genfile --length 13 --file directory/file2 -tar cf archive directory -mv directory orig -cat archive | tar xfv - --warning=no-timestamp | sort -echo "separator" -cmp orig/file1 directory/file1 -echo "separator" -cmp orig/file2 directory/file2) -4. options02.at:26: testing interspersed options ... -./options02.at:29: +3. options.at:24: testing mixing options ... +./options.at:27: echo > file1 -tar c file1 -f archive +TAR_OPTIONS=--numeric-owner tar chof archive file1 tar tf archive 9. opcomp04.at:21: testing compress option compatibility ... @@ -2815,9 +2844,12 @@ genfile --file newfile tar rzf test.tar newfile -8. opcomp03.at:21: testing --verify compatibility ... -./opcomp03.at:24: -tar -tWf test.tar . +7. opcomp02.at:21: ok +4. options02.at:26: testing interspersed options ... +./options02.at:29: +echo > file1 +tar c file1 -f archive +tar tf archive 12. defaults.at:16: testing checkpoint defaults ... ./defaults.at:18: @@ -2833,32 +2865,7 @@ tar --checkpoint -c -f ../a.tar . -5. options03.at:21: testing TAR_OPTIONS with string arguments ... -./options03.at:31: -echo dir/bar > exclude.list -mkdir dir -genfile --file=dir/foo -genfile --file=dir/bar -TAR_OPTIONS=--exclude-from=exclude.list tar cf arc.tar dir -tar tf arc.tar - -6. opcomp01.at:21: ok -7. opcomp02.at:21: testing occurrence compatibility ... -./opcomp02.at:24: -tar --occurrence=1 -tf test.tar - -1. version.at:19: ok -3. options.at:24: testing mixing options ... -./options.at:27: -echo > file1 -TAR_OPTIONS=--numeric-owner tar chof archive file1 -tar tf archive - 8. opcomp03.at:21: ok -10. opcomp05.at:21: testing --pax-option compatibility ... -./opcomp05.at:24: -tar -Hgnu -cf test.tar --pax-option user:=root . - 11. opcomp06.at:21: testing --pax-option compatibility ... ./opcomp06.at:24: @@ -2888,22 +2895,51 @@ genfile --file file tar -cf test.tar --acls -Hgnu file -4. options02.at:26: ok 3. options.at:24: ok -7. opcomp02.at:21: ok -10. opcomp05.at:21: ok - ---- - 2026-09-03 13:54:25.372304876 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/11/stderr 2026-09-03 13:54:25.363611836 +0000 +--- - 2025-08-01 07:34:08.099446852 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/11/stderr 2025-08-01 07:34:08.092146646 +0000 @@ -1,3 +1 @@ -tar: --acls can be used only on POSIX archives -Try 'tar --help' or 'tar --usage' for more information. +1. version.at:19: ok +11. opcomp06.at:21: 4. options02.at:26: ok +6. opcomp01.at:21: skipped (opcomp06.at:24) + ok +2. pipe.at:29: testing decompressing from stdin ... +./pipe.at:33: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 -11. opcomp06.at:21: 9. opcomp04.at:21: ok +mkdir directory +genfile --length 10240 --pattern zeros --file directory/file1 +genfile --length 13 --file directory/file2 +tar cf archive directory +mv directory orig +cat archive | tar xfv - --warning=no-timestamp | sort +echo "separator" +cmp orig/file1 directory/file1 +echo "separator" +cmp orig/file2 directory/file2) + +10. opcomp05.at:21: testing --pax-option compatibility ... +./opcomp05.at:24: +tar -Hgnu -cf test.tar --pax-option user:=root . + + + +10. opcomp05.at:21: ok + - skipped (opcomp06.at:24) 5. options03.at:21: ok 14. dot.at:16: testing dot action ... ./dot.at:18: @@ -2919,6 +2955,36 @@ tar --checkpoint-action=dot -c -f ../a.tar . +17. testsuite.at:242: testing compress: gzip ... +./testsuite.at:242: + +cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 + +unset TAR_OPTIONS + +touch empty +set -e +: create with --gzip +tar --gzip -cf k.tar.gz empty +tar tf k.tar.gz + + +echo testing .gz +tar -acf k2.tar.gz empty +cat k2.tar.gz | gzip -d > k.gz.tar +tar tf k.gz.tar + +echo testing .tgz +tar -acf k2.tar.tgz empty +cat k2.tar.tgz | gzip -d > k.tgz.tar +tar tf k.tgz.tar + + +# Extraction: ensure compressed format is correctly recognized +rm -f empty +tar xf k.tar.gz +test -f empty + 13. interval.at:16: testing checkpoint interval ... ./interval.at:18: mkdir t @@ -2933,6 +2999,22 @@ tar --checkpoint=2 -c -f ../a.tar . +9. opcomp04.at:21: ok +16. dot-int.at:16: testing dot action and interval ... +./dot-int.at:18: +mkdir t +cd t +for i in 0 1 2 3 4 5 6 7 8 9 +do + genfile --length 10240 --file $i +done +TAR_OPTIONS=-Hgnu +export TAR_OPTIONS + +tar --checkpoint-action=dot --checkpoint=2 -c -f ../a.tar . + + + 15. dot-compat.at:16: testing dot action (compatibility syntax) ... ./dot-compat.at:18: mkdir t @@ -2971,55 +3053,9 @@ echo "separator" cmp orig/file2 directory/file2) -16. dot-int.at:16: testing dot action and interval ... -./dot-int.at:18: -mkdir t -cd t -for i in 0 1 2 3 4 5 6 7 8 9 -do - genfile --length 10240 --file $i -done -TAR_OPTIONS=-Hgnu -export TAR_OPTIONS - -tar --checkpoint-action=dot --checkpoint=2 -c -f ../a.tar . - - - - - -12. defaults.at:16: ok -17. testsuite.at:242: testing compress: gzip ... -./testsuite.at:242: - -cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 - -unset TAR_OPTIONS - -touch empty -set -e -: create with --gzip -tar --gzip -cf k.tar.gz empty -tar tf k.tar.gz - - -echo testing .gz -tar -acf k2.tar.gz empty -cat k2.tar.gz | gzip -d > k.gz.tar -tar tf k.gz.tar - -echo testing .tgz -tar -acf k2.tar.tgz empty -cat k2.tar.tgz | gzip -d > k.tgz.tar -tar tf k.tgz.tar - - -# Extraction: ensure compressed format is correctly recognized -rm -f empty -tar xf k.tar.gz -test -f empty - +12. defaults.at:16: + ok 18. testsuite.at:243: testing compress: bzip2 ... ./testsuite.at:243: @@ -3051,6 +3087,36 @@ test -f empty +22. testsuite.at:248: testing compress: zstd ... +./testsuite.at:248: + +cat /dev/null | zstd - > /dev/null 2>&1 || exit 77 + +unset TAR_OPTIONS + +touch empty +set -e +: create with --zstd +tar --zstd -cf k.tar.zst empty +tar tf k.tar.zst + + +echo testing .zst +tar -acf k2.tar.zst empty +cat k2.tar.zst | zstd -d > k.zst.tar +tar tf k.zst.tar + +echo testing .tzst +tar -acf k2.tar.tzst empty +cat k2.tar.tzst | zstd -d > k.tzst.tar +tar tf k.tzst.tar + + +# Extraction: ensure compressed format is correctly recognized +rm -f empty +tar xf k.tar.zst +test -f empty + 19. testsuite.at:244: testing compress: xz ... ./testsuite.at:244: @@ -3081,96 +3147,66 @@ tar xf k.tar.xz test -f empty -20. testsuite.at:246: testing compress: lzip ... -./testsuite.at:246: - -cat /dev/null | lzip - > /dev/null 2>&1 || exit 77 - -unset TAR_OPTIONS - -touch empty -set -e -: create with --lzip -tar --lzip -cf k.tar.lz empty -tar tf k.tar.lz - - -echo testing .lz -tar -acf k2.tar.lz empty -cat k2.tar.lz | lzip -d > k.lz.tar -tar tf k.lz.tar - - -# Extraction: ensure compressed format is correctly recognized -rm -f empty -tar xf k.tar.lz -test -f empty - -22. testsuite.at:248: testing compress: zstd ... -./testsuite.at:248: +14. dot.at:16: ok +21. testsuite.at:247: testing compress: lzop ... +./testsuite.at:247: -cat /dev/null | zstd - > /dev/null 2>&1 || exit 77 +cat /dev/null | lzop - > /dev/null 2>&1 || exit 77 unset TAR_OPTIONS touch empty set -e -: create with --zstd -tar --zstd -cf k.tar.zst empty -tar tf k.tar.zst +: create with --lzop +tar --lzop -cf k.tar.lzo empty +tar tf k.tar.lzo -echo testing .zst -tar -acf k2.tar.zst empty -cat k2.tar.zst | zstd -d > k.zst.tar -tar tf k.zst.tar - -echo testing .tzst -tar -acf k2.tar.tzst empty -cat k2.tar.tzst | zstd -d > k.tzst.tar -tar tf k.tzst.tar +echo testing .lzo +tar -acf k2.tar.lzo empty +cat k2.tar.lzo | lzop -d > k.lzo.tar +tar tf k.lzo.tar # Extraction: ensure compressed format is correctly recognized rm -f empty -tar xf k.tar.zst +tar xf k.tar.lzo test -f empty -21. testsuite.at:247: testing compress: lzop ... -./testsuite.at:247: +20. testsuite.at:246: testing compress: lzip ... +./testsuite.at:246: -cat /dev/null | lzop - > /dev/null 2>&1 || exit 77 +cat /dev/null | lzip - > /dev/null 2>&1 || exit 77 unset TAR_OPTIONS touch empty set -e -: create with --lzop -tar --lzop -cf k.tar.lzo empty -tar tf k.tar.lzo +: create with --lzip +tar --lzip -cf k.tar.lz empty +tar tf k.tar.lz -echo testing .lzo -tar -acf k2.tar.lzo empty -cat k2.tar.lzo | lzop -d > k.lzo.tar -tar tf k.lzo.tar +echo testing .lz +tar -acf k2.tar.lz empty +cat k2.tar.lz | lzip -d > k.lz.tar +tar tf k.lz.tar # Extraction: ensure compressed format is correctly recognized rm -f empty -tar xf k.tar.lzo +tar xf k.tar.lz test -f empty ---- - 2026-09-03 13:54:25.414773316 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/21/stdout 2026-09-03 13:54:25.411611836 +0000 +--- - 2025-08-01 07:34:08.153104027 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/20/stdout 2025-08-01 07:34:08.144146971 +0000 @@ -1,4 +1 @@ -empty --testing .lzo +-testing .lz -empty -13. interval.at:16: ok ---- - 2026-09-03 13:54:25.413115156 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/22/stdout 2026-09-03 13:54:25.407611836 +0000 +16. dot-int.at:16: --- - 2025-08-01 07:34:08.157562975 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/22/stdout 2025-08-01 07:34:08.152147021 +0000 @@ -1,6 +1 @@ -empty -testing .zst @@ -3178,38 +3214,46 @@ -testing .tzst -empty -21. testsuite.at:247: 22. testsuite.at:248: skipped (testsuite.at:247) - skipped (testsuite.at:248) -14. dot.at:16: --- - 2026-09-03 13:54:25.419996756 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/20/stdout 2026-09-03 13:54:25.415611836 +0000 + ok +20. testsuite.at:246: --- - 2025-08-01 07:34:08.158684542 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/21/stdout 2025-08-01 07:34:08.148146996 +0000 @@ -1,4 +1 @@ -empty --testing .lz +-testing .lzo -empty - ok -20. testsuite.at:246: -15. dot-compat.at:16: skipped (testsuite.at:246) - ok +15. dot-compat.at:16: ok +22. testsuite.at:248: skipped (testsuite.at:246) + skipped (testsuite.at:248) +21. testsuite.at:247: + skipped (testsuite.at:247) -23. positional01.at:21: testing Exclude ... -./positional01.at:24: -test -z "`sort < /dev/null 2>&1`" || exit 77 -mkdir dir -> dir/A.a -> dir/B.a -> dir/A.b -tar -cf a.tar --exclude '*.b' dir -echo $? -tar -tf a.tar | sort -tar -cf a.tar dir --exclude '*.b' -echo $? -tar -tf a.tar | sort +./pipe.at:33: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 +mkdir directory +genfile --length 10240 --pattern zeros --file directory/file1 +genfile --length 13 --file directory/file2 +tar cf archive directory +mv directory orig +cat archive | tar xfv - --warning=no-timestamp | sort +echo "separator" +cmp orig/file1 directory/file1 +echo "separator" +cmp orig/file2 directory/file2) 24. positional02.at:21: testing Directory ... ./positional02.at:24: @@ -3225,31 +3269,56 @@ tar -cf a.tar . -C dir -16. dot-int.at:16: ok -./pipe.at:33: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +13. interval.at:16: ok +26. add-file.at:21: testing The --add-file option ... +./add-file.at:33: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * +genfile --file -File +genfile --file foo +genfile --file bar + +echo 1: +tar -cvf arc.tar --add-file foo --add-file -File + +echo 2: +tar -cvf arc.tar foo --add-file -File bar + + +cat >input <<'_ATEOF' +foo +--add-file=-File +bar +_ATEOF + + +echo 3: +tar -cvf arc.tar -T input +) +23. positional01.at:21: testing Exclude ... +./positional01.at:24: test -z "`sort < /dev/null 2>&1`" || exit 77 +mkdir dir +> dir/A.a +> dir/B.a +> dir/A.b +tar -cf a.tar --exclude '*.b' dir +echo $? +tar -tf a.tar | sort +tar -cf a.tar dir --exclude '*.b' +echo $? +tar -tf a.tar | sort -mkdir directory -genfile --length 10240 --pattern zeros --file directory/file1 -genfile --length 13 --file directory/file2 -tar cf archive directory -mv directory orig -cat archive | tar xfv - --warning=no-timestamp | sort -echo "separator" -cmp orig/file1 directory/file1 -echo "separator" -cmp orig/file2 directory/file2) +17. testsuite.at:242: ok 25. positional03.at:21: testing Several options ... ./positional03.at:24: @@ -3263,7 +3332,6 @@ > dir/A.b tar -vcf ../a.tar --exclude '*.b' . -C dir --exclude '*.c' | sort - 27. T-mult.at:21: testing multiple file lists ... ./T-mult.at:24: mkdir ustar @@ -3291,37 +3359,6 @@ tar cf archive -T F1 -T F2 tar tf archive ) -26. add-file.at:21: testing The --add-file option ... -./add-file.at:33: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - -genfile --file -File -genfile --file foo -genfile --file bar - -echo 1: -tar -cvf arc.tar --add-file foo --add-file -File - -echo 2: -tar -cvf arc.tar foo --add-file -File bar - - -cat >input <<'_ATEOF' -foo ---add-file=-File -bar -_ATEOF - - -echo 3: -tar -cvf arc.tar -T input -) 28. T-nest.at:21: testing nested file lists ... ./T-nest.at:24: mkdir ustar @@ -3376,9 +3413,71 @@ echo $? tar tf archive ) +24. positional02.at:21: ok -17. testsuite.at:242: ok + +28. T-nest.at:21: ok 18. testsuite.at:243: ok +25. positional03.at:21: ok +./add-file.at:33: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile --file -File +genfile --file foo +genfile --file bar + +echo 1: +tar -cvf arc.tar --add-file foo --add-file -File + +echo 2: +tar -cvf arc.tar foo --add-file -File bar + + +cat >input <<'_ATEOF' +foo +--add-file=-File +bar +_ATEOF + + +echo 3: +tar -cvf arc.tar -T input +) +31. T-recurse.at:66: testing toggle --recursion (not) from -T ... +./T-recurse.at:69: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + +mkdir directory1 directory2 +touch directory1/file directory2/file + +cat >F1 <<'_ATEOF' +--no-recursion +directory1/ +_ATEOF + + +cat >F2 <<'_ATEOF' +directory2/ +_ATEOF + + +tar cf archive -T F1 --recursion -T F2 +tar tf archive + +) + 30. T-recurse.at:27: testing files-from & recurse: toggle ... ./T-recurse.at:30: mkdir v7 @@ -3418,46 +3517,61 @@ tar cf "$a" --no-recursion -T F2A --recursion -T F2B tar tf "$a" ) + 23. positional01.at:21: ok -24. positional02.at:21: ok -28. T-nest.at:21: ok -./add-file.at:33: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +27. T-mult.at:21: ok + +./pipe.at:33: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * -genfile --file -File -genfile --file foo -genfile --file bar -echo 1: -tar -cvf arc.tar --add-file foo --add-file -File +test -z "`sort < /dev/null 2>&1`" || exit 77 -echo 2: -tar -cvf arc.tar foo --add-file -File bar +mkdir directory +genfile --length 10240 --pattern zeros --file directory/file1 +genfile --length 13 --file directory/file2 +tar cf archive directory +mv directory orig +cat archive | tar xfv - --warning=no-timestamp | sort +echo "separator" +cmp orig/file1 directory/file1 +echo "separator" +cmp orig/file2 directory/file2) +19. testsuite.at:244: ok +34. T-null.at:21: testing 0-separated file without -0 ... +./T-null.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * -cat >input <<'_ATEOF' -foo ---add-file=-File -bar -_ATEOF +test -z "`sort < /dev/null 2>&1`" || exit 77 -echo 3: -tar -cvf arc.tar -T input -) -29. T-rec.at:21: ok -27. T-mult.at:21: ok +echo jeden > temp +echo dwa >> temp +echo trzy >> temp +cat temp | tr '\n' '\0' > file-list -25. positional03.at:21: ok -31. T-recurse.at:66: testing toggle --recursion (not) from -T ... +genfile -f jeden +genfile -f dwa +genfile -f trzy + +tar cfTv archive file-list +) +33. T-empty.at:26: testing empty entries ... 32. T-cd.at:21: testing -C in file lists ... ./T-cd.at:24: mkdir ustar @@ -3484,34 +3598,6 @@ tar cf archive -T F1 tar tf archive | sort ) -./T-recurse.at:69: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - -mkdir directory1 directory2 -touch directory1/file directory2/file - -cat >F1 <<'_ATEOF' ---no-recursion -directory1/ -_ATEOF - - -cat >F2 <<'_ATEOF' -directory2/ -_ATEOF - - -tar cf archive -T F1 --recursion -T F2 -tar tf archive - -) -33. T-empty.at:26: testing empty entries ... ./T-empty.at:36: mkdir ustar (cd ustar @@ -3528,36 +3614,33 @@ tar cfvT archive ../file-list ) - -./pipe.at:33: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +35. T-null2.at:17: testing --null enables verbatim reading ... +./T-null2.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -mkdir directory -genfile --length 10240 --pattern zeros --file directory/file1 -genfile --length 13 --file directory/file2 -tar cf archive directory -mv directory orig -cat archive | tar xfv - --warning=no-timestamp | sort -echo "separator" -cmp orig/file1 directory/file1 -echo "separator" -cmp orig/file2 directory/file2) - +cat >file-list <<'_ATEOF' +a +-b +--c d +:\\.jpg +_ATEOF +genfile -f a +genfile -f -b +genfile -f '--c d' +genfile -f ':\\.jpg' -19. testsuite.at:244: ok -./T-recurse.at:30: +cat file-list | tr '\n' '\0' | tar -c -f archive -v --null -T - +) +29. T-rec.at:21: ok +./T-recurse.at:69: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -3572,56 +3655,23 @@ cat >F1 <<'_ATEOF' --no-recursion directory1/ ---recursion -directory2/ _ATEOF -cat >F2A <<'_ATEOF' -directory1/ -_ATEOF - - -cat >F2B <<'_ATEOF' +cat >F2 <<'_ATEOF' directory2/ _ATEOF -a=archive -tar cf "$a" --files-from F1 -tar tf "$a" +tar cf archive -T F1 --recursion -T F2 +tar tf archive -a=archive2 -tar cf "$a" --no-recursion -T F2A --recursion -T F2B -tar tf "$a" ) -34. T-null.at:21: testing 0-separated file without -0 ... -./T-null.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * -test -z "`sort < /dev/null 2>&1`" || exit 77 - -echo jeden > temp -echo dwa >> temp -echo trzy >> temp -cat temp | tr '\n' '\0' > file-list - -genfile -f jeden -genfile -f dwa -genfile -f trzy - -tar cfTv archive file-list -) -37. T-nonl.at:27: testing entries with missing newlines ... -./T-nonl.at:30: +36. T-zfile.at:26: testing empty file ... +./T-zfile.at:29: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -3631,19 +3681,18 @@ rm -rf * genfile --length=0 --file empty -printf c > 1.nonl -printf 'd\ne' > 2.nonl -touch a b c d e -cat >filelist <<'_ATEOF' +genfile --file a +genfile --file b +cat >valid <<'_ATEOF' a b _ATEOF -tar cf archive -T empty -T 1.nonl -T 2.nonl -T filelist +tar cf archive -T empty -T valid tar tf archive -echo == -tar cf archive -T 2.nonl -T empty -T filelist -T 1.nonl +echo "==" +tar cf archive -T valid -T empty tar tf archive ) ./add-file.at:33: @@ -3676,29 +3725,9 @@ echo 3: tar -cvf arc.tar -T input ) -38. T-dir00.at:28: testing recursive extraction from --files-from ... -./T-dir00.at:30: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir dir -genfile -f dir/file1 -genfile -f dir/file2 -tar cf archive dir -rm -rf dir -echo dir > list -tar xfTv archive list | sort -) -36. T-zfile.at:26: testing empty file ... -./T-zfile.at:29: +33. T-empty.at:26: ok +37. T-nonl.at:27: testing entries with missing newlines ... +./T-nonl.at:30: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -3708,24 +3737,23 @@ rm -rf * genfile --length=0 --file empty -genfile --file a -genfile --file b -cat >valid <<'_ATEOF' +printf c > 1.nonl +printf 'd\ne' > 2.nonl +touch a b c d e +cat >filelist <<'_ATEOF' a b _ATEOF -tar cf archive -T empty -T valid +tar cf archive -T empty -T 1.nonl -T 2.nonl -T filelist tar tf archive -echo "==" -tar cf archive -T valid -T empty +echo == +tar cf archive -T 2.nonl -T empty -T filelist -T 1.nonl tar tf archive ) - -33. T-empty.at:26: ok -39. T-dir01.at:28: testing trailing slash in --files-from ... -./T-dir01.at:30: +38. T-dir00.at:28: testing recursive extraction from --files-from ... +./T-dir00.at:30: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -3742,65 +3770,17 @@ genfile -f dir/file2 tar cf archive dir rm -rf dir -echo dir/ > list +echo dir > list tar xfTv archive list | sort ) -35. T-null2.at:17: testing --null enables verbatim reading ... -./T-null2.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -cat >file-list <<'_ATEOF' -a --b ---c d -:\\.jpg -_ATEOF - - -genfile -f a -genfile -f -b -genfile -f '--c d' -genfile -f ':\\.jpg' - -cat file-list | tr '\n' '\0' | tar -c -f archive -v --null -T - -) -./pipe.at:33: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -mkdir directory -genfile --length 10240 --pattern zeros --file directory/file1 -genfile --length 13 --file directory/file2 -tar cf archive directory -mv directory orig -cat archive | tar xfv - --warning=no-timestamp | sort -echo "separator" -cmp orig/file1 directory/file1 -echo "separator" -cmp orig/file2 directory/file2) 32. T-cd.at:21: ok -34. T-null.at:21: ok -./T-recurse.at:30: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +35. T-null2.at:17: ./T-recurse.at:30: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -3833,12 +3813,13 @@ tar cf "$a" --no-recursion -T F2A --recursion -T F2B tar tf "$a" ) + ok ./T-recurse.at:69: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -3860,7 +3841,74 @@ tar tf archive ) -37. T-nonl.at:27: ok +39. T-dir01.at:28: testing trailing slash in --files-from ... +./T-dir01.at:30: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir dir +genfile -f dir/file1 +genfile -f dir/file2 +tar cf archive dir +rm -rf dir +echo dir/ > list +tar xfTv archive list | sort +) + +./pipe.at:33: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +mkdir directory +genfile --length 10240 --pattern zeros --file directory/file1 +genfile --length 13 --file directory/file2 +tar cf archive directory +mv directory orig +cat archive | tar xfv - --warning=no-timestamp | sort +echo "separator" +cmp orig/file1 directory/file1 +echo "separator" +cmp orig/file2 directory/file2) +34. T-null.at:21: ok + +40. indexfile.at:26: testing tar --index-file=FILE --file=- ... +./indexfile.at:29: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + + +mkdir directory +genfile --file=directory/a --length=1035 + +echo "Creating the archive" +tar -c -v -f - --index-file=idx directory > archive + +echo "Testing the archive" +tar -tf archive +) +36. T-zfile.at:26: ok ./add-file.at:33: mkdir posix (cd posix @@ -3891,13 +3939,50 @@ echo 3: tar -cvf arc.tar -T input ) -35. T-null2.at:17: ok -36. T-zfile.at:26: ok +./T-recurse.at:69: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +mkdir directory1 directory2 +touch directory1/file directory2/file + +cat >F1 <<'_ATEOF' +--no-recursion +directory1/ +_ATEOF + + +cat >F2 <<'_ATEOF' +directory2/ +_ATEOF +tar cf archive -T F1 --recursion -T F2 +tar tf archive +) +41. verbose.at:26: testing tar cvf - ... +./verbose.at:29: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * +genfile --file file --length 10240 +echo Creating the archive +tar cvf - file > archive +echo Testing the archive +tar tf archive +) ./T-dir00.at:30: mkdir oldgnu (cd oldgnu @@ -3919,18 +4004,28 @@ tar xfTv archive list | sort ) -42. gzip.at:23: testing gzip ... -./gzip.at:28: +./T-dir01.at:30: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 -tar xfvz /dev/null 2>err -RC=$? -sed -n '/^tar:/p' err >&2 -exit $RC +test -z "`sort < /dev/null 2>&1`" || exit 77 -44. recurs02.at:30: testing recurse: toggle ... -./recurs02.at:33: +mkdir dir +genfile -f dir/file1 +genfile -f dir/file2 +tar cf archive dir +rm -rf dir +echo dir/ > list +tar xfTv archive list | sort +) +43. recurse.at:21: testing recurse ... +./recurse.at:24: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -3939,25 +4034,28 @@ export TAR_OPTIONS rm -rf * -mkdir directory1 directory2 -touch directory1/file directory2/file -tar --create --file archive \ - --no-recursion directory1 \ - --recursion directory2 || exit 1 +mkdir directory +touch directory/file +tar --create --file archive --no-recursion directory || exit 1 tar tf archive -tar cf archive directory1 directory2 -tar tf archive \ - --no-recursion directory1 \ - --recursion directory2 || exit 1 ) -2. pipe.at:29: ok -41. verbose.at:26: testing tar cvf - ... +37. T-nonl.at:27: ok +42. gzip.at:23: testing gzip ... +./gzip.at:28: + +cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 + +tar xfvz /dev/null 2>err +RC=$? +sed -n '/^tar:/p' err >&2 +exit $RC + ./verbose.at:29: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -3967,27 +4065,50 @@ echo Testing the archive tar tf archive ) -43. recurse.at:21: testing recurse ... -./recurse.at:24: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +./T-recurse.at:30: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * -mkdir directory -touch directory/file -tar --create --file archive --no-recursion directory || exit 1 -tar tf archive +mkdir directory1 directory2 +touch directory1/file directory2/file + +cat >F1 <<'_ATEOF' +--no-recursion +directory1/ +--recursion +directory2/ +_ATEOF + + +cat >F2A <<'_ATEOF' +directory1/ +_ATEOF + + +cat >F2B <<'_ATEOF' +directory2/ +_ATEOF + + +a=archive +tar cf "$a" --files-from F1 +tar tf "$a" + +a=archive2 +tar cf "$a" --no-recursion -T F2A --recursion -T F2B +tar tf "$a" ) ./T-recurse.at:69: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -4009,6 +4130,27 @@ tar tf archive ) +./indexfile.at:29: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + + +mkdir directory +genfile --file=directory/a --length=1035 + +echo "Creating the archive" +tar -c -v -f - --index-file=idx directory > archive + +echo "Testing the archive" +tar -tf archive +) +42. gzip.at:23: ok +2. pipe.at:29: ok ./add-file.at:33: mkdir gnu (cd gnu @@ -4039,7 +4181,8 @@ echo 3: tar -cvf arc.tar -T input ) -./T-dir01.at:30: + +./recurse.at:24: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -4048,6 +4191,21 @@ export TAR_OPTIONS rm -rf * +mkdir directory +touch directory/file +tar --create --file archive --no-recursion directory || exit 1 +tar tf archive +) + +./T-dir01.at:30: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + test -z "`sort < /dev/null 2>&1`" || exit 77 @@ -4059,37 +4217,38 @@ echo dir/ > list tar xfTv archive list | sort ) -45. shortrec.at:25: testing short records ... -./shortrec.at:28: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +./indexfile.at:29: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * + mkdir directory -(cd directory && touch a b c d e f g h i j k l m n o p q r) -tar -c -b 1 -f - directory | tar -t -f - > /dev/null -tar -c -b 1 -f archive directory -tar -t -f archive > /dev/null -tar -t -f - < archive > /dev/null +genfile --file=directory/a --length=1035 -rm -r directory +echo "Creating the archive" +tar -c -v -f - --index-file=idx directory > archive + +echo "Testing the archive" +tar -tf archive ) -./recurse.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./verbose.at:29: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * -mkdir directory -touch directory/file -tar --create --file archive --no-recursion directory || exit 1 +genfile --file file --length 10240 +echo Creating the archive +tar cvf - file > archive +echo Testing the archive tar tf archive ) @@ -4131,8 +4290,9 @@ tar cf "$a" --no-recursion -T F2A --recursion -T F2B tar tf "$a" ) -40. indexfile.at:26: testing tar --index-file=FILE --file=- ... -./indexfile.at:29: + +45. shortrec.at:25: testing short records ... +./shortrec.at:28: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -4141,6 +4301,66 @@ export TAR_OPTIONS rm -rf * +mkdir directory +(cd directory && touch a b c d e f g h i j k l m n o p q r) +tar -c -b 1 -f - directory | tar -t -f - > /dev/null +tar -c -b 1 -f archive directory +tar -t -f archive > /dev/null +tar -t -f - < archive > /dev/null + +rm -r directory +) +44. recurs02.at:30: testing recurse: toggle ... +./recurs02.at:33: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + +mkdir directory1 directory2 +touch directory1/file directory2/file +tar --create --file archive \ + --no-recursion directory1 \ + --recursion directory2 || exit 1 +tar tf archive +tar cf archive directory1 directory2 +tar tf archive \ + --no-recursion directory1 \ + --recursion directory2 || exit 1 +) +31. T-recurse.at:66: ok +./T-dir00.at:30: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir dir +genfile -f dir/file1 +genfile -f dir/file2 +tar cf archive dir +rm -rf dir +echo dir > list +tar xfTv archive list | sort +) +./indexfile.at:29: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + mkdir directory genfile --file=directory/a --length=1035 @@ -4193,44 +4413,28 @@ tar --extract -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' ) -./indexfile.at:29: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +47. same-order01.at:26: testing working -C with --same-order ... +./same-order01.at:29: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * -mkdir directory -genfile --file=directory/a --length=1035 +test -z "`sort < /dev/null 2>&1`" || exit 77 -echo "Creating the archive" -tar -c -v -f - --index-file=idx directory > archive -echo "Testing the archive" -tar -tf archive -) -./recurs02.at:33: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * +genfile -l 1024 -f file1 +genfile -l 1024 -f file2 +tar cf archive file1 file2 -mkdir directory1 directory2 -touch directory1/file directory2/file -tar --create --file archive \ - --no-recursion directory1 \ - --recursion directory2 || exit 1 -tar tf archive -tar cf archive directory1 directory2 -tar tf archive \ - --no-recursion directory1 \ - --recursion directory2 || exit 1 +mkdir directory +tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 + +ls directory|sort ) ./recurse.at:24: mkdir ustar @@ -4247,11 +4451,11 @@ tar tf archive ) ./verbose.at:29: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -4261,9 +4465,7 @@ echo Testing the archive tar tf archive ) -42. gzip.at:23: ok -26. add-file.at:21: ok -./shortrec.at:28: +./recurs02.at:33: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -4272,21 +4474,23 @@ export TAR_OPTIONS rm -rf * -mkdir directory -(cd directory && touch a b c d e f g h i j k l m n o p q r) -tar -c -b 1 -f - directory | tar -t -f - > /dev/null -tar -c -b 1 -f archive directory -tar -t -f archive > /dev/null -tar -t -f - < archive > /dev/null - -rm -r directory +mkdir directory1 directory2 +touch directory1/file directory2/file +tar --create --file archive \ + --no-recursion directory1 \ + --recursion directory2 || exit 1 +tar tf archive +tar cf archive directory1 directory2 +tar tf archive \ + --no-recursion directory1 \ + --recursion directory2 || exit 1 ) ./T-dir01.at:30: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -4301,26 +4505,7 @@ echo dir/ > list tar xfTv archive list | sort ) -./T-dir00.at:30: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir dir -genfile -f dir/file1 -genfile -f dir/file2 -tar cf archive dir -rm -rf dir -echo dir > list -tar xfTv archive list | sort -) +26. add-file.at:21: ok ./T-recurse.at:30: mkdir gnu (cd gnu @@ -4359,125 +4544,7 @@ tar cf "$a" --no-recursion -T F2A --recursion -T F2B tar tf "$a" ) -./T-recurse.at:69: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -mkdir directory1 directory2 -touch directory1/file directory2/file - -cat >F1 <<'_ATEOF' ---no-recursion -directory1/ -_ATEOF - - -cat >F2 <<'_ATEOF' -directory2/ -_ATEOF - - -tar cf archive -T F1 --recursion -T F2 -tar tf archive - -) - -./recurse.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -mkdir directory -touch directory/file -tar --create --file archive --no-recursion directory || exit 1 -tar tf archive -) -./verbose.at:29: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -genfile --file file --length 10240 -echo Creating the archive -tar cvf - file > archive -echo Testing the archive -tar tf archive -) -./shortrec.at:28: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -mkdir directory -(cd directory && touch a b c d e f g h i j k l m n o p q r) -tar -c -b 1 -f - directory | tar -t -f - > /dev/null -tar -c -b 1 -f archive directory -tar -t -f archive > /dev/null -tar -t -f - < archive > /dev/null - -rm -r directory -) -./recurs02.at:33: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -mkdir directory1 directory2 -touch directory1/file directory2/file -tar --create --file archive \ - --no-recursion directory1 \ - --recursion directory2 || exit 1 -tar tf archive -tar cf archive directory1 directory2 -tar tf archive \ - --no-recursion directory1 \ - --recursion directory2 || exit 1 -) -47. same-order01.at:26: testing working -C with --same-order ... -./same-order01.at:29: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -genfile -l 1024 -f file1 -genfile -l 1024 -f file2 -tar cf archive file1 file2 - -mkdir directory -tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 - -ls directory|sort -) -./T-recurse.at:69: +./indexfile.at:29: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -4486,34 +4553,6 @@ export TAR_OPTIONS rm -rf * -mkdir directory1 directory2 -touch directory1/file directory2/file - -cat >F1 <<'_ATEOF' ---no-recursion -directory1/ -_ATEOF - - -cat >F2 <<'_ATEOF' -directory2/ -_ATEOF - - -tar cf archive -T F1 --recursion -T F2 -tar tf archive - -) - -./indexfile.at:29: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - mkdir directory genfile --file=directory/a --length=1035 @@ -4524,117 +4563,26 @@ echo "Testing the archive" tar -tf archive ) -./T-dir00.at:30: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir dir -genfile -f dir/file1 -genfile -f dir/file2 -tar cf archive dir -rm -rf dir -echo dir > list -tar xfTv archive list | sort -) -./recurse.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./shortrec.at:28: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * mkdir directory -touch directory/file -tar --create --file archive --no-recursion directory || exit 1 -tar tf archive -) -./T-dir01.at:30: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 +(cd directory && touch a b c d e f g h i j k l m n o p q r) +tar -c -b 1 -f - directory | tar -t -f - > /dev/null +tar -c -b 1 -f archive directory +tar -t -f archive > /dev/null +tar -t -f - < archive > /dev/null -mkdir dir -genfile -f dir/file1 -genfile -f dir/file2 -tar cf archive dir -rm -rf dir -echo dir/ > list -tar xfTv archive list | sort +rm -r directory ) -30. T-recurse.at:27: ok -./numeric.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -MYUID=$(id -u) || exit 77 -MYGID=$(id -g) || exit 77 -MYUSR=$(id -un) || exit 77 -MYGRP=$(id -gn) || exit 77 - -mkdir dir -# Ensure correct group id on BSDs. -chown :$MYGID dir >/dev/null 2>/dev/null -genfile --file dir/file - - - -decho --create -tar --create -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --create -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' - - -decho --list -tar --list -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --list -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' - - -decho --diff -tar --diff -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --diff -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' -decho --extract -tar --extract -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --extract -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' - -) -./verbose.at:29: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -genfile --file file --length 10240 -echo Creating the archive -tar cvf - file > archive -echo Testing the archive -tar tf archive -) 48. same-order02.at:25: testing multiple -C options ... ./same-order02.at:28: mkdir v7 @@ -4661,7 +4609,7 @@ echo separator ls to ) -./recurs02.at:33: +./T-dir00.at:30: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -4670,55 +4618,38 @@ export TAR_OPTIONS rm -rf * -mkdir directory1 directory2 -touch directory1/file directory2/file -tar --create --file archive \ - --no-recursion directory1 \ - --recursion directory2 || exit 1 -tar tf archive -tar cf archive directory1 directory2 -tar tf archive \ - --no-recursion directory1 \ - --recursion directory2 || exit 1 + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir dir +genfile -f dir/file1 +genfile -f dir/file2 +tar cf archive dir +rm -rf dir +echo dir > list +tar xfTv archive list | sort ) -./shortrec.at:28: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./same-order01.at:29: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * -mkdir directory -(cd directory && touch a b c d e f g h i j k l m n o p q r) -tar -c -b 1 -f - directory | tar -t -f - > /dev/null -tar -c -b 1 -f archive directory -tar -t -f archive > /dev/null -tar -t -f - < archive > /dev/null -rm -r directory -) +test -z "`sort < /dev/null 2>&1`" || exit 77 -43. recurse.at:21: ok -./indexfile.at:29: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * +genfile -l 1024 -f file1 +genfile -l 1024 -f file2 +tar cf archive file1 file2 mkdir directory -genfile --file=directory/a --length=1035 - -echo "Creating the archive" -tar -c -v -f - --index-file=idx directory > archive +tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 -echo "Testing the archive" -tar -tf archive +ls directory|sort ) 49. append.at:21: testing append ... ./append.at:24: @@ -4734,6 +4665,20 @@ tar cf archive file1 tar rf archive file2 tar tf archive) +./recurse.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +mkdir directory +touch directory/file +tar --create --file archive --no-recursion directory || exit 1 +tar tf archive +) ./verbose.at:29: mkdir gnu (cd gnu @@ -4749,7 +4694,7 @@ echo Testing the archive tar tf archive ) -./T-dir00.at:30: +./T-dir01.at:30: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -4766,37 +4711,15 @@ genfile -f dir/file2 tar cf archive dir rm -rf dir -echo dir > list +echo dir/ > list tar xfTv archive list | sort ) -./same-order01.at:29: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -genfile -l 1024 -f file1 -genfile -l 1024 -f file2 -tar cf archive file1 file2 - -mkdir directory -tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 - -ls directory|sort -) ./recurs02.at:33: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -4811,12 +4734,14 @@ --no-recursion directory1 \ --recursion directory2 || exit 1 ) +40. indexfile.at:26: ok +30. T-recurse.at:27: ok ./shortrec.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -4829,7 +4754,20 @@ rm -r directory ) -31. T-recurse.at:66: ok +./recurse.at:24: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +mkdir directory +touch directory/file +tar --create --file archive --no-recursion directory || exit 1 +tar tf archive +) ./append.at:24: mkdir oldgnu (cd oldgnu @@ -4843,27 +4781,6 @@ tar cf archive file1 tar rf archive file2 tar tf archive) -./T-dir01.at:30: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir dir -genfile -f dir/file1 -genfile -f dir/file2 -tar cf archive dir -rm -rf dir -echo dir/ > list -tar xfTv archive list | sort -) - ./same-order01.at:29: mkdir ustar (cd ustar @@ -4886,6 +4803,47 @@ ls directory|sort ) +./numeric.at:29: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +MYUID=$(id -u) || exit 77 +MYGID=$(id -g) || exit 77 +MYUSR=$(id -un) || exit 77 +MYGRP=$(id -gn) || exit 77 + +mkdir dir +# Ensure correct group id on BSDs. +chown :$MYGID dir >/dev/null 2>/dev/null +genfile --file dir/file + + + +decho --create +tar --create -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --create -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' + + +decho --list +tar --list -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --list -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' + + +decho --diff +tar --diff -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --diff -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' + + +decho --extract +tar --extract -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --extract -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' + +) ./same-order02.at:28: mkdir oldgnu @@ -4912,25 +4870,7 @@ echo separator ls to ) -./indexfile.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -mkdir directory -genfile --file=directory/a --length=1035 - -echo "Creating the archive" -tar -c -v -f - --index-file=idx directory > archive - -echo "Testing the archive" -tar -tf archive -) 50. append01.at:29: testing appending files with long names ... ./append01.at:34: mkdir oldgnu @@ -4947,9 +4887,8 @@ tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 tar tf archive ) -45. shortrec.at:25: ok -41. verbose.at:26: ok -44. recurs02.at:30: ok +43. recurse.at:21: ok +39. T-dir01.at:28: ok ./append.at:24: mkdir ustar (cd ustar @@ -4963,46 +4902,46 @@ tar cf archive file1 tar rf archive file2 tar tf archive) -./numeric.at:29: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./recurs02.at:33: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * -MYUID=$(id -u) || exit 77 -MYGID=$(id -g) || exit 77 -MYUSR=$(id -un) || exit 77 -MYGRP=$(id -gn) || exit 77 - -mkdir dir -# Ensure correct group id on BSDs. -chown :$MYGID dir >/dev/null 2>/dev/null -genfile --file dir/file - - - -decho --create -tar --create -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --create -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' - - -decho --list -tar --list -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --list -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' - - -decho --diff -tar --diff -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --diff -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' +mkdir directory1 directory2 +touch directory1/file directory2/file +tar --create --file archive \ + --no-recursion directory1 \ + --recursion directory2 || exit 1 +tar tf archive +tar cf archive directory1 directory2 +tar tf archive \ + --no-recursion directory1 \ + --recursion directory2 || exit 1 +) +41. verbose.at:26: ok +./T-dir00.at:30: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -decho --extract -tar --extract -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --extract -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' +test -z "`sort < /dev/null 2>&1`" || exit 77 +mkdir dir +genfile -f dir/file1 +genfile -f dir/file2 +tar cf archive dir +rm -rf dir +echo dir > list +tar xfTv archive list | sort ) 51. append02.at:54: testing append vs. create ... ./append02.at:57: @@ -5038,24 +4977,30 @@ cmp archive.1 archive.2 ) -./append01.at:34: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar + + +./same-order01.at:29: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * -mkdir This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX -touch This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 -tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 -tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 -tar tf archive -) -40. indexfile.at:26: ok -38. T-dir00.at:28: ok +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +genfile -l 1024 -f file1 +genfile -l 1024 -f file2 +tar cf archive file1 file2 + +mkdir directory +tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 + +ls directory|sort +) 52. append03.at:21: testing append with name transformation ... ./append03.at:26: mkdir v7 @@ -5075,8 +5020,20 @@ echo Testing tar tf archive ) -39. T-dir01.at:28: ok -./same-order01.at:29: +./append.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * +touch file1 + touch file2 + tar cf archive file1 + tar rf archive file2 + tar tf archive) +./shortrec.at:28: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -5085,20 +5042,40 @@ export TAR_OPTIONS rm -rf * +mkdir directory +(cd directory && touch a b c d e f g h i j k l m n o p q r) +tar -c -b 1 -f - directory | tar -t -f - > /dev/null +tar -c -b 1 -f archive directory +tar -t -f archive > /dev/null +tar -t -f - < archive > /dev/null -test -z "`sort < /dev/null 2>&1`" || exit 77 - +rm -r directory +) +./same-order02.at:28: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * genfile -l 1024 -f file1 genfile -l 1024 -f file2 tar cf archive file1 file2 -mkdir directory -tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 +mkdir en +mkdir to -ls directory|sort -) +HERE=`pwd` +tar -xf archive --same-order --warning=no-timestamp \ + -C $HERE/en file1 \ + -C $HERE/to file2 || exit 1 +ls en +echo separator +ls to +) 54. append05.at:32: testing append after changed blocking ... ./append05.at:35: mkdir v7 @@ -5130,6 +5107,87 @@ decho 'resulting archive' tar tf archive ) +53. append04.at:29: testing append with verify ... +./append04.at:32: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + +# Create two empty files: +touch file1 file2 + +# Create an archive: +tar cpfW archive.tar file1 file2 + +# Verify created archive by listing its content: +tar -tf archive.tar +echo == +# Create another empty file: +touch file3 + +# Append it to the already created archive: +tar rpfW archive.tar file3 + +# Verify content of the new archive: +tar -tf archive.tar +) +./append03.at:26: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile --file file.1 +genfile --file file.2 + +tar -c -f archive --transform 's/file/plik/' file.* +echo Appending +tar -r -f archive --transform 's/file/plik/' -v --show-transformed-names file.1 +echo Testing +tar tf archive +) +./recurs02.at:33: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +mkdir directory1 directory2 +touch directory1/file directory2/file +tar --create --file archive \ + --no-recursion directory1 \ + --recursion directory2 || exit 1 +tar tf archive +tar cf archive directory1 directory2 +tar tf archive \ + --no-recursion directory1 \ + --recursion directory2 || exit 1 +) +./append01.at:34: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + +mkdir This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX +touch This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 +tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 +tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 +tar tf archive +) ./append02.at:57: mkdir oldgnu (cd oldgnu @@ -5162,14 +5220,48 @@ echo Comparing archives cmp archive.1 archive.2 ) +./same-order01.at:29: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -53. append04.at:29: testing append with verify ... + +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +genfile -l 1024 -f file1 +genfile -l 1024 -f file2 +tar cf archive file1 file2 + +mkdir directory +tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 + +ls directory|sort +) +38. T-dir00.at:28: ok +./append.at:24: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * +touch file1 + touch file2 + tar cf archive file1 + tar rf archive file2 + tar tf archive) ./append04.at:32: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -5191,13 +5283,12 @@ # Verify content of the new archive: tar -tf archive.tar ) - ./same-order02.at:28: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -5217,25 +5308,12 @@ echo separator ls to ) -./append.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * -touch file1 - touch file2 - tar cf archive file1 - tar rf archive file2 - tar tf archive) ./append03.at:26: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -5248,6 +5326,57 @@ echo Testing tar tf archive ) +./shortrec.at:28: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +mkdir directory +(cd directory && touch a b c d e f g h i j k l m n o p q r) +tar -c -b 1 -f - directory | tar -t -f - > /dev/null +tar -c -b 1 -f archive directory +tar -t -f archive > /dev/null +tar -t -f - < archive > /dev/null + +rm -r directory +) + +./append05.at:35: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +for f in a b c d e f g h i +do + echo $f > $f +done + +decho 'creating archive' +tar -cf archive -b1 a b c + +tar tf archive + +decho 'adding d e f' +tar -vrf archive -b3 d e f +echo == +tar tf archive + +decho 'adding g h i' +tar -vrf archive -b5 g h i + +decho 'resulting archive' +tar tf archive +) +49. append.at:21: ok +44. recurs02.at:30: ok 55. xform-h.at:30: testing transforming hard links on create ... ./xform-h.at:39: mkdir v7 @@ -5278,22 +5407,7 @@ tar tvf archive | sed -n 's/.*test_link link to //p' ) - -56. xform01.at:26: testing transformations and GNU volume labels ... -./xform01.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile --file file -tar -cf archive.tar -V /label/ file -tar tf archive.tar -) -./append02.at:57: +./append04.at:32: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -5302,53 +5416,6 @@ export TAR_OPTIONS rm -rf * -genfile --file file1 -genfile --file file2 - -# Make sure file timestamps in the archive will not differ -MTIME="--mtime=@0" - -# For PAX archives, we need to make sure extended header names are -# reproducible and that their contents won't change with time -if test $TEST_TAR_FORMAT = posix; then - TAR_OPTIONS="$TAR_OPTIONS --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=mtime,delete=atime,delete=ctime" -fi - -echo Creating archive.1 -tar $MTIME -cf archive.1 file1 file2 - -echo Creating archive.2 -tar $MTIME -cf archive.2 -T /dev/null -tar $MTIME -rf archive.2 file1 -tar $MTIME -rf archive.2 file2 - -echo Comparing archives -cmp archive.1 archive.2 -) -57. xform02.at:21: testing transforming escaped delimiters on create ... -./xform02.at:24: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - -genfile --file file -tar cvf /dev/null file \ - --transform='s/file/other\/name/' \ - --show-transformed-name -) -./append04.at:32: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - # Create two empty files: touch file1 file2 @@ -5367,48 +5434,70 @@ # Verify content of the new archive: tar -tf archive.tar ) -./same-order01.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./numeric.at:29: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * +MYUID=$(id -u) || exit 77 +MYGID=$(id -g) || exit 77 +MYUSR=$(id -un) || exit 77 +MYGRP=$(id -gn) || exit 77 -test -z "`sort < /dev/null 2>&1`" || exit 77 +mkdir dir +# Ensure correct group id on BSDs. +chown :$MYGID dir >/dev/null 2>/dev/null +genfile --file dir/file -genfile -l 1024 -f file1 -genfile -l 1024 -f file2 -tar cf archive file1 file2 -mkdir directory -tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 +decho --create +tar --create -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --create -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' + + +decho --list +tar --list -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --list -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' + + +decho --diff +tar --diff -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --diff -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' + + +decho --extract +tar --extract -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --extract -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' -ls directory|sort ) -./xform02.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +47. same-order01.at:26: ok + +./append01.at:34: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * -genfile --file file -tar cvf /dev/null file \ - --transform='s/file/other\/name/' \ - --show-transformed-name +mkdir This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX +touch This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 +tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 +tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 +tar tf archive ) ./same-order02.at:28: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -5428,42 +5517,55 @@ echo separator ls to ) -56. xform01.at:26: ok -./xform-h.at:39: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu + +56. xform01.at:26: testing transformations and GNU volume labels ... +./xform01.at:29: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * -mkdir basedir -echo "hello" > basedir/test -ln basedir/test basedir/test_link - - -echo "Default transform scope" -tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' +genfile --file file +tar -cf archive.tar -V /label/ file +tar tf archive.tar +) +45. shortrec.at:25: ok +./append04.at:32: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * +# Create two empty files: +touch file1 file2 -echo "Transforming hard links" -tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' +# Create an archive: +tar cpfW archive.tar file1 file2 +# Verify created archive by listing its content: +tar -tf archive.tar +echo == +# Create another empty file: +touch file3 -echo "Not transforming hard links" -tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' +# Append it to the already created archive: +tar rpfW archive.tar file3 +# Verify content of the new archive: +tar -tf archive.tar ) ./append02.at:57: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -5490,20 +5592,7 @@ echo Comparing archives cmp archive.1 archive.2 ) -./append.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * -touch file1 - touch file2 - tar cf archive file1 - tar rf archive file2 - tar tf archive) -./append01.at:34: +./append03.at:26: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -5512,21 +5601,6 @@ export TAR_OPTIONS rm -rf * -mkdir This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX -touch This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 -tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 -tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 -tar tf archive -) -./append03.at:26: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - genfile --file file.1 genfile --file file.2 @@ -5536,54 +5610,13 @@ echo Testing tar tf archive ) -./numeric.at:29: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -MYUID=$(id -u) || exit 77 -MYGID=$(id -g) || exit 77 -MYUSR=$(id -un) || exit 77 -MYGRP=$(id -gn) || exit 77 - -mkdir dir -# Ensure correct group id on BSDs. -chown :$MYGID dir >/dev/null 2>/dev/null -genfile --file dir/file - - - -decho --create -tar --create -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --create -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' - - -decho --list -tar --list -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --list -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' - - -decho --diff -tar --diff -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --diff -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' - - -decho --extract -tar --extract -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' -tar --extract -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' - -) - +57. xform02.at:21: testing transforming escaped delimiters on create ... ./xform02.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * @@ -5592,7 +5625,7 @@ --transform='s/file/other\/name/' \ --show-transformed-name ) -./append04.at:32: +./append05.at:35: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -5601,24 +5634,45 @@ export TAR_OPTIONS rm -rf * -# Create two empty files: -touch file1 file2 +for f in a b c d e f g h i +do + echo $f > $f +done -# Create an archive: -tar cpfW archive.tar file1 file2 +decho 'creating archive' +tar -cf archive -b1 a b c -# Verify created archive by listing its content: -tar -tf archive.tar +tar tf archive + +decho 'adding d e f' +tar -vrf archive -b3 d e f echo == -# Create another empty file: -touch file3 +tar tf archive -# Append it to the already created archive: -tar rpfW archive.tar file3 +decho 'adding g h i' +tar -vrf archive -b5 g h i -# Verify content of the new archive: -tar -tf archive.tar +decho 'resulting archive' +tar tf archive ) +./append01.at:34: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +mkdir This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX +touch This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 +tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 +tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 +tar tf archive +) + +56. xform01.at:26: ok + 58. xform03.at:21: testing transforming hard link targets ... ./xform03.at:24: mkdir v7 @@ -5638,34 +5692,7 @@ tar -C t -xf a.tar find t -type f ) -49. append.at:21: ok -47. same-order01.at:26: ok -./same-order02.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile -l 1024 -f file1 -genfile -l 1024 -f file2 -tar cf archive file1 file2 - -mkdir en -mkdir to - -HERE=`pwd` -tar -xf archive --same-order --warning=no-timestamp \ - -C $HERE/en file1 \ - -C $HERE/to file2 || exit 1 - -ls en -echo separator -ls to -) -./append05.at:35: +./xform-h.at:39: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -5674,49 +5701,51 @@ export TAR_OPTIONS rm -rf * -for f in a b c d e f g h i -do - echo $f > $f -done +mkdir basedir +echo "hello" > basedir/test +ln basedir/test basedir/test_link -decho 'creating archive' -tar -cf archive -b1 a b c -tar tf archive +echo "Default transform scope" +tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' -decho 'adding d e f' -tar -vrf archive -b3 d e f -echo == -tar tf archive -decho 'adding g h i' -tar -vrf archive -b5 g h i +echo "Transforming hard links" +tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' + + +echo "Not transforming hard links" +tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' -decho 'resulting archive' -tar tf archive ) -./xform02.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./append03.at:26: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * -genfile --file file -tar cvf /dev/null file \ - --transform='s/file/other\/name/' \ - --show-transformed-name -) - +genfile --file file.1 +genfile --file file.2 +tar -c -f archive --transform 's/file/plik/' file.* +echo Appending +tar -r -f archive --transform 's/file/plik/' -v --show-transformed-names file.1 +echo Testing +tar tf archive +) +48. same-order02.at:25: ok ./append02.at:57: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -5743,7 +5772,7 @@ echo Comparing archives cmp archive.1 archive.2 ) -./append01.at:34: +./append04.at:32: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -5752,29 +5781,23 @@ export TAR_OPTIONS rm -rf * -mkdir This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX -touch This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 -tar cf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file1 -tar rf archive This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_appending_long_file_names_that_run_into_a_limit_of_the_ustar_tarX/file2 -tar tf archive -) -./append03.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * +# Create two empty files: +touch file1 file2 -genfile --file file.1 -genfile --file file.2 +# Create an archive: +tar cpfW archive.tar file1 file2 -tar -c -f archive --transform 's/file/plik/' file.* -echo Appending -tar -r -f archive --transform 's/file/plik/' -v --show-transformed-names file.1 -echo Testing -tar tf archive +# Verify created archive by listing its content: +tar -tf archive.tar +echo == +# Create another empty file: +touch file3 + +# Append it to the already created archive: +tar rpfW archive.tar file3 + +# Verify content of the new archive: +tar -tf archive.tar ) 59. exclude.at:23: testing exclude ... ./exclude.at:26: @@ -5818,61 +5841,51 @@ tar tf archive.tar | sort done ) -./append04.at:32: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix + +50. append01.at:29: ./xform02.at:24: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * -# Create two empty files: -touch file1 file2 - -# Create an archive: -tar cpfW archive.tar file1 file2 - -# Verify created archive by listing its content: -tar -tf archive.tar -echo == -# Create another empty file: -touch file3 - -# Append it to the already created archive: -tar rpfW archive.tar file3 - -# Verify content of the new archive: -tar -tf archive.tar +genfile --file file +tar cvf /dev/null file \ + --transform='s/file/other\/name/' \ + --show-transformed-name ) -./xform-h.at:39: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar + ok +./append05.at:35: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * -mkdir basedir -echo "hello" > basedir/test -ln basedir/test basedir/test_link - - -echo "Default transform scope" -tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' +for f in a b c d e f g h i +do + echo $f > $f +done +decho 'creating archive' +tar -cf archive -b1 a b c -echo "Transforming hard links" -tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' +tar tf archive +decho 'adding d e f' +tar -vrf archive -b3 d e f +echo == +tar tf archive -echo "Not transforming hard links" -tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' +decho 'adding g h i' +tar -vrf archive -b5 g h i +decho 'resulting archive' +tar tf archive ) 60. exclude01.at:19: testing exclude wildcards ... ./exclude01.at:22: @@ -5919,95 +5932,65 @@ rm -rf testdir ) -./xform02.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./numeric.at:29: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * -genfile --file file -tar cvf /dev/null file \ - --transform='s/file/other\/name/' \ - --show-transformed-name -) -57. xform02.at:21: ok -stderr: -./append05.at:35: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * +MYUID=$(id -u) || exit 77 +MYGID=$(id -g) || exit 77 +MYUSR=$(id -un) || exit 77 +MYGRP=$(id -gn) || exit 77 -for f in a b c d e f g h i -do - echo $f > $f -done +mkdir dir +# Ensure correct group id on BSDs. +chown :$MYGID dir >/dev/null 2>/dev/null +genfile --file dir/file -decho 'creating archive' -tar -cf archive -b1 a b c -tar tf archive -decho 'adding d e f' -tar -vrf archive -b3 d e f -echo == -tar tf archive +decho --create +tar --create -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --create -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' -decho 'adding g h i' -tar -vrf archive -b5 g h i -decho 'resulting archive' -tar tf archive -) -./append03.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * +decho --list +tar --list -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --list -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' -genfile --file file.1 -genfile --file file.2 -tar -c -f archive --transform 's/file/plik/' file.* -echo Appending -tar -r -f archive --transform 's/file/plik/' -v --show-transformed-names file.1 -echo Testing -tar tf archive +decho --diff +tar --diff -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --diff -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' + + +decho --extract +tar --extract -vvf a dir --numeric-owner | awk '=="'"$MYUID/$MYGID"'" {print "OK"; next} {print}' +tar --extract -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' + ) -50. append01.at:29: ok -48. same-order02.at:25: ok -./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr -./xform03.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu + + +./xform02.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * -mkdir d -mkdir d/a -genfile --file d/a/b -dir=$(pwd|sed s,^//*,,)/d -tar -cf a.tar --xform="s|^$dir/a|dir/c|" /$dir/a/b /$dir/a/b 2>err -mkdir t -tar -C t -xf a.tar -find t -type f +genfile --file file +tar cvf /dev/null file \ + --transform='s/file/other\/name/' \ + --show-transformed-name ) - - -46. numeric.at:18: ok -./append04.at:32: +52. append03.at:21: ok +./append02.at:57: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -6016,54 +5999,76 @@ export TAR_OPTIONS rm -rf * -# Create two empty files: -touch file1 file2 +genfile --file file1 +genfile --file file2 -# Create an archive: -tar cpfW archive.tar file1 file2 +# Make sure file timestamps in the archive will not differ +MTIME="--mtime=@0" -# Verify created archive by listing its content: -tar -tf archive.tar -echo == -# Create another empty file: -touch file3 +# For PAX archives, we need to make sure extended header names are +# reproducible and that their contents won't change with time +if test $TEST_TAR_FORMAT = posix; then + TAR_OPTIONS="$TAR_OPTIONS --pax-option=exthdr.name=%d/PaxHeaders/%f,delete=mtime,delete=atime,delete=ctime" +fi -# Append it to the already created archive: -tar rpfW archive.tar file3 +echo Creating archive.1 +tar $MTIME -cf archive.1 file1 file2 -# Verify content of the new archive: -tar -tf archive.tar +echo Creating archive.2 +tar $MTIME -cf archive.2 -T /dev/null +tar $MTIME -rf archive.2 file1 +tar $MTIME -rf archive.2 file2 + +echo Comparing archives +cmp archive.1 archive.2 ) -./xform-h.at:39: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +stderr: +62. exclude03.at:19: testing exclude: wildcards match slash ... +./exclude03.at:22: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * -mkdir basedir -echo "hello" > basedir/test -ln basedir/test basedir/test_link +test -z "`sort < /dev/null 2>&1`" || exit 77 -echo "Default transform scope" -tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' +rm -rf testdir +mkdir -p testdir/dir1 testdir/dir2 testdir/dir3 +touch testdir/\*f\*1 +touch testdir/dir1/file1 +touch testdir/dir1/\* +touch testdir/dir2/file2 +touch testdir/dir2/\* +touch testdir/dir3/file3 +touch testdir/dir3/\* -echo "Transforming hard links" -tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' +tar cf archive --exclude='testdir*f*1' \ + --no-wildcards-match-slash \ + --exclude='testdir*f*2' \ + --wildcards-match-slash \ + --exclude='testdir*f*3' \ + testdir +tar tf archive | sort +echo "NEXT" +tar cf archive testdir +tar t --wildcards 'testdir/*f*1' -f archive | sort -echo "Not transforming hard links" -tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' +echo "NEXT" +tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort + +echo "NEXT" +tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort + +rm -rf testdir ) -52. append03.at:21: ok +./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr 61. exclude02.at:19: testing exclude: anchoring ... ./exclude02.at:22: mkdir v7 @@ -6113,51 +6118,66 @@ rm -rf testdir file1.txt ) -51. append02.at:54: ok +./xform03.at:24: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -62. exclude03.at:19: testing exclude: wildcards match slash ... -./exclude03.at:22: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +mkdir d +mkdir d/a +genfile --file d/a/b +dir=$(pwd|sed s,^//*,,)/d +tar -cf a.tar --xform="s|^$dir/a|dir/c|" /$dir/a/b /$dir/a/b 2>err +mkdir t +tar -C t -xf a.tar +find t -type f +) +./xform02.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * +genfile --file file +tar cvf /dev/null file \ + --transform='s/file/other\/name/' \ + --show-transformed-name +) -test -z "`sort < /dev/null 2>&1`" || exit 77 +./xform-h.at:39: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * +mkdir basedir +echo "hello" > basedir/test +ln basedir/test basedir/test_link -rm -rf testdir -mkdir -p testdir/dir1 testdir/dir2 testdir/dir3 -touch testdir/\*f\*1 -touch testdir/dir1/file1 -touch testdir/dir1/\* -touch testdir/dir2/file2 -touch testdir/dir2/\* -touch testdir/dir3/file3 -touch testdir/dir3/\* -tar cf archive --exclude='testdir*f*1' \ - --no-wildcards-match-slash \ - --exclude='testdir*f*2' \ - --wildcards-match-slash \ - --exclude='testdir*f*3' \ - testdir -tar tf archive | sort +echo "Default transform scope" +tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' -echo "NEXT" -tar cf archive testdir -tar t --wildcards 'testdir/*f*1' -f archive | sort -echo "NEXT" -tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort +echo "Transforming hard links" +tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' -echo "NEXT" -tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort -rm -rf testdir +echo "Not transforming hard links" +tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' ) 63. exclude04.at:19: testing exclude: case insensitive ... @@ -6208,12 +6228,27 @@ rm -rf testdir ) +53. append04.at:29: ok +./xform02.at:24: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +genfile --file file +tar cvf /dev/null file \ + --transform='s/file/other\/name/' \ + --show-transformed-name +) ./append05.at:35: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -6238,8 +6273,6 @@ decho 'resulting archive' tar tf archive ) - - ./exclude01.at:22: mkdir oldgnu (cd oldgnu @@ -6285,6 +6318,7 @@ rm -rf testdir ) +51. append02.at:54: ok 64. exclude05.at:21: testing exclude: lots of excludes ... ./exclude05.at:24: mkdir v7 @@ -6321,97 +6355,92 @@ rm -rf testdir exclfile ) +46. numeric.at:18: ok stderr: -53. append04.at:29: ok +57. xform02.at:21: ok +59. exclude.at:23: ok ./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr -66. exclude07.at:19: testing exclude: --exclude-backups option ... -./exclude07.at:22: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +54. append05.at:32: ok + +./exclude02.at:22: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * -mkdir dir -genfile --file dir/file -genfile --file dir/file~ -genfile --file "dir/.#file" -genfile --file "dir/#file#" -tar -v -c -f archive --exclude-backups dir -) -./xform03.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * +test -z "`sort < /dev/null 2>&1`" || exit 77 -mkdir d -mkdir d/a -genfile --file d/a/b -dir=$(pwd|sed s,^//*,,)/d -tar -cf a.tar --xform="s|^$dir/a|dir/c|" /$dir/a/b /$dir/a/b 2>err -mkdir t -tar -C t -xf a.tar -find t -type f -) -65. exclude06.at:26: testing exclude: long files in pax archives ... -./exclude06.at:31: -mkdir pax -(cd pax -TEST_TAR_FORMAT=pax -export TEST_TAR_FORMAT -TAR_OPTIONS="-H pax" -export TAR_OPTIONS -rm -rf * +rm -rf testdir +mkdir -p testdir +touch file1.txt +touch testdir/file1.txt +touch testdir/file2 -install-sh -d one/two/three/four/five/six/seven/eight/nine/ten/eleven/twelve/thirteen/fourteen/fifteen/sixteen/seventeen >/dev/null || exit 77 -genfile --length 20 -f one/two/three/four/five/six/seven/eight/nine/ten/eleven/twelve/thirteen/fourteen/fifteen/sixteen/seventeen/1.txt -genfile --length 20 -f one/two/three/four/five/six/seven/eight/nine/ten/eleven/twelve/thirteen/fourteen/fifteen/sixteen/seventeen/1.c +tar cf archive --exclude="file1.txt" \ + testdir +tar tf archive | sort + +echo "SUB 1" +tar cf archive --no-anchored \ + --exclude="file1.txt" \ + testdir +tar tf archive | sort + +echo "SUB 2" +tar cf archive --anchored \ + --exclude="file1.txt" \ + testdir +tar tf archive | sort + +echo "SUB 3" +tar cf archive testdir file1.txt +tar t "file1.txt" -f archive | sort + +echo "SUB 4" +tar t --no-anchored "file1.txt" -f archive | sort + +echo "SUB 5" +tar t --anchored "file1.txt" -f archive | sort + +rm -rf testdir file1.txt -tar cf archive.tar one/two/three/four/five/six/seven/eight/nine/ten/eleven/twelve/thirteen/fourteen/fifteen/sixteen/seventeen -mkdir out -tar -C out -xf archive.tar --exclude='*.txt' --warning=no-timestamp -find out -type f ) -59. exclude.at:23: ok -./append05.at:35: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu + + +./xform-h.at:39: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * -for f in a b c d e f g h i -do - echo $f > $f -done +mkdir basedir +echo "hello" > basedir/test +ln basedir/test basedir/test_link -decho 'creating archive' -tar -cf archive -b1 a b c -tar tf archive +echo "Default transform scope" +tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' -decho 'adding d e f' -tar -vrf archive -b3 d e f -echo == -tar tf archive -decho 'adding g h i' -tar -vrf archive -b5 g h i +echo "Transforming hard links" +tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' -decho 'resulting archive' -tar tf archive -) +echo "Not transforming hard links" +tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' + +) ./exclude03.at:22: mkdir oldgnu (cd oldgnu @@ -6456,41 +6485,34 @@ rm -rf testdir ) -./xform-h.at:39: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +65. exclude06.at:26: testing exclude: long files in pax archives ... +./exclude06.at:31: +mkdir pax +(cd pax +TEST_TAR_FORMAT=pax export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H pax" export TAR_OPTIONS rm -rf * -mkdir basedir -echo "hello" > basedir/test -ln basedir/test basedir/test_link +install-sh -d one/two/three/four/five/six/seven/eight/nine/ten/eleven/twelve/thirteen/fourteen/fifteen/sixteen/seventeen >/dev/null || exit 77 +genfile --length 20 -f one/two/three/four/five/six/seven/eight/nine/ten/eleven/twelve/thirteen/fourteen/fifteen/sixteen/seventeen/1.txt +genfile --length 20 -f one/two/three/four/five/six/seven/eight/nine/ten/eleven/twelve/thirteen/fourteen/fifteen/sixteen/seventeen/1.c -echo "Default transform scope" -tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' - - -echo "Transforming hard links" -tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' - - -echo "Not transforming hard links" -tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link -tar tvf archive | sed -n 's/.*test_link link to //p' - +tar cf archive.tar one/two/three/four/five/six/seven/eight/nine/ten/eleven/twelve/thirteen/fourteen/fifteen/sixteen/seventeen +mkdir out +tar -C out -xf archive.tar --exclude='*.txt' --warning=no-timestamp +find out -type f ) + +66. exclude07.at:19: testing exclude: --exclude-backups option ... ./exclude07.at:22: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * @@ -6502,15 +6524,12 @@ tar -v -c -f archive --exclude-backups dir ) -stderr: - -./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr ./xform03.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -6539,91 +6558,142 @@ mkexcltest etest tar -c -f etest.tar --exclude-tag=excludeme --listed=snar -v etest | sort ) -./exclude02.at:22: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +67. exclude08.at:36: testing --exclude-tag option ... +./exclude08.at:39: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * test -z "`sort < /dev/null 2>&1`" || exit 77 +mkexcltest etest +tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort +) -rm -rf testdir -mkdir -p testdir -touch file1.txt -touch testdir/file1.txt -touch testdir/file2 +./exclude01.at:22: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * -tar cf archive --exclude="file1.txt" \ - testdir -tar tf archive | sort -echo "SUB 1" -tar cf archive --no-anchored \ - --exclude="file1.txt" \ - testdir -tar tf archive | sort +test -z "`sort < /dev/null 2>&1`" || exit 77 -echo "SUB 2" -tar cf archive --anchored \ - --exclude="file1.txt" \ + +rm -rf testdir +mkdir -p testdir/dir1 testdir/dir2 testdir/dir3 +touch testdir/dir1/file1 +touch testdir/dir1/\* +touch testdir/dir2/file2 +touch testdir/dir2/\* +touch testdir/dir3/file3 +touch testdir/dir3/\* + +tar cf archive --exclude=testdir/dir1/\* \ + --no-wildcards \ + --exclude=testdir/dir2/\* \ + --wildcards \ + --exclude=testdir/dir3/\* \ testdir tar tf archive | sort -echo "SUB 3" -tar cf archive testdir file1.txt -tar t "file1.txt" -f archive | sort - -echo "SUB 4" -tar t --no-anchored "file1.txt" -f archive | sort +echo "NEXT" +tar cf archive testdir +tar t "testdir/dir1/*" -f archive | sort -echo "SUB 5" -tar t --anchored "file1.txt" -f archive | sort +echo "NEXT" +tar cf archive testdir/dir1 +tar t --no-wildcards "testdir/dir1/*" -f archive | sort -rm -rf testdir file1.txt +echo "NEXT" +tar cf archive testdir +tar t --wildcards "testdir/dir1/*" -f archive | sort +rm -rf testdir ) -54. append05.at:32: ok -./exclude07.at:22: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +69. exclude10.at:38: testing --exclude-tag option in incremental pass ... +./exclude10.at:41: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * -mkdir dir -genfile --file dir/file -genfile --file dir/file~ -genfile --file "dir/.#file" -genfile --file "dir/#file#" -tar -v -c -f archive --exclude-backups dir +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkexcltest etest +rm etest/subdir/excludeme +decho "# Level 0" +tar -c -f etest-0.tar --exclude-tag=excludeme --listed=snar-0 -v etest | sort +touch etest/subdir/excludeme +touch etest/subdir/otherfile + +decho "# Level 1" +cp snar-0 snar-1 +tar -c -f etest-1.tar --exclude-tag=excludeme --listed=snar-1 -v etest | sort ) -65. exclude06.at:26: ok -67. exclude08.at:36: testing --exclude-tag option ... -./exclude08.at:39: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +stderr: +68. exclude09.at:37: ok +./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr +./xform-h.at:39: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * +mkdir basedir +echo "hello" > basedir/test +ln basedir/test basedir/test_link -test -z "`sort < /dev/null 2>&1`" || exit 77 -mkexcltest etest -tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort +echo "Default transform scope" +tar cf archive --transform="s,^basedir/,," basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' + + +echo "Transforming hard links" +tar cf archive --transform="s,^basedir/,,h" basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' + + +echo "Not transforming hard links" +tar cf archive --transform="s,^basedir/,,H" basedir/test basedir/test_link +tar tvf archive | sed -n 's/.*test_link link to //p' + ) -stderr: +./xform03.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * +mkdir d +mkdir d/a +genfile --file d/a/b +dir=$(pwd|sed s,^//*,,)/d +tar -cf a.tar --xform="s|^$dir/a|dir/c|" /$dir/a/b /$dir/a/b 2>err +mkdir t +tar -C t -xf a.tar +find t -type f +) +65. exclude06.at:26: ok ./exclude08.at:39: mkdir oldgnu (cd oldgnu @@ -6639,7 +6709,8 @@ mkexcltest etest tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort ) -./exclude01.at:22: + +./exclude02.at:22: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -6653,38 +6724,41 @@ rm -rf testdir -mkdir -p testdir/dir1 testdir/dir2 testdir/dir3 -touch testdir/dir1/file1 -touch testdir/dir1/\* -touch testdir/dir2/file2 -touch testdir/dir2/\* -touch testdir/dir3/file3 -touch testdir/dir3/\* +mkdir -p testdir +touch file1.txt +touch testdir/file1.txt +touch testdir/file2 -tar cf archive --exclude=testdir/dir1/\* \ - --no-wildcards \ - --exclude=testdir/dir2/\* \ - --wildcards \ - --exclude=testdir/dir3/\* \ +tar cf archive --exclude="file1.txt" \ testdir tar tf archive | sort -echo "NEXT" -tar cf archive testdir -tar t "testdir/dir1/*" -f archive | sort +echo "SUB 1" +tar cf archive --no-anchored \ + --exclude="file1.txt" \ + testdir +tar tf archive | sort -echo "NEXT" -tar cf archive testdir/dir1 -tar t --no-wildcards "testdir/dir1/*" -f archive | sort +echo "SUB 2" +tar cf archive --anchored \ + --exclude="file1.txt" \ + testdir +tar tf archive | sort -echo "NEXT" -tar cf archive testdir -tar t --wildcards "testdir/dir1/*" -f archive | sort +echo "SUB 3" +tar cf archive testdir file1.txt +tar t "file1.txt" -f archive | sort + +echo "SUB 4" +tar t --no-anchored "file1.txt" -f archive | sort + +echo "SUB 5" +tar t --anchored "file1.txt" -f archive | sort + +rm -rf testdir file1.txt -rm -rf testdir ) -./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr -55. xform-h.at:30: ./exclude04.at:22: +./exclude04.at:22: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -6731,31 +6805,12 @@ rm -rf testdir ) - ok -./xform03.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -mkdir d -mkdir d/a -genfile --file d/a/b -dir=$(pwd|sed s,^//*,,)/d -tar -cf a.tar --xform="s|^$dir/a|dir/c|" /$dir/a/b /$dir/a/b 2>err -mkdir t -tar -C t -xf a.tar -find t -type f -) ./exclude07.at:22: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -6767,6 +6822,25 @@ tar -v -c -f archive --exclude-backups dir ) +70. exclude11.at:36: testing --exclude-tag-under option ... +./exclude11.at:39: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkexcltest etest +tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort +) + +69. exclude10.at:38: ok +stderr: ./exclude03.at:22: mkdir ustar (cd ustar @@ -6811,38 +6885,12 @@ rm -rf testdir ) -69. exclude10.at:38: testing --exclude-tag option in incremental pass ... -./exclude10.at:41: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -rm etest/subdir/excludeme -decho "# Level 0" -tar -c -f etest-0.tar --exclude-tag=excludeme --listed=snar-0 -v etest | sort -touch etest/subdir/excludeme -touch etest/subdir/otherfile - -decho "# Level 1" -cp snar-0 snar-1 -tar -c -f etest-1.tar --exclude-tag=excludeme --listed=snar-1 -v etest | sort -) - - -./exclude02.at:22: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./exclude01.at:22: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -6851,41 +6899,38 @@ rm -rf testdir -mkdir -p testdir -touch file1.txt -touch testdir/file1.txt -touch testdir/file2 - -tar cf archive --exclude="file1.txt" \ - testdir -tar tf archive | sort - -echo "SUB 1" -tar cf archive --no-anchored \ - --exclude="file1.txt" \ - testdir -tar tf archive | sort +mkdir -p testdir/dir1 testdir/dir2 testdir/dir3 +touch testdir/dir1/file1 +touch testdir/dir1/\* +touch testdir/dir2/file2 +touch testdir/dir2/\* +touch testdir/dir3/file3 +touch testdir/dir3/\* -echo "SUB 2" -tar cf archive --anchored \ - --exclude="file1.txt" \ +tar cf archive --exclude=testdir/dir1/\* \ + --no-wildcards \ + --exclude=testdir/dir2/\* \ + --wildcards \ + --exclude=testdir/dir3/\* \ testdir tar tf archive | sort -echo "SUB 3" -tar cf archive testdir file1.txt -tar t "file1.txt" -f archive | sort - -echo "SUB 4" -tar t --no-anchored "file1.txt" -f archive | sort +echo "NEXT" +tar cf archive testdir +tar t "testdir/dir1/*" -f archive | sort -echo "SUB 5" -tar t --anchored "file1.txt" -f archive | sort +echo "NEXT" +tar cf archive testdir/dir1 +tar t --no-wildcards "testdir/dir1/*" -f archive | sort -rm -rf testdir file1.txt +echo "NEXT" +tar cf archive testdir +tar t --wildcards "testdir/dir1/*" -f archive | sort +rm -rf testdir ) -./exclude07.at:22: +71. exclude12.at:37: testing --exclude-tag-under and --listed-incremental ... +./exclude12.at:40: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -6894,15 +6939,14 @@ export TAR_OPTIONS rm -rf * -mkdir dir -genfile --file dir/file -genfile --file dir/file~ -genfile --file "dir/.#file" -genfile --file "dir/#file#" -tar -v -c -f archive --exclude-backups dir +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkexcltest etest +tar -c -f etest.tar --exclude-tag-under=excludeme --listed=snar -v etest | sort ) -./exclude08.at:39: +./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr +./exclude07.at:22: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -6911,14 +6955,17 @@ export TAR_OPTIONS rm -rf * +mkdir dir +genfile --file dir/file +genfile --file dir/file~ +genfile --file "dir/.#file" +genfile --file "dir/#file#" -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort +tar -v -c -f archive --exclude-backups dir ) -68. exclude09.at:37: 71. exclude12.at:37: testing --exclude-tag-under and --listed-incremental ... -./exclude12.at:40: +55. xform-h.at:30: ok + +./xform03.at:24: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -6927,50 +6974,15 @@ export TAR_OPTIONS rm -rf * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag-under=excludeme --listed=snar -v etest | sort -) - ok -stderr: -./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr -58. xform03.at:21: ok -66. exclude07.at:19: 70. exclude11.at:36: testing --exclude-tag-under option ... -./exclude11.at:39: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort -) - ok - -./exclude08.at:39: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort +mkdir d +mkdir d/a +genfile --file d/a/b +dir=$(pwd|sed s,^//*,,)/d +tar -cf a.tar --xform="s|^$dir/a|dir/c|" /$dir/a/b /$dir/a/b 2>err +mkdir t +tar -C t -xf a.tar +find t -type f ) - 72. exclude13.at:39: testing --exclude-tag-under option in incremental pass ... ./exclude13.at:42: mkdir gnu @@ -6995,53 +7007,22 @@ cp snar-0 snar-1 tar -c -f etest-1.tar --exclude-tag-under=excludeme --listed=snar-1 -v etest | sort ) -./exclude04.at:22: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./exclude11.at:39: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * test -z "`sort < /dev/null 2>&1`" || exit 77 - -rm -rf testdir -mkdir -p testdir/dir -touch testdir/file1 -touch testdir/file2 -touch testdir/file3 -touch testdir/file4 -touch testdir/dir/File1 -touch testdir/dir/File2 -touch testdir/dir/File3 -touch testdir/dir/File4 - -tar cf archive --exclude=FILE2 \ - --exclude=file1 \ - --ignore-case \ - --exclude=file3 \ - --no-ignore-case \ - --exclude=FILE2 \ - --exclude=file4 \ - testdir -tar tf archive | sort - -echo "SUB 1" -tar cf archive testdir -tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort - -echo "SUB 2" -tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort - -echo "SUB 3" -tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort - -rm -rf testdir - +mkexcltest etest +tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort ) + 73. exclude14.at:36: testing --exclude-tag-all option ... ./exclude14.at:39: mkdir v7 @@ -7058,59 +7039,12 @@ mkexcltest etest tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort ) - -69. exclude10.at:38: ok -./exclude01.at:22: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -rm -rf testdir -mkdir -p testdir/dir1 testdir/dir2 testdir/dir3 -touch testdir/dir1/file1 -touch testdir/dir1/\* -touch testdir/dir2/file2 -touch testdir/dir2/\* -touch testdir/dir3/file3 -touch testdir/dir3/\* - -tar cf archive --exclude=testdir/dir1/\* \ - --no-wildcards \ - --exclude=testdir/dir2/\* \ - --wildcards \ - --exclude=testdir/dir3/\* \ - testdir -tar tf archive | sort - -echo "NEXT" -tar cf archive testdir -tar t "testdir/dir1/*" -f archive | sort - -echo "NEXT" -tar cf archive testdir/dir1 -tar t --no-wildcards "testdir/dir1/*" -f archive | sort - -echo "NEXT" -tar cf archive testdir -tar t --wildcards "testdir/dir1/*" -f archive | sort - -rm -rf testdir -) -71. exclude12.at:37: ok -./exclude11.at:39: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./exclude08.at:39: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -7118,25 +7052,28 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 mkexcltest etest -tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort +tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort ) -74. exclude15.at:36: testing --exclude-tag-all and --listed-incremental ... -./exclude15.at:39: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +71. exclude12.at:37: ok +stderr: +./exclude07.at:22: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * +mkdir dir +genfile --file dir/file +genfile --file dir/file~ +genfile --file "dir/.#file" +genfile --file "dir/#file#" -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag-all=excludeme --listed=snar -v etest | sort +tar -v -c -f archive --exclude-backups dir ) - +./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr ./exclude02.at:22: mkdir posix (cd posix @@ -7185,22 +7122,7 @@ rm -rf testdir file1.txt ) -./exclude11.at:39: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort -) -72. exclude13.at:39: ok +58. xform03.at:21: ok ./exclude14.at:39: mkdir oldgnu @@ -7217,8 +7139,8 @@ mkexcltest etest tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort ) -75. exclude16.at:38: testing --exclude-tag-all option in incremental pass ... -./exclude16.at:41: +74. exclude15.at:36: testing --exclude-tag-all and --listed-incremental ... +./exclude15.at:39: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -7231,48 +7153,74 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 mkexcltest etest -rm etest/subdir/excludeme -decho "# Level 0" -tar -c -f etest-0.tar --exclude-tag-all=excludeme --listed=snar-0 -v etest | sort -touch etest/subdir/excludeme -touch etest/subdir/otherfile - -decho "# Level 1" -cp snar-0 snar-1 -tar -c -f etest-1.tar --exclude-tag-all=excludeme --listed=snar-1 -v etest | sort +tar -c -f etest.tar --exclude-tag-all=excludeme --listed=snar -v etest | sort ) - -74. exclude15.at:36: ok -76. exclude17.at:21: testing --exclude-vcs-ignores memory allocation ... -./exclude17.at:24: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +./exclude07.at:22: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * mkdir dir -cd dir -echo '*.o' >.cvsignore -tar -cf - --exclude-vcs-ignores . | tar -tf - +genfile --file dir/file +genfile --file dir/file~ +genfile --file "dir/.#file" +genfile --file "dir/#file#" + +tar -v -c -f archive --exclude-backups dir ) -./exclude08.at:39: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./exclude04.at:22: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * test -z "`sort < /dev/null 2>&1`" || exit 77 -mkexcltest etest -tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort + +rm -rf testdir +mkdir -p testdir/dir +touch testdir/file1 +touch testdir/file2 +touch testdir/file3 +touch testdir/file4 +touch testdir/dir/File1 +touch testdir/dir/File2 +touch testdir/dir/File3 +touch testdir/dir/File4 + +tar cf archive --exclude=FILE2 \ + --exclude=file1 \ + --ignore-case \ + --exclude=file3 \ + --no-ignore-case \ + --exclude=FILE2 \ + --exclude=file4 \ + testdir +tar tf archive | sort + +echo "SUB 1" +tar cf archive testdir +tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort + +echo "SUB 2" +tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort + +echo "SUB 3" +tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort + +rm -rf testdir + ) +72. exclude13.at:39: ok + ./exclude03.at:22: mkdir posix (cd posix @@ -7317,59 +7265,67 @@ rm -rf testdir ) -77. exclude18.at:30: testing --exclude-vcs extract list compare ... -./exclude18.at:33: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +./exclude14.at:39: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * test -z "`sort < /dev/null 2>&1`" || exit 77 -mkdir gitrepo -cd gitrepo - -# Make an empty VCS directory: -mkdir .svn +mkexcltest etest +tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort +) -# Make a VCS directory with a file: -mkdir .git -touch .git/_A +75. exclude16.at:38: testing --exclude-tag-all option in incremental pass ... +./exclude16.at:41: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -# Make a VCS file: -touch .gitignore -# Make non-VCS files: -touch .git_B -touch _C +test -z "`sort < /dev/null 2>&1`" || exit 77 -# Create an archive, include VCS: -cd .. -tar -cf gitrepo.tar gitrepo -rm -r gitrepo +mkexcltest etest +rm etest/subdir/excludeme +decho "# Level 0" +tar -c -f etest-0.tar --exclude-tag-all=excludeme --listed=snar-0 -v etest | sort +touch etest/subdir/excludeme +touch etest/subdir/otherfile -echo Extract: -tar -xvf gitrepo.tar --exclude-vcs | sort +decho "# Level 1" +cp snar-0 snar-1 +tar -c -f etest-1.tar --exclude-tag-all=excludeme --listed=snar-1 -v etest | sort +) +./exclude11.at:39: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * -echo -echo List: -tar -tf gitrepo.tar --exclude-vcs | sort -echo -echo Diff: -tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort +test -z "`sort < /dev/null 2>&1`" || exit 77 +mkexcltest etest +tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort ) -./exclude04.at:22: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./exclude01.at:22: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -7378,55 +7334,53 @@ rm -rf testdir -mkdir -p testdir/dir -touch testdir/file1 -touch testdir/file2 -touch testdir/file3 -touch testdir/file4 -touch testdir/dir/File1 -touch testdir/dir/File2 -touch testdir/dir/File3 -touch testdir/dir/File4 +mkdir -p testdir/dir1 testdir/dir2 testdir/dir3 +touch testdir/dir1/file1 +touch testdir/dir1/\* +touch testdir/dir2/file2 +touch testdir/dir2/\* +touch testdir/dir3/file3 +touch testdir/dir3/\* -tar cf archive --exclude=FILE2 \ - --exclude=file1 \ - --ignore-case \ - --exclude=file3 \ - --no-ignore-case \ - --exclude=FILE2 \ - --exclude=file4 \ +tar cf archive --exclude=testdir/dir1/\* \ + --no-wildcards \ + --exclude=testdir/dir2/\* \ + --wildcards \ + --exclude=testdir/dir3/\* \ testdir tar tf archive | sort -echo "SUB 1" +echo "NEXT" tar cf archive testdir -tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort +tar t "testdir/dir1/*" -f archive | sort -echo "SUB 2" -tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort +echo "NEXT" +tar cf archive testdir/dir1 +tar t --no-wildcards "testdir/dir1/*" -f archive | sort -echo "SUB 3" -tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort +echo "NEXT" +tar cf archive testdir +tar t --wildcards "testdir/dir1/*" -f archive | sort rm -rf testdir - ) -./exclude14.at:39: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +76. exclude17.at:21: testing --exclude-vcs-ignores memory allocation ... +./exclude17.at:24: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort +mkdir dir +cd dir +echo '*.o' >.cvsignore +tar -cf - --exclude-vcs-ignores . | tar -tf - ) -./exclude11.at:39: +66. exclude07.at:19: ok +./exclude08.at:39: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -7439,9 +7393,9 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 mkexcltest etest -tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort +tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort ) - +74. exclude15.at:36: ok ./exclude17.at:24: mkdir oldgnu (cd oldgnu @@ -7456,7 +7410,7 @@ echo '*.o' >.cvsignore tar -cf - --exclude-vcs-ignores . | tar -tf - ) -75. exclude16.at:38: ok + ./exclude02.at:22: mkdir gnu (cd gnu @@ -7505,6 +7459,22 @@ rm -rf testdir file1.txt ) + +./exclude11.at:39: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkexcltest etest +tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort +) 78. delete01.at:23: testing deleting a member after a big one ... ./delete01.at:26: mkdir v7 @@ -7522,6 +7492,54 @@ tar tf archout tar f archive --delete file2 cmp archive archout) +77. exclude18.at:30: testing --exclude-vcs extract list compare ... +./exclude18.at:33: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir gitrepo +cd gitrepo + +# Make an empty VCS directory: +mkdir .svn + +# Make a VCS directory with a file: +mkdir .git +touch .git/_A + +# Make a VCS file: +touch .gitignore + +# Make non-VCS files: +touch .git_B +touch _C + +# Create an archive, include VCS: +cd .. +tar -cf gitrepo.tar gitrepo +rm -r gitrepo + +echo Extract: +tar -xvf gitrepo.tar --exclude-vcs | sort + +echo +echo List: +tar -tf gitrepo.tar --exclude-vcs | sort + +echo +echo Diff: +tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort + +) +75. exclude16.at:38: ok ./exclude17.at:24: mkdir ustar (cd ustar @@ -7536,8 +7554,7 @@ echo '*.o' >.cvsignore tar -cf - --exclude-vcs-ignores . | tar -tf - ) - -./exclude01.at:22: +./exclude08.at:39: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -7549,37 +7566,85 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 +mkexcltest etest +tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort +) +./exclude14.at:39: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkexcltest etest +tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort +) + +./exclude17.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +mkdir dir +cd dir +echo '*.o' >.cvsignore +tar -cf - --exclude-vcs-ignores . | tar -tf - +) +./exclude04.at:22: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + rm -rf testdir -mkdir -p testdir/dir1 testdir/dir2 testdir/dir3 -touch testdir/dir1/file1 -touch testdir/dir1/\* -touch testdir/dir2/file2 -touch testdir/dir2/\* -touch testdir/dir3/file3 -touch testdir/dir3/\* +mkdir -p testdir/dir +touch testdir/file1 +touch testdir/file2 +touch testdir/file3 +touch testdir/file4 +touch testdir/dir/File1 +touch testdir/dir/File2 +touch testdir/dir/File3 +touch testdir/dir/File4 -tar cf archive --exclude=testdir/dir1/\* \ - --no-wildcards \ - --exclude=testdir/dir2/\* \ - --wildcards \ - --exclude=testdir/dir3/\* \ +tar cf archive --exclude=FILE2 \ + --exclude=file1 \ + --ignore-case \ + --exclude=file3 \ + --no-ignore-case \ + --exclude=FILE2 \ + --exclude=file4 \ testdir tar tf archive | sort -echo "NEXT" +echo "SUB 1" tar cf archive testdir -tar t "testdir/dir1/*" -f archive | sort +tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort -echo "NEXT" -tar cf archive testdir/dir1 -tar t --no-wildcards "testdir/dir1/*" -f archive | sort +echo "SUB 2" +tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort -echo "NEXT" -tar cf archive testdir -tar t --wildcards "testdir/dir1/*" -f archive | sort +echo "SUB 3" +tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort rm -rf testdir + ) 79. delete02.at:23: testing deleting a member from stdin archive ... ./delete02.at:26: @@ -7616,12 +7681,43 @@ mkexcltest etest tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort ) +./delete01.at:26: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile -l 50000 --file file1 +genfile -l 1024 --file file2 +tar cf archive file1 file2 +tar -f - --delete file2 archout +tar tf archout +tar f archive --delete file2 +cmp archive archout) +./exclude14.at:39: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkexcltest etest +tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort +) ./exclude17.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -7630,7 +7726,93 @@ echo '*.o' >.cvsignore tar -cf - --exclude-vcs-ignores . | tar -tf - ) +60. exclude01.at:19: ok 67. exclude08.at:36: ok + +76. exclude17.at:21: ok +61. exclude02.at:19: ok +./delete02.at:26: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile -l 3073 -p zeros --file 1 +cp 1 2 +cp 2 3 +tar cf archive 1 2 3 +tar tf archive +cat archive | tar f - --delete 2 > archive2 +echo separator +tar tf archive2 +tar f - --delete 2 < archive > archive3 +cmp archive2 archive3) + +70. exclude11.at:36: ok +./delete01.at:26: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + +genfile -l 50000 --file file1 +genfile -l 1024 --file file2 +tar cf archive file1 file2 +tar -f - --delete file2 archout +tar tf archout +tar f archive --delete file2 +cmp archive archout) +81. delete04.at:23: testing deleting a large last member ... +./delete04.at:26: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + +genfile -l 3 -f file1 +genfile -l 5 -f file2 +genfile -l 3 -f file3 +genfile -l 6 -f file4 +genfile -l 24 -f file5 +genfile -l 13 -f file6 +genfile -l 1385 -f file7 +genfile -l 30 -f file8 +genfile -l 10 -f file9 +genfile -l 256000 -f file10 +tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 +tar f archive --delete file10 +tar tf archive +) +80. delete03.at:21: testing deleting members with long names ... +./delete03.at:26: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + + +prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX +rm -f $prefix* +for i in 1 2 3 4 5 6 7 8 9 +do touch $prefix$i +done +tar -cf archive ./$prefix* && + tar --delete -f archive ./${prefix}5 && + tar -tf archive +) + ./exclude18.at:33: mkdir oldgnu (cd oldgnu @@ -7677,37 +7859,44 @@ tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort ) -./exclude14.at:39: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +73. exclude14.at:36: + ok + +84. extrac01.at:23: testing extract over an existing directory ... +./extrac01.at:26: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort +mkdir directory +touch directory/file +tar cf archive directory || exit 1 +tar xf archive --warning=no-timestamp || exit 1 ) -./delete01.at:26: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +82. delete05.at:27: testing deleting non-existing member ... +./delete05.at:30: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * -genfile -l 50000 --file file1 -genfile -l 1024 --file file2 -tar cf archive file1 file2 -tar -f - --delete file2 archout -tar tf archout -tar f archive --delete file2 -cmp archive archout) +genfile -l 1024 -f en +genfile -l 1024 -f to + +tar cf archive en to +# Make sure we don't use bogus blocking factor. +# GNU tar up to and including 1.14.91 produced an empty archive this way: +tar --file archive --blocking-factor=20 --delete tre +tar tf archive +) + ./exclude04.at:22: mkdir gnu (cd gnu @@ -7755,60 +7944,6 @@ rm -rf testdir ) -./exclude17.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -mkdir dir -cd dir -echo '*.o' >.cvsignore -tar -cf - --exclude-vcs-ignores . | tar -tf - -) -./delete02.at:26: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -genfile -l 3073 -p zeros --file 1 -cp 1 2 -cp 2 3 -tar cf archive 1 2 3 -tar tf archive -cat archive | tar f - --delete 2 > archive2 -echo separator -tar tf archive2 -tar f - --delete 2 < archive > archive3 -cmp archive2 archive3) -./exclude14.at:39: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort -) -70. exclude11.at:36: ok - -76. exclude17.at:21: ok -61. exclude02.at:19: ok - - ./exclude03.at:22: mkdir gnu (cd gnu @@ -7853,52 +7988,44 @@ rm -rf testdir ) -80. delete03.at:21: testing deleting members with long names ... -./delete03.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./delete01.at:26: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * - -prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX -rm -f $prefix* -for i in 1 2 3 4 5 6 7 8 9 -do touch $prefix$i -done -tar -cf archive ./$prefix* && - tar --delete -f archive ./${prefix}5 && - tar -tf archive -) -81. delete04.at:23: testing deleting a large last member ... -./delete04.at:26: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +genfile -l 50000 --file file1 +genfile -l 1024 --file file2 +tar cf archive file1 file2 +tar -f - --delete file2 archout +tar tf archout +tar f archive --delete file2 +cmp archive archout) +83. delete06.at:25: testing EOF detection ... +./delete06.at:28: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * -genfile -l 3 -f file1 -genfile -l 5 -f file2 -genfile -l 3 -f file3 -genfile -l 6 -f file4 -genfile -l 24 -f file5 -genfile -l 13 -f file6 -genfile -l 1385 -f file7 -genfile -l 30 -f file8 -genfile -l 10 -f file9 -genfile -l 256000 -f file10 -tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 -tar f archive --delete file10 -tar tf archive +mkdir b +touch a b/1 c +tar -cf archive.tar a b/1 c +case $TEST_TAR_FORMAT in +gnu) size=1500;; +pax) size=3072;; +esac +dd if=archive.tar of=trunc.tar bs=$size count=1 2>/dev/null +tar --delete 'b/' -f trunc.tar ) -82. delete05.at:27: testing deleting non-existing member ... -./delete05.at:30: +85. extrac02.at:23: testing extracting symlinks over an existing file ... +./extrac02.at:28: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -7907,14 +8034,12 @@ export TAR_OPTIONS rm -rf * -genfile -l 1024 -f en -genfile -l 1024 -f to - -tar cf archive en to -# Make sure we don't use bogus blocking factor. -# GNU tar up to and including 1.14.91 produced an empty archive this way: -tar --file archive --blocking-factor=20 --delete tre -tar tf archive +touch file +ln -s file link 2> /dev/null || ln file link +tar cf archive link +rm link +touch link +tar xf archive ) ./delete02.at:26: mkdir ustar @@ -7935,6 +8060,25 @@ tar tf archive2 tar f - --delete 2 < archive > archive3 cmp archive2 archive3) +./delete03.at:26: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + + +prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX +rm -f $prefix* +for i in 1 2 3 4 5 6 7 8 9 +do touch $prefix$i +done +tar -cf archive ./$prefix* && + tar --delete -f archive ./${prefix}5 && + tar -tf archive +) ./exclude18.at:33: mkdir ustar (cd ustar @@ -7981,32 +8125,46 @@ tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort ) -./delete01.at:26: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./delete05.at:30: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * -genfile -l 50000 --file file1 -genfile -l 1024 --file file2 -tar cf archive file1 file2 -tar -f - --delete file2 archout -tar tf archout -tar f archive --delete file2 -cmp archive archout) +genfile -l 1024 -f en +genfile -l 1024 -f to -73. exclude14.at:36: ok -60. exclude01.at:19: ok -83. delete06.at:25: testing EOF detection ... +tar cf archive en to +# Make sure we don't use bogus blocking factor. +# GNU tar up to and including 1.14.91 produced an empty archive this way: +tar --file archive --blocking-factor=20 --delete tre +tar tf archive +) +./extrac02.at:28: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +touch file +ln -s file link 2> /dev/null || ln file link +tar cf archive link +rm link +touch link +tar xf archive +) ./delete06.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir pax +(cd pax +TEST_TAR_FORMAT=pax export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H pax" export TAR_OPTIONS rm -rf * @@ -8020,26 +8178,23 @@ dd if=archive.tar of=trunc.tar bs=$size count=1 2>/dev/null tar --delete 'b/' -f trunc.tar ) -./delete02.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./delete01.at:26: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * -genfile -l 3073 -p zeros --file 1 -cp 1 2 -cp 2 3 -tar cf archive 1 2 3 -tar tf archive -cat archive | tar f - --delete 2 > archive2 -echo separator -tar tf archive2 -tar f - --delete 2 < archive > archive3 -cmp archive2 archive3) -./delete03.at:26: +genfile -l 50000 --file file1 +genfile -l 1024 --file file2 +tar cf archive file1 file2 +tar -f - --delete file2 archout +tar tf archout +tar f archive --delete file2 +cmp archive archout) +./extrac01.at:26: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -8048,17 +8203,11 @@ export TAR_OPTIONS rm -rf * - -prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX -rm -f $prefix* -for i in 1 2 3 4 5 6 7 8 9 -do touch $prefix$i -done -tar -cf archive ./$prefix* && - tar --delete -f archive ./${prefix}5 && - tar -tf archive +mkdir directory +touch directory/file +tar cf archive directory || exit 1 +tar xf archive --warning=no-timestamp || exit 1 ) -63. exclude04.at:19: ok ./delete04.at:26: mkdir oldgnu (cd oldgnu @@ -8082,54 +8231,99 @@ tar f archive --delete file10 tar tf archive ) - -./delete06.at:28: -mkdir pax -(cd pax -TEST_TAR_FORMAT=pax +./extrac02.at:28: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H pax" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * -mkdir b -touch a b/1 c -tar -cf archive.tar a b/1 c -case $TEST_TAR_FORMAT in -gnu) size=1500;; -pax) size=3072;; -esac -dd if=archive.tar of=trunc.tar bs=$size count=1 2>/dev/null -tar --delete 'b/' -f trunc.tar +touch file +ln -s file link 2> /dev/null || ln file link +tar cf archive link +rm link +touch link +tar xf archive ) - -./delete05.at:30: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./delete02.at:26: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * -genfile -l 1024 -f en -genfile -l 1024 -f to - -tar cf archive en to -# Make sure we don't use bogus blocking factor. -# GNU tar up to and including 1.14.91 produced an empty archive this way: -tar --file archive --blocking-factor=20 --delete tre +genfile -l 3073 -p zeros --file 1 +cp 1 2 +cp 2 3 +tar cf archive 1 2 3 tar tf archive +cat archive | tar f - --delete 2 > archive2 +echo separator +tar tf archive2 +tar f - --delete 2 < archive > archive3 +cmp archive2 archive3) +./extrac01.at:26: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + +mkdir directory +touch directory/file +tar cf archive directory || exit 1 +tar xf archive --warning=no-timestamp || exit 1 ) +78. delete01.at:23: ok 62. exclude03.at:19: ok +83. delete06.at:25: ok +./extrac02.at:28: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * -84. extrac01.at:23: testing extract over an existing directory ... +touch file +ln -s file link 2> /dev/null || ln file link +tar cf archive link +rm link +touch link +tar xf archive +) +./delete03.at:26: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + + +prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX +rm -f $prefix* +for i in 1 2 3 4 5 6 7 8 9 +do touch $prefix$i +done +tar -cf archive ./$prefix* && + tar --delete -f archive ./${prefix}5 && + tar -tf archive +) ./extrac01.at:26: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -8138,6 +8332,24 @@ tar cf archive directory || exit 1 tar xf archive --warning=no-timestamp || exit 1 ) +./delete05.at:30: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + +genfile -l 1024 -f en +genfile -l 1024 -f to + +tar cf archive en to +# Make sure we don't use bogus blocking factor. +# GNU tar up to and including 1.14.91 produced an empty archive this way: +tar --file archive --blocking-factor=20 --delete tre +tar tf archive +) ./exclude18.at:33: mkdir posix (cd posix @@ -8184,74 +8396,7 @@ tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort ) -./delete01.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -genfile -l 50000 --file file1 -genfile -l 1024 --file file2 -tar cf archive file1 file2 -tar -f - --delete file2 archout -tar tf archout -tar f archive --delete file2 -cmp archive archout) -85. extrac02.at:23: testing extracting symlinks over an existing file ... -./extrac02.at:28: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - -touch file -ln -s file link 2> /dev/null || ln file link -tar cf archive link -rm link -touch link -tar xf archive -) -./delete02.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile -l 3073 -p zeros --file 1 -cp 1 2 -cp 2 3 -tar cf archive 1 2 3 -tar tf archive -cat archive | tar f - --delete 2 > archive2 -echo separator -tar tf archive2 -tar f - --delete 2 < archive > archive3 -cmp archive2 archive3) -86. extrac03.at:23: testing extraction loops ... -./extrac03.at:26: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * -mkdir directory -tar -cPvf archive directory/../directory -echo separator -tar -xPvf archive --warning=no-timestamp) - -83. delete06.at:25: ok ./delete04.at:26: mkdir ustar (cd ustar @@ -8275,38 +8420,27 @@ tar f archive --delete file10 tar tf archive ) -./extrac03.at:26: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * -mkdir directory -tar -cPvf archive directory/../directory -echo separator -tar -xPvf archive --warning=no-timestamp) -./delete03.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix + +./delete02.at:26: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * - -prefix=This_is_a_very_long_file_name_prefix_that_is_designed_to_cause_problems_with_file_names_that_run_into_a_limit_of_the_posix_tar_formatXX -rm -f $prefix* -for i in 1 2 3 4 5 6 7 8 9 -do touch $prefix$i -done -tar -cf archive ./$prefix* && - tar --delete -f archive ./${prefix}5 && - tar -tf archive -) +genfile -l 3073 -p zeros --file 1 +cp 1 2 +cp 2 3 +tar cf archive 1 2 3 +tar tf archive +cat archive | tar f - --delete 2 > archive2 +echo separator +tar tf archive2 +tar f - --delete 2 < archive > archive3 +cmp archive2 archive3) 87. extrac04.at:23: testing extract + fnmatch ... ./extrac04.at:26: mkdir v7 @@ -8333,46 +8467,29 @@ --exclude='d*/*1' \ --exclude='d*/s*/*2' | sort ) -./delete05.at:30: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -genfile -l 1024 -f en -genfile -l 1024 -f to - -tar cf archive en to -# Make sure we don't use bogus blocking factor. -# GNU tar up to and including 1.14.91 produced an empty archive this way: -tar --file archive --blocking-factor=20 --delete tre -tar tf archive -) - -./extrac01.at:26: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./extrac02.at:28: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * -mkdir directory -touch directory/file -tar cf archive directory || exit 1 -tar xf archive --warning=no-timestamp || exit 1 +touch file +ln -s file link 2> /dev/null || ln file link +tar cf archive link +rm link +touch link +tar xf archive ) -88. extrac05.at:30: testing extracting selected members from pax ... +86. extrac03.at:23: testing extraction loops ... ./extrac03.at:26: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * @@ -8380,22 +8497,7 @@ tar -cPvf archive directory/../directory echo separator tar -xPvf archive --warning=no-timestamp) -./delete01.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile -l 50000 --file file1 -genfile -l 1024 --file file2 -tar cf archive file1 file2 -tar -f - --delete file2 archout -tar tf archout -tar f archive --delete file2 -cmp archive archout) +88. extrac05.at:30: testing extracting selected members from pax ... ./extrac05.at:38: mkdir posix (cd posix @@ -8420,22 +8522,21 @@ cd .. ) -./extrac02.at:28: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./extrac01.at:26: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * -touch file -ln -s file link 2> /dev/null || ln file link -tar cf archive link -rm link -touch link -tar xf archive +mkdir directory +touch directory/file +tar cf archive directory || exit 1 +tar xf archive --warning=no-timestamp || exit 1 ) +63. exclude04.at:19: ok ./delete05.at:30: mkdir posix (cd posix @@ -8454,6 +8555,8 @@ tar --file archive --blocking-factor=20 --delete tre tar tf archive ) +80. delete03.at:21: ok +85. extrac02.at:23: ok ./extrac04.at:26: mkdir oldgnu (cd oldgnu @@ -8480,6 +8583,24 @@ --exclude='d*/s*/*2' | sort ) 79. delete02.at:23: ok +./delete05.at:30: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +genfile -l 1024 -f en +genfile -l 1024 -f to + +tar cf archive en to +# Make sure we don't use bogus blocking factor. +# GNU tar up to and including 1.14.91 produced an empty archive this way: +tar --file archive --blocking-factor=20 --delete tre +tar tf archive +) ./delete04.at:26: mkdir posix (cd posix @@ -8503,20 +8624,7 @@ tar f archive --delete file10 tar tf archive ) -./extrac01.at:26: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * -mkdir directory -touch directory/file -tar cf archive directory || exit 1 -tar xf archive --warning=no-timestamp || exit 1 -) ./exclude18.at:33: mkdir gnu (cd gnu @@ -8563,71 +8671,9 @@ tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort ) -./extrac02.at:28: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -touch file -ln -s file link 2> /dev/null || ln file link -tar cf archive link -rm link -touch link -tar xf archive -) -80. delete03.at:21: ok 88. extrac05.at:30: ok -78. delete01.at:23: ok -./delete05.at:30: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile -l 1024 -f en -genfile -l 1024 -f to - -tar cf archive en to -# Make sure we don't use bogus blocking factor. -# GNU tar up to and including 1.14.91 produced an empty archive this way: -tar --file archive --blocking-factor=20 --delete tre -tar tf archive -) -./extrac03.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * -mkdir directory -tar -cPvf archive directory/../directory -echo separator -tar -xPvf archive --warning=no-timestamp) -./extrac01.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -mkdir directory -touch directory/file -tar cf archive directory || exit 1 -tar xf archive --warning=no-timestamp || exit 1 -) 89. extrac06.at:34: testing mode of extracted directories ... ./extrac06.at:37: mkdir v7 @@ -8667,48 +8713,6 @@ # After both restores, the directory mode should be 755 ) - -./extrac02.at:28: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -touch file -ln -s file link 2> /dev/null || ln file link -tar cf archive link -rm link -touch link -tar xf archive -) -./extrac04.at:26: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -touch file1 -mkdir directory -mkdir directory/subdirectory -touch directory/file1 -touch directory/file2 -touch directory/subdirectory/file1 -touch directory/subdirectory/file2 -tar -cf archive ./file1 directory -tar -tf archive \ - --exclude='./*1' \ - --exclude='d*/*1' \ - --exclude='d*/s*/*2' | sort -) 91. extrac08.at:33: testing restoring mode on existing directory ... ./extrac08.at:36: mkdir v7 @@ -8728,30 +8732,7 @@ tar xfv test.tar --warning=no-timestamp genfile --stat=mode.777 dir ) -./delete04.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile -l 3 -f file1 -genfile -l 5 -f file2 -genfile -l 3 -f file3 -genfile -l 6 -f file4 -genfile -l 24 -f file5 -genfile -l 13 -f file6 -genfile -l 1385 -f file7 -genfile -l 30 -f file8 -genfile -l 10 -f file9 -genfile -l 256000 -f file10 -tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 -tar f archive --delete file10 -tar tf archive -) - +84. extrac01.at:23: ok 90. extrac07.at:27: testing extracting symlinks to a read-only dir ... ./extrac07.at:30: mkdir ustar @@ -8788,27 +8769,12 @@ mkdir out tar -C out -xvf archive ) -82. delete05.at:27: ok -./extrac01.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -mkdir directory -touch directory/file -tar cf archive directory || exit 1 -tar xf archive --warning=no-timestamp || exit 1 -) ./extrac03.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -8816,6 +8782,7 @@ tar -cPvf archive directory/../directory echo separator tar -xPvf archive --warning=no-timestamp) + 92. extrac09.at:34: testing extracting even when . and .. are unreadable ... ./extrac09.at:37: mkdir gnu @@ -8851,48 +8818,20 @@ exit $status ) -84. extrac01.at:23: ok -./extrac02.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -touch file -ln -s file link 2> /dev/null || ln file link -tar cf archive link -rm link -touch link -tar xf archive -) -./extrac04.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +82. delete05.at:27: ok +./extrac03.at:26: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -touch file1 mkdir directory -mkdir directory/subdirectory -touch directory/file1 -touch directory/file2 -touch directory/subdirectory/file1 -touch directory/subdirectory/file2 -tar -cf archive ./file1 directory -tar -tf archive \ - --exclude='./*1' \ - --exclude='d*/*1' \ - --exclude='d*/s*/*2' | sort -) +tar -cPvf archive directory/../directory +echo separator +tar -xPvf archive --warning=no-timestamp) ./extrac08.at:36: mkdir oldgnu (cd oldgnu @@ -8911,66 +8850,6 @@ tar xfv test.tar --warning=no-timestamp genfile --stat=mode.777 dir ) -./extrac06.at:37: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - - -# Force umask -umask 022 - -# Make sure user's umask is honored, even if we are superuser -TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions" - -# Create a directory -mkdir directory -chmod 777 directory -genfile --stat=mode:777 directory - -# Archive it -tar cf arc directory - -# Change its permissions ... -chmod 755 directory -genfile --stat=mode:777 directory - -# ... and attempt to restore it twice -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory - -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory - -# After both restores, the directory mode should be 755 -) -86. extrac03.at:23: ok -93. extrac10.at:29: testing -C and delayed setting of metadata ... -./extrac10.at:32: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -mkdir d x x/y -echo foo >d/d1 -echo bar >e - -tar -cf archive.tar d e && -tar -xf archive.tar -C x d -C y e && -diff -r d x/d && -diff e x/y/e -) - -77. exclude18.at:30: ok -92. extrac09.at:34: ok 94. extrac11.at:25: testing scarce file descriptors ... ./extrac11.at:28: mkdir gnu @@ -9039,44 +8918,51 @@ diff -r a dest3/a >/dev/null 2>&1 ) || { diff -r a dest3/a; exit 1; } ) -./extrac06.at:37: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./delete04.at:26: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * +genfile -l 3 -f file1 +genfile -l 5 -f file2 +genfile -l 3 -f file3 +genfile -l 6 -f file4 +genfile -l 24 -f file5 +genfile -l 13 -f file6 +genfile -l 1385 -f file7 +genfile -l 30 -f file8 +genfile -l 10 -f file9 +genfile -l 256000 -f file10 +tar cf archive file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 +tar f archive --delete file10 +tar tf archive +) -# Force umask -umask 022 - -# Make sure user's umask is honored, even if we are superuser -TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions" - -# Create a directory -mkdir directory -chmod 777 directory -genfile --stat=mode:777 directory - -# Archive it -tar cf arc directory - -# Change its permissions ... -chmod 755 directory -genfile --stat=mode:777 directory - -# ... and attempt to restore it twice -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory +93. extrac10.at:29: testing -C and delayed setting of metadata ... +./extrac10.at:32: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory +mkdir d x x/y +echo foo >d/d1 +echo bar >e -# After both restores, the directory mode should be 755 +tar -cf archive.tar d e && +tar -xf archive.tar -C x d -C y e && +diff -r d x/d && +diff e x/y/e ) -./extrac08.at:36: +93. extrac10.at:29: ok +./extrac04.at:26: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -9085,30 +8971,6 @@ export TAR_OPTIONS rm -rf * -umask 000 -mkdir dir -chmod 755 dir -echo bla > dir/file -tar cf test.tar dir -chmod 700 dir -tar xfv test.tar --warning=no-timestamp -genfile --stat=mode.777 dir -) -90. extrac07.at:27: ok - - - -85. extrac02.at:23: ok - -./extrac04.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - test -z "`sort < /dev/null 2>&1`" || exit 77 @@ -9125,39 +8987,25 @@ --exclude='d*/*1' \ --exclude='d*/s*/*2' | sort ) -81. delete04.at:23: ok -96. extrac13.at:26: testing extract over symlinks ... -./extrac13.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +92. extrac09.at:34: ok +90. extrac07.at:27: ok +./extrac08.at:36: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * -mkdir src dst1 dst2 dst3 -echo file1 >src/file1 -ln -s target1 dst1/file1 -echo target1 >dst1/target1 -echo target1 >target1 - -tar -cf archive.tar -C src . && -tar -xf archive.tar -C dst1 --warning=no-timestamp && -diff src/file1 dst1/file1 && -diff target1 dst1/target1 - -ln -s target1 dst2/file1 -echo target1 >dst2/target1 -tar --overwrite -xf archive.tar -C dst2 --warning=no-timestamp && -diff src/file1 dst2/file1 && -diff target1 dst2/target1 - -ln -s target1 dst3/file1 -echo target1 >dst3/target1 -tar --overwrite -xhf archive.tar -C dst3 --warning=no-timestamp && -diff src/file1 dst3/file1 && -diff src/file1 dst3/target1 +umask 000 +mkdir dir +chmod 755 dir +echo bla > dir/file +tar cf test.tar dir +chmod 700 dir +tar xfv test.tar --warning=no-timestamp +genfile --stat=mode.777 dir ) 95. extrac12.at:25: testing extract dot permissions ... ./extrac12.at:28: @@ -9179,25 +9027,11 @@ cmp src/file1 dst/file1 && cmp src/file2 dst/file2 ) -97. extrac14.at:25: testing extract -C symlink ... -./extrac14.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * +77. exclude18.at:30: ok -mkdir dest -ln -s dest symlink -echo foo >foo -tar -cf archive.tar foo && -tar -xf archive.tar -C symlink --warning=no-timestamp && -cmp foo dest/foo -) -./extrac06.at:37: + +./extrac03.at:26: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -9206,36 +9040,10 @@ export TAR_OPTIONS rm -rf * - -# Force umask -umask 022 - -# Make sure user's umask is honored, even if we are superuser -TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions" - -# Create a directory mkdir directory -chmod 777 directory -genfile --stat=mode:777 directory - -# Archive it -tar cf arc directory - -# Change its permissions ... -chmod 755 directory -genfile --stat=mode:777 directory - -# ... and attempt to restore it twice -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory - -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory - -# After both restores, the directory mode should be 755 -) -93. extrac10.at:29: ok -94. extrac11.at:25: ok +tar -cPvf archive directory/../directory +echo separator +tar -xPvf archive --warning=no-timestamp) ./extrac08.at:36: mkdir posix (cd posix @@ -9255,6 +9063,40 @@ genfile --stat=mode.777 dir ) +96. extrac13.at:26: testing extract over symlinks ... +./extrac13.at:29: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +mkdir src dst1 dst2 dst3 +echo file1 >src/file1 +ln -s target1 dst1/file1 +echo target1 >dst1/target1 +echo target1 >target1 + +tar -cf archive.tar -C src . && +tar -xf archive.tar -C dst1 --warning=no-timestamp && +diff src/file1 dst1/file1 && +diff target1 dst1/target1 + +ln -s target1 dst2/file1 +echo target1 >dst2/target1 +tar --overwrite -xf archive.tar -C dst2 --warning=no-timestamp && +diff src/file1 dst2/file1 && +diff target1 dst2/target1 + +ln -s target1 dst3/file1 +echo target1 >dst3/target1 +tar --overwrite -xhf archive.tar -C dst3 --warning=no-timestamp && +diff src/file1 dst3/file1 && +diff src/file1 dst3/target1 +) +81. delete04.at:23: ok 98. extrac15.at:25: testing extract parent mkdir failure ... ./extrac15.at:28: mkdir gnu @@ -9300,10 +9142,68 @@ tar -cf archive.tar -C src a && tar -xf archive.tar -C dest ) +97. extrac14.at:25: testing extract -C symlink ... +./extrac14.at:28: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -95. extrac12.at:25: ok +mkdir dest +ln -s dest symlink +echo foo >foo +tar -cf archive.tar foo && +tar -xf archive.tar -C symlink --warning=no-timestamp && +cmp foo dest/foo +) +94. extrac11.at:25: ok -97. extrac14.at:25: ok +./extrac04.at:26: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +touch file1 +mkdir directory +mkdir directory/subdirectory +touch directory/file1 +touch directory/file2 +touch directory/subdirectory/file1 +touch directory/subdirectory/file2 +tar -cf archive ./file1 directory +tar -tf archive \ + --exclude='./*1' \ + --exclude='d*/*1' \ + --exclude='d*/s*/*2' | sort +) +./extrac08.at:36: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +umask 000 +mkdir dir +chmod 755 dir +echo bla > dir/file +tar cf test.tar dir +chmod 700 dir +tar xfv test.tar --warning=no-timestamp +genfile --stat=mode.777 dir +) 100. extrac17.at:21: testing name matching/transformation ordering ... ./extrac17.at:34: mkdir v7 @@ -9323,6 +9223,67 @@ tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ dir/subdir1/ ) +./extrac03.at:26: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +mkdir directory +tar -cPvf archive directory/../directory +echo separator +tar -xPvf archive --warning=no-timestamp) +99. extrac16.at:26: ok +./extrac06.at:37: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + + +# Force umask +umask 022 + +# Make sure user's umask is honored, even if we are superuser +TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions" + +# Create a directory +mkdir directory +chmod 777 directory +genfile --stat=mode:777 directory + +# Archive it +tar cf arc directory + +# Change its permissions ... +chmod 755 directory +genfile --stat=mode:777 directory + +# ... and attempt to restore it twice +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory + +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory + +# After both restores, the directory mode should be 755 +) + +97. extrac14.at:25: ok +98. extrac15.at:25: ok +96. extrac13.at:26: ok + +86. extrac03.at:23: ok + +91. extrac08.at:33: ok + + 102. extrac19.at:21: testing skip-old-files ... ./extrac19.at:24: mkdir v7 @@ -9373,26 +9334,37 @@ cat a ) - -87. extrac04.at:23: ok -./extrac17.at:34: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +104. extrac21.at:31: testing delay-directory-restore ... +./extrac21.at:33: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * -mkdir dir dir/subdir1 dir/subdir2 out -genfile --file dir/subdir1/file1 -genfile --file dir/subdir2/file2 -tar cf dir.tar dir +echo "test" > $$ +chmod 0 $$ +cat $$ > /dev/null 2>&1 +result=$? +rm -f $$ +test $result -eq 0 && exit 77 -tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ - dir/subdir1/ + +mkdir a a/b a/c +genfile --file a/b/D +genfile --file a/c/A +cd a/b +ln -sf ../c/A +cd ../.. +chmod a-w a/b +tar --no-recurs -c -f A.tar a a/b a/b/D a/c a/b/A a/c/A +mkdir out +tar -C out -v -x -f A.tar --delay-directory-restore ) + 103. extrac20.at:21: testing keep-directory-symlink ... ./extrac20.at:24: mkdir v7 @@ -9466,7 +9438,27 @@ clean done ) -./extrac19.at:24: +95. extrac12.at:25: ok +./extrac17.at:34: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +mkdir dir dir/subdir1 dir/subdir2 out +genfile --file dir/subdir1/file1 +genfile --file dir/subdir2/file2 + +tar cf dir.tar dir + +tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ + dir/subdir1/ +) + +./extrac18.at:37: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -9485,17 +9477,46 @@ rm b echo 'File a' > a -tar -x --skip-old-files -f ../archive +tar -x -k -f ../archive echo status=$? cat a ) +106. extrac23.at:18: testing --no-overwrite-dir ... +./extrac23.at:32: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + +# Test if the directory permissions are restored properly. +mkdir dir +chmod 755 dir +tar cf a.tar dir +chmod 777 dir +tar -xf a.tar --no-overwrite-dir +genfile --stat=mode.777 dir + +# Test if temporary permissions are set correctly to allow the owner +# to write to the directory. +genfile --file dir/file +tar cf a.tar dir +rm dir/file +chmod 400 dir +tar -xf a.tar --no-overwrite-dir +genfile --stat=mode.777 dir +chmod 700 dir +find dir +) ./extrac06.at:37: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -9527,8 +9548,7 @@ # After both restores, the directory mode should be 755 ) - -./extrac08.at:36: +./extrac04.at:26: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -9537,94 +9557,22 @@ export TAR_OPTIONS rm -rf * -umask 000 -mkdir dir -chmod 755 dir -echo bla > dir/file -tar cf test.tar dir -chmod 700 dir -tar xfv test.tar --warning=no-timestamp -genfile --stat=mode.777 dir -) -./extrac18.at:37: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -mkdir dir -cd dir -echo 'Old file a' > a -echo 'Old file b' > b - -tar cf ../archive . - -rm b -echo 'File a' > a - -tar -x -k -f ../archive -echo status=$? - -cat a -) -96. extrac13.at:26: ok -./extrac17.at:34: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -mkdir dir dir/subdir1 dir/subdir2 out -genfile --file dir/subdir1/file1 -genfile --file dir/subdir2/file2 - -tar cf dir.tar dir - -tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ - dir/subdir1/ -) -99. extrac16.at:26: ok -104. extrac21.at:31: testing delay-directory-restore ... -./extrac21.at:33: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - - -echo "test" > $$ -chmod 0 $$ -cat $$ > /dev/null 2>&1 -result=$? -rm -f $$ -test $result -eq 0 && exit 77 +test -z "`sort < /dev/null 2>&1`" || exit 77 -mkdir a a/b a/c -genfile --file a/b/D -genfile --file a/c/A -cd a/b -ln -sf ../c/A -cd ../.. -chmod a-w a/b -tar --no-recurs -c -f A.tar a a/b a/b/D a/c a/b/A a/c/A -mkdir out -tar -C out -v -x -f A.tar --delay-directory-restore +touch file1 +mkdir directory +mkdir directory/subdirectory +touch directory/file1 +touch directory/file2 +touch directory/subdirectory/file1 +touch directory/subdirectory/file2 +tar -cf archive ./file1 directory +tar -tf archive \ + --exclude='./*1' \ + --exclude='d*/*1' \ + --exclude='d*/s*/*2' | sort ) - -98. extrac15.at:25: ok - -91. extrac08.at:33: ok - 105. extrac22.at:19: testing delay-directory-restore on reversed ordering ... ./extrac22.at:29: mkdir v7 @@ -9673,8 +9621,8 @@ # Previous versions of tar would fail here with the following diagnostics: # tar: ./dir2/data2: Cannot unlink: Permission denied ) -106. extrac23.at:18: testing --no-overwrite-dir ... -./extrac23.at:32: +107. extrac24.at:18: testing --to-stdout ... +./extrac24.at:29: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -9683,31 +9631,20 @@ export TAR_OPTIONS rm -rf * -# Test if the directory permissions are restored properly. -mkdir dir -chmod 755 dir -tar cf a.tar dir -chmod 777 dir -tar -xf a.tar --no-overwrite-dir -genfile --stat=mode.777 dir - -# Test if temporary permissions are set correctly to allow the owner -# to write to the directory. -genfile --file dir/file +mkdir dir/ +echo TEXT > dir/file tar cf a.tar dir -rm dir/file -chmod 400 dir -tar -xf a.tar --no-overwrite-dir -genfile --stat=mode.777 dir -chmod 700 dir -find dir +rm -r dir +tar --extract --to-stdout --file a.tar +test -d dir ) + ./extrac17.at:34: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -9720,31 +9657,12 @@ tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ dir/subdir1/ ) -89. extrac06.at:34: ok -107. extrac24.at:18: testing --to-stdout ... -./extrac24.at:29: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - -mkdir dir/ -echo TEXT > dir/file -tar cf a.tar dir -rm -r dir -tar --extract --to-stdout --file a.tar -test -d dir -) - ./extrac19.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -9763,9 +9681,22 @@ cat a ) +./extrac24.at:29: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * - -104. extrac21.at:31: ok +mkdir dir/ +echo TEXT > dir/file +tar cf a.tar dir +rm -r dir +tar --extract --to-stdout --file a.tar +test -d dir +) 108. extrac25.at:18: testing extract over parent dir that is dangling symlink ... ./extrac25.at:21: mkdir v7 @@ -9784,40 +9715,6 @@ ln -s does_not_exist subdir tar -xvf test.tar ) -./extrac17.at:34: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -mkdir dir dir/subdir1 dir/subdir2 out -genfile --file dir/subdir1/file1 -genfile --file dir/subdir2/file2 - -tar cf dir.tar dir - -tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ - dir/subdir1/ -) -109. backup01.at:33: testing extracting existing dir with --backup ... -./backup01.at:36: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - -unset VERSION_CONTROL -mkdir dir1 dir2 -echo bla > dir1/file1 -tar cf test.tar dir1 dir2 -tar xfv test.tar --backup --warning=no-timestamp -) ./extrac18.at:37: mkdir ustar (cd ustar @@ -9842,8 +9739,7 @@ cat a ) -110. difflink.at:17: testing link mismatch ... -./difflink.at:19: +./extrac24.at:29: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -9852,21 +9748,20 @@ export TAR_OPTIONS rm -rf * -mkdir a -genfile -f a/x -ln -s x a/y -ln a/x a/z -tar cf a.tar a/x a/y a/z -rm a/z -ln -s x a/z -tar df a.tar +mkdir dir/ +echo TEXT > dir/file +tar cf a.tar dir +rm -r dir +tar --extract --to-stdout --file a.tar +test -d dir ) +87. extrac04.at:23: ok ./extrac19.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -9885,6 +9780,61 @@ cat a ) +./extrac06.at:37: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + + +# Force umask +umask 022 + +# Make sure user's umask is honored, even if we are superuser +TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions" + +# Create a directory +mkdir directory +chmod 777 directory +genfile --stat=mode:777 directory + +# Archive it +tar cf arc directory + +# Change its permissions ... +chmod 755 directory +genfile --stat=mode:777 directory + +# ... and attempt to restore it twice +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory + +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory + +# After both restores, the directory mode should be 755 +) +104. extrac21.at:31: ok +./extrac25.at:21: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +mkdir subdir +touch subdir/a.txt +tar -cf test.tar subdir/a.txt + +rm -rf subdir +ln -s does_not_exist subdir +tar -xvf test.tar +) ./extrac22.at:29: mkdir oldgnu (cd oldgnu @@ -9932,14 +9882,31 @@ # Previous versions of tar would fail here with the following diagnostics: # tar: ./dir2/data2: Cannot unlink: Permission denied ) +./extrac17.at:34: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +mkdir dir dir/subdir1 dir/subdir2 out +genfile --file dir/subdir1/file1 +genfile --file dir/subdir2/file2 + +tar cf dir.tar dir + +tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ + dir/subdir1/ +) -100. extrac17.at:21: ok ./extrac24.at:29: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -9950,22 +9917,7 @@ tar --extract --to-stdout --file a.tar test -d dir ) -111. label01.at:21: testing single-volume label ... -./label01.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile --file foo -genfile --file bar -tar -cf archive --label=Test foo bar -tar tf archive -) -./backup01.at:36: +./extrac23.at:32: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -9974,13 +9926,25 @@ export TAR_OPTIONS rm -rf * -unset VERSION_CONTROL -mkdir dir1 dir2 -echo bla > dir1/file1 -tar cf test.tar dir1 dir2 -tar xfv test.tar --backup --warning=no-timestamp -) +# Test if the directory permissions are restored properly. +mkdir dir +chmod 755 dir +tar cf a.tar dir +chmod 777 dir +tar -xf a.tar --no-overwrite-dir +genfile --stat=mode.777 dir +# Test if temporary permissions are set correctly to allow the owner +# to write to the directory. +genfile --file dir/file +tar cf a.tar dir +rm dir/file +chmod 400 dir +tar -xf a.tar --no-overwrite-dir +genfile --stat=mode.777 dir +chmod 700 dir +find dir +) ./extrac18.at:37: mkdir posix (cd posix @@ -10005,12 +9969,13 @@ cat a ) + ./extrac19.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -10029,29 +9994,12 @@ cat a ) -112. label02.at:21: testing multi-volume label ... -./label02.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -exec <&- -genfile --length 0 --file foo -genfile --length 12288 --file bar -genfile --length 12288 --file baz -tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz -tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar -) ./extrac25.at:21: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -10063,7 +10011,8 @@ ln -s does_not_exist subdir tar -xvf test.tar ) -./backup01.at:36: +110. difflink.at:17: testing link mismatch ... +./difflink.at:19: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -10072,60 +10021,50 @@ export TAR_OPTIONS rm -rf * -unset VERSION_CONTROL -mkdir dir1 dir2 -echo bla > dir1/file1 -tar cf test.tar dir1 dir2 -tar xfv test.tar --backup --warning=no-timestamp +mkdir a +genfile -f a/x +ln -s x a/y +ln a/x a/z +tar cf a.tar a/x a/y a/z +rm a/z +ln -s x a/z +tar df a.tar ) -./extrac22.at:29: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./extrac17.at:34: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * +mkdir dir dir/subdir1 dir/subdir2 out +genfile --file dir/subdir1/file1 +genfile --file dir/subdir2/file2 -echo "test" > $$ -chmod 0 $$ -cat $$ > /dev/null 2>&1 -result=$? -rm -f $$ -test $result -eq 0 && exit 77 - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir t -(cd t - genfile --length 100 --file data1 - mkdir dir1 - cp data1 dir1 - mkdir dir2 - cd dir2 - ln -s ../dir1/data1 data2 - cd .. - chmod -w dir2) - -cat >filelist <<'_ATEOF' -./dir2/data2 -./dir2 -./dir1/data1 -./dir1 -./data1 -_ATEOF - +tar cf dir.tar dir -tar -C t -c -f a.tar --no-recursion -T filelist +tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ + dir/subdir1/ +) +109. backup01.at:33: testing extracting existing dir with --backup ... +./backup01.at:36: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * -mkdir restore -tar -x -p --delay-directory-restore -C restore -f a.tar -# Previous versions of tar would fail here with the following diagnostics: -# tar: ./dir2/data2: Cannot unlink: Permission denied +unset VERSION_CONTROL +mkdir dir1 dir2 +echo bla > dir1/file1 +tar cf test.tar dir1 dir2 +tar xfv test.tar --backup --warning=no-timestamp ) -./label02.at:24: +./backup01.at:36: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -10134,40 +10073,64 @@ export TAR_OPTIONS rm -rf * -exec <&- -genfile --length 0 --file foo -genfile --length 12288 --file bar -genfile --length 12288 --file baz -tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz -tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar +unset VERSION_CONTROL +mkdir dir1 dir2 +echo bla > dir1/file1 +tar cf test.tar dir1 dir2 +tar xfv test.tar --backup --warning=no-timestamp ) -./extrac23.at:32: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./extrac24.at:29: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * -# Test if the directory permissions are restored properly. -mkdir dir -chmod 755 dir +mkdir dir/ +echo TEXT > dir/file tar cf a.tar dir -chmod 777 dir -tar -xf a.tar --no-overwrite-dir -genfile --stat=mode.777 dir +rm -r dir +tar --extract --to-stdout --file a.tar +test -d dir +) +./extrac06.at:37: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -# Test if temporary permissions are set correctly to allow the owner -# to write to the directory. -genfile --file dir/file -tar cf a.tar dir -rm dir/file -chmod 400 dir -tar -xf a.tar --no-overwrite-dir -genfile --stat=mode.777 dir -chmod 700 dir -find dir + +# Force umask +umask 022 + +# Make sure user's umask is honored, even if we are superuser +TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions" + +# Create a directory +mkdir directory +chmod 777 directory +genfile --stat=mode:777 directory + +# Archive it +tar cf arc directory + +# Change its permissions ... +chmod 755 directory +genfile --stat=mode:777 directory + +# ... and attempt to restore it twice +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory + +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory + +# After both restores, the directory mode should be 755 ) ./extrac18.at:37: mkdir gnu @@ -10193,7 +10156,32 @@ cat a ) -./extrac24.at:29: +./extrac19.at:24: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +mkdir dir +cd dir +echo 'Old file a' > a +echo 'Old file b' > b + +tar cf ../archive . + +rm b +echo 'File a' > a + +tar -x --skip-old-files -f ../archive +echo status=$? + +cat a +) +110. difflink.at:17: ok +./backup01.at:36: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -10202,15 +10190,45 @@ export TAR_OPTIONS rm -rf * -mkdir dir/ -echo TEXT > dir/file +unset VERSION_CONTROL +mkdir dir1 dir2 +echo bla > dir1/file1 +tar cf test.tar dir1 dir2 +tar xfv test.tar --backup --warning=no-timestamp +) +100. extrac17.at:21: ok + +102. extrac19.at:21: ok +89. extrac06.at:34: ok +./extrac23.at:32: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + +# Test if the directory permissions are restored properly. +mkdir dir +chmod 755 dir tar cf a.tar dir -rm -r dir -tar --extract --to-stdout --file a.tar -test -d dir +chmod 777 dir +tar -xf a.tar --no-overwrite-dir +genfile --stat=mode.777 dir + +# Test if temporary permissions are set correctly to allow the owner +# to write to the directory. +genfile --file dir/file +tar cf a.tar dir +rm dir/file +chmod 400 dir +tar -xf a.tar --no-overwrite-dir +genfile --stat=mode.777 dir +chmod 700 dir +find dir ) -110. difflink.at:17: 102. extrac19.at:21: ok - ok + ./backup01.at:36: mkdir posix (cd posix @@ -10226,7 +10244,7 @@ tar cf test.tar dir1 dir2 tar xfv test.tar --backup --warning=no-timestamp ) -./label02.at:24: +./extrac25.at:21: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -10235,20 +10253,22 @@ export TAR_OPTIONS rm -rf * -exec <&- -genfile --length 0 --file foo -genfile --length 12288 --file bar -genfile --length 12288 --file baz -tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz -tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar +mkdir subdir +touch subdir/a.txt +tar -cf test.tar subdir/a.txt + +rm -rf subdir +ln -s does_not_exist subdir +tar -xvf test.tar ) -101. extrac18.at:34: ok + +111. label01.at:21: testing single-volume label ... ./label01.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -10257,24 +10277,8 @@ tar -cf archive --label=Test foo bar tar tf archive ) -./extrac24.at:29: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -mkdir dir/ -echo TEXT > dir/file -tar cf a.tar dir -rm -r dir -tar --extract --to-stdout --file a.tar -test -d dir -) -./extrac25.at:21: +./extrac22.at:29: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -10283,16 +10287,97 @@ export TAR_OPTIONS rm -rf * -mkdir subdir -touch subdir/a.txt -tar -cf test.tar subdir/a.txt -rm -rf subdir -ln -s does_not_exist subdir -tar -xvf test.tar +echo "test" > $$ +chmod 0 $$ +cat $$ > /dev/null 2>&1 +result=$? +rm -f $$ +test $result -eq 0 && exit 77 + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir t +(cd t + genfile --length 100 --file data1 + mkdir dir1 + cp data1 dir1 + mkdir dir2 + cd dir2 + ln -s ../dir1/data1 data2 + cd .. + chmod -w dir2) + +cat >filelist <<'_ATEOF' +./dir2/data2 +./dir2 +./dir1/data1 +./dir1 +./data1 +_ATEOF + + +tar -C t -c -f a.tar --no-recursion -T filelist + +mkdir restore +tar -x -p --delay-directory-restore -C restore -f a.tar +# Previous versions of tar would fail here with the following diagnostics: +# tar: ./dir2/data2: Cannot unlink: Permission denied ) +112. label02.at:21: testing multi-volume label ... +./label02.at:24: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +exec <&- +genfile --length 0 --file foo +genfile --length 12288 --file bar +genfile --length 12288 --file baz +tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz +tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar +) +107. extrac24.at:18: ok +114. label04.at:27: testing label with non-create option ... +./label04.at:30: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * +exec <&- +genfile --file file +decho "# Create volume" +tar -c -f archive --label='New volume' file +decho "# Update: wrong label" +tar -rf archive --label='My volume' file; echo $? +decho "# Update: right label" +tar -rf archive --label='New volume' file +) +./backup01.at:36: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * +unset VERSION_CONTROL +mkdir dir1 dir2 +echo bla > dir1/file1 +tar cf test.tar dir1 dir2 +tar xfv test.tar --backup --warning=no-timestamp +) +101. extrac18.at:34: ok 113. label03.at:27: testing test-label option ... ./label03.at:30: mkdir gnu @@ -10326,28 +10411,30 @@ decho "# Test label: wildcards" tar --test-label --file=iamanarchive --wildcards '*label'; echo $? ) -./label01.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix + +./extrac25.at:21: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * -genfile --file foo -genfile --file bar -tar -cf archive --label=Test foo bar -tar tf archive +mkdir subdir +touch subdir/a.txt +tar -cf test.tar subdir/a.txt + +rm -rf subdir +ln -s does_not_exist subdir +tar -xvf test.tar ) -112. label02.at:21: ok -114. label04.at:27: testing label with non-create option ... ./label04.at:30: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -10360,6 +10447,22 @@ decho "# Update: right label" tar -rf archive --label='New volume' file ) +109. backup01.at:33: ./label01.at:24: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile --file foo +genfile --file bar +tar -cf archive --label=Test foo bar +tar tf archive +) + ok + 115. label05.at:24: testing label with non-create option ... ./label05.at:27: mkdir gnu @@ -10379,8 +10482,7 @@ decho "# Update: right label" tar -rf archive file ) - -./label04.at:30: +./label02.at:24: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -10390,70 +10492,13 @@ rm -rf * exec <&- -genfile --file file -decho "# Create volume" -tar -c -f archive --label='New volume' file -decho "# Update: wrong label" -tar -rf archive --label='My volume' file; echo $? -decho "# Update: right label" -tar -rf archive --label='New volume' file -) -116. incremental.at:23: testing incremental ... -./incremental.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -ckmtime || exit 77 - -mkdir structure -echo x >structure/file - -# On Nextstep (and perhaps other 4.3BSD systems), -# a newly created file's ctime isn't updated -# until the next sync or stat operation on the file. -ls -l structure/file >/dev/null - -# If the time of an initial backup and the creation time of a file contained -# in that backup are the same, the file will be backed up again when an -# incremental backup is done, because the incremental backup backs up -# files created "on or after" the initial backup time. Without the sleep -# command, behaviour of tar becomes variable, depending whether the system -# clock ticked over to the next second between creating the file and -# backing it up. -sleep 1 - -tar cf archive --listed=list structure -tar cfv archive --listed=list structure -echo separator -# ReiserFS often offsets the timestamps of newly created files -# 1 second to the past. Try to compensate for it, until a better -# solution is found. -sleep 2 -echo y >structure/file -tar cfv archive --listed=list structure -) -./extrac24.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -mkdir dir/ -echo TEXT > dir/file -tar cf a.tar dir -rm -r dir -tar --extract --to-stdout --file a.tar -test -d dir +genfile --length 0 --file foo +genfile --length 12288 --file bar +genfile --length 12288 --file baz +tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz +tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar ) -./extrac22.at:29: +./extrac23.at:32: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -10462,69 +10507,6 @@ export TAR_OPTIONS rm -rf * - -echo "test" > $$ -chmod 0 $$ -cat $$ > /dev/null 2>&1 -result=$? -rm -f $$ -test $result -eq 0 && exit 77 - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir t -(cd t - genfile --length 100 --file data1 - mkdir dir1 - cp data1 dir1 - mkdir dir2 - cd dir2 - ln -s ../dir1/data1 data2 - cd .. - chmod -w dir2) - -cat >filelist <<'_ATEOF' -./dir2/data2 -./dir2 -./dir1/data1 -./dir1 -./data1 -_ATEOF - - -tar -C t -c -f a.tar --no-recursion -T filelist - -mkdir restore -tar -x -p --delay-directory-restore -C restore -f a.tar -# Previous versions of tar would fail here with the following diagnostics: -# tar: ./dir2/data2: Cannot unlink: Permission denied -) -111. label01.at:21: ok -./backup01.at:36: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -unset VERSION_CONTROL -mkdir dir1 dir2 -echo bla > dir1/file1 -tar cf test.tar dir1 dir2 -tar xfv test.tar --backup --warning=no-timestamp -) -./extrac23.at:32: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - # Test if the directory permissions are restored properly. mkdir dir chmod 755 dir @@ -10544,46 +10526,8 @@ chmod 700 dir find dir ) - -./label05.at:27: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -exec <&- -genfile --file file -decho "# Create volume" -tar -c -f archive file -decho "# Update: wrong label" -tar -rf archive --label='My volume' file; echo $? -decho "# Update: right label" -tar -rf archive file -) -./label04.at:30: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -exec <&- -genfile --file file -decho "# Create volume" -tar -c -f archive --label='New volume' file -decho "# Update: wrong label" -tar -rf archive --label='My volume' file; echo $? -decho "# Update: right label" -tar -rf archive --label='New volume' file -) -107. extrac24.at:18: ok -117. incr01.at:27: testing restore broken symlinks from incremental ... -./incr01.at:30: +116. incremental.at:23: testing incremental ... +./incremental.at:26: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -10594,35 +10538,32 @@ ckmtime || exit 77 -mkdir directory -$as_ln_s foo directory/bar +mkdir structure +echo x >structure/file -tar -cf archive.0 -g db directory -rm directory/bar -tar -cf archive.1 -g db directory +# On Nextstep (and perhaps other 4.3BSD systems), +# a newly created file's ctime isn't updated +# until the next sync or stat operation on the file. +ls -l structure/file >/dev/null -mv directory orig +# If the time of an initial backup and the creation time of a file contained +# in that backup are the same, the file will be backed up again when an +# incremental backup is done, because the incremental backup backs up +# files created "on or after" the initial backup time. Without the sleep +# command, behaviour of tar becomes variable, depending whether the system +# clock ticked over to the next second between creating the file and +# backing it up. +sleep 1 -tar xvfg archive.0 /dev/null --warning=no-timestamp +tar cf archive --listed=list structure +tar cfv archive --listed=list structure echo separator -tar xvfg archive.1 /dev/null --warning=no-timestamp -) -./extrac25.at:21: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -mkdir subdir -touch subdir/a.txt -tar -cf test.tar subdir/a.txt - -rm -rf subdir -ln -s does_not_exist subdir -tar -xvf test.tar +# ReiserFS often offsets the timestamps of newly created files +# 1 second to the past. Try to compensate for it, until a better +# solution is found. +sleep 2 +echo y >structure/file +tar cfv archive --listed=list structure ) ./extrac20.at:24: mkdir oldgnu @@ -10696,13 +10637,62 @@ clean done ) +./label01.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +genfile --file foo +genfile --file bar +tar -cf archive --label=Test foo bar +tar tf archive +) +./label04.at:30: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +exec <&- +genfile --file file +decho "# Create volume" +tar -c -f archive --label='New volume' file +decho "# Update: wrong label" +tar -rf archive --label='My volume' file; echo $? +decho "# Update: right label" +tar -rf archive --label='New volume' file +) +./label05.at:27: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * +exec <&- +genfile --file file +decho "# Create volume" +tar -c -f archive file +decho "# Update: wrong label" +tar -rf archive --label='My volume' file; echo $? +decho "# Update: right label" +tar -rf archive file +) ./extrac22.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -10744,6 +10734,54 @@ # Previous versions of tar would fail here with the following diagnostics: # tar: ./dir2/data2: Cannot unlink: Permission denied ) +./label02.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +exec <&- +genfile --length 0 --file foo +genfile --length 12288 --file bar +genfile --length 12288 --file baz +tar --label=Test -cM -L10 -f 1.tar -f 2.tar -f 3.tar -f 4.tar foo bar baz +tar -Mt -f 1.tar -f 2.tar -f 3.tar -f 4.tar +) +./label03.at:30: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +exec <&- +genfile --file file +tar -c --label='iamalabel' --file iamanarchive file +tar -c --file unlabeled.tar file +decho "# Display label" +tar --test-label --file=iamanarchive; echo $? +decho "# Display label: unlabeled" +tar --test-label --file=unlabeled.tar; echo $? +decho "# Test label: success" +tar --test-label --file=iamanarchive 'iamalabel'; echo $? +decho "# Test label: failure" +tar --test-label --file=iamanarchive 'amalabel'; echo $? +decho "# Test label: unlabeled" +tar --test-label --file=unlabeled.tar 'amalabel'; echo $? +decho "# Test label, verbose: success" +tar --test-label --verbose --file=iamanarchive 'iamalabel'; echo $? +decho "# Test label, verbose: failure" +tar --test-label --verbose --file=iamanarchive 'amalabel'; echo $? +decho "# Test label: multiple arguments" +tar --test-label --file=iamanarchive a iamalabel b; echo $? +decho "# Test label: wildcards" +tar --test-label --file=iamanarchive --wildcards '*label'; echo $? +) ./label05.at:27: mkdir posix (cd posix @@ -10762,6 +10800,67 @@ decho "# Update: right label" tar -rf archive file ) +111. label01.at:21: 114. label04.at:27: ok + ok +108. extrac25.at:18: ok + +./extrac23.at:32: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +# Test if the directory permissions are restored properly. +mkdir dir +chmod 755 dir +tar cf a.tar dir +chmod 777 dir +tar -xf a.tar --no-overwrite-dir +genfile --stat=mode.777 dir + +# Test if temporary permissions are set correctly to allow the owner +# to write to the directory. +genfile --file dir/file +tar cf a.tar dir +rm dir/file +chmod 400 dir +tar -xf a.tar --no-overwrite-dir +genfile --stat=mode.777 dir +chmod 700 dir +find dir +) +117. incr01.at:27: testing restore broken symlinks from incremental ... +./incr01.at:30: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +ckmtime || exit 77 + +mkdir directory +$as_ln_s foo directory/bar + +tar -cf archive.0 -g db directory +rm directory/bar +tar -cf archive.1 -g db directory + +mv directory orig + +tar xvfg archive.0 /dev/null --warning=no-timestamp +echo separator +tar xvfg archive.1 /dev/null --warning=no-timestamp +) + + + +115. label05.at:24: ok 118. incr02.at:32: testing restoring timestamps from incremental ... ./incr02.at:35: mkdir gnu @@ -10809,8 +10908,8 @@ # Check the timestamp genfile --stat=mtime dir/subdir1 | diff ts - ) -109. backup01.at:33: ok -./extrac25.at:21: +119. listed01.at:26: testing --listed for individual files ... +./listed01.at:29: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -10819,48 +10918,39 @@ export TAR_OPTIONS rm -rf * -mkdir subdir -touch subdir/a.txt -tar -cf test.tar subdir/a.txt +ckmtime || exit 77 -rm -rf subdir -ln -s does_not_exist subdir -tar -xvf test.tar -) +mkdir directory +genfile --length 10240 --pattern zeros --file directory/file1 +# Let the things settle +sleep 1 -114. label04.at:27: ok -115. label05.at:24: ok -./incr01.at:30: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * +tar --create \ + --file=archive.1 \ + --listed-incremental=listing \ + directory/file* -ckmtime || exit 77 +tar tf archive.1 || exit 1 -mkdir directory -$as_ln_s foo directory/bar +sleep 2 -tar -cf archive.0 -g db directory -rm directory/bar -tar -cf archive.1 -g db directory +genfile --length 10240 --pattern zeros --file directory/file2 -mv directory orig +echo "separator" +cp listing listing.old +tar --create \ + --file=archive.2 \ + --listed-incremental=listing \ + directory/file* || exit 1 -tar xvfg archive.0 /dev/null --warning=no-timestamp -echo separator -tar xvfg archive.1 /dev/null --warning=no-timestamp +tar tf archive.2 || exit 1 ) - ./label03.at:30: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -10887,44 +10977,6 @@ decho "# Test label: wildcards" tar --test-label --file=iamanarchive --wildcards '*label'; echo $? ) -119. listed01.at:26: testing --listed for individual files ... -./listed01.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -ckmtime || exit 77 - -mkdir directory -genfile --length 10240 --pattern zeros --file directory/file1 -# Let the things settle -sleep 1 - -tar --create \ - --file=archive.1 \ - --listed-incremental=listing \ - directory/file* - -tar tf archive.1 || exit 1 - -sleep 2 - -genfile --length 10240 --pattern zeros --file directory/file2 - -echo "separator" -cp listing listing.old -tar --create \ - --file=archive.2 \ - --listed-incremental=listing \ - directory/file* || exit 1 - -tar tf archive.2 || exit 1 -) - 120. listed02.at:28: testing working --listed ... ./listed02.at:31: mkdir gnu @@ -10995,36 +11047,33 @@ echo Final files: find tart -print | sort 2>/dev/null ) -105. extrac22.at:19: ok -108. extrac25.at:18: ok -./extrac23.at:32: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +112. label02.at:21: ok + +./incr01.at:30: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * -# Test if the directory permissions are restored properly. -mkdir dir -chmod 755 dir -tar cf a.tar dir -chmod 777 dir -tar -xf a.tar --no-overwrite-dir -genfile --stat=mode.777 dir +ckmtime || exit 77 -# Test if temporary permissions are set correctly to allow the owner -# to write to the directory. -genfile --file dir/file -tar cf a.tar dir -rm dir/file -chmod 400 dir -tar -xf a.tar --no-overwrite-dir -genfile --stat=mode.777 dir -chmod 700 dir -find dir +mkdir directory +$as_ln_s foo directory/bar + +tar -cf archive.0 -g db directory +rm directory/bar +tar -cf archive.1 -g db directory + +mv directory orig + +tar xvfg archive.0 /dev/null --warning=no-timestamp +echo separator +tar xvfg archive.1 /dev/null --warning=no-timestamp ) + 121. listed03.at:24: testing incremental dump when the parent directory is unreadable ... ./listed03.at:27: mkdir gnu @@ -11062,8 +11111,54 @@ cat err >&2 exit $status ) +106. extrac23.at:18: ok +./extrac22.at:29: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + + +echo "test" > $$ +chmod 0 $$ +cat $$ > /dev/null 2>&1 +result=$? +rm -f $$ +test $result -eq 0 && exit 77 + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir t +(cd t + genfile --length 100 --file data1 + mkdir dir1 + cp data1 dir1 + mkdir dir2 + cd dir2 + ln -s ../dir1/data1 data2 + cd .. + chmod -w dir2) + +cat >filelist <<'_ATEOF' +./dir2/data2 +./dir2 +./dir1/data1 +./dir1 +./data1 +_ATEOF + +tar -C t -c -f a.tar --no-recursion -T filelist +mkdir restore +tar -x -p --delay-directory-restore -C restore -f a.tar +# Previous versions of tar would fail here with the following diagnostics: +# tar: ./dir2/data2: Cannot unlink: Permission denied +) 122. listed04.at:26: testing --listed-incremental and --one-file-system ... ./listed04.at:29: mkdir gnu @@ -11082,6 +11177,7 @@ tar --one-file-system -cvf archive.tar -g archive.incr dir || exit tar -tf archive.tar || exit ) + ./incr01.at:30: mkdir posix (cd posix @@ -11149,47 +11245,16 @@ umount tartest/subdir ) -./label03.at:30: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -exec <&- -genfile --file file -tar -c --label='iamalabel' --file iamanarchive file -tar -c --file unlabeled.tar file -decho "# Display label" -tar --test-label --file=iamanarchive; echo $? -decho "# Display label: unlabeled" -tar --test-label --file=unlabeled.tar; echo $? -decho "# Test label: success" -tar --test-label --file=iamanarchive 'iamalabel'; echo $? -decho "# Test label: failure" -tar --test-label --file=iamanarchive 'amalabel'; echo $? -decho "# Test label: unlabeled" -tar --test-label --file=unlabeled.tar 'amalabel'; echo $? -decho "# Test label, verbose: success" -tar --test-label --verbose --file=iamanarchive 'iamalabel'; echo $? -decho "# Test label, verbose: failure" -tar --test-label --verbose --file=iamanarchive 'amalabel'; echo $? -decho "# Test label: multiple arguments" -tar --test-label --file=iamanarchive a iamalabel b; echo $? -decho "# Test label: wildcards" -tar --test-label --file=iamanarchive --wildcards '*label'; echo $? -) ---- - 2026-09-03 13:54:26.653516476 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/123/stderr 2026-09-03 13:54:26.647611836 +0000 +122. listed04.at:26: ok +--- - 2025-08-01 07:34:09.220207696 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/123/stderr 2025-08-01 07:34:09.216153670 +0000 @@ -1,4 +1 @@ -tar: .: Directory is new -tar: ./subdir: Directory is new -tar: ./subdir: directory is on a different filesystem; not dumped ---- - 2026-09-03 13:54:26.656195876 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/123/stdout 2026-09-03 13:54:26.651611836 +0000 +--- - 2025-08-01 07:34:09.221527664 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/123/stdout 2025-08-01 07:34:09.216153670 +0000 @@ -1,10 +1 @@ -# Level 0 -./ @@ -11201,39 +11266,13 @@ -./ -./subdir/ -123. listed05.at:33: ./extrac23.at:32: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -# Test if the directory permissions are restored properly. -mkdir dir -chmod 755 dir -tar cf a.tar dir -chmod 777 dir -tar -xf a.tar --no-overwrite-dir -genfile --stat=mode.777 dir - -# Test if temporary permissions are set correctly to allow the owner -# to write to the directory. -genfile --file dir/file -tar cf a.tar dir -rm dir/file -chmod 400 dir -tar -xf a.tar --no-overwrite-dir -genfile --stat=mode.777 dir -chmod 700 dir -find dir -) 121. listed03.at:24: ok +123. listed05.at:33: skipped (listed05.at:36) +113. label03.at:27: ok +105. extrac22.at:19: ok -117. incr01.at:27: ok 124. incr03.at:28: testing renamed files in incrementals ... ./incr03.at:31: mkdir gnu @@ -11275,6 +11314,8 @@ tar -xf archive.2 -g db --warning=no-timestamp find directory | sort ) +117. incr01.at:27: ok + 125. incr04.at:29: testing proper icontents initialization ... ./incr04.at:34: mkdir gnu @@ -11301,9 +11342,6 @@ echo "Incremental dump" tar cvf a1.tar -g a.sna a ) -122. listed04.at:26: ok - -113. label03.at:27: ok 126. incr05.at:21: testing incremental dumps with -C ... ./incr05.at:24: mkdir gnu @@ -11328,7 +11366,6 @@ tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir . ) - 127. incr06.at:21: testing incremental dumps of nested directories ... ./incr06.at:24: mkdir gnu @@ -11361,78 +11398,7 @@ echo Level 1 sub . tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . ) -./extrac20.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -for i in a b c -do - dir=in$i - mkdir -p $dir/root/dir $dir/root/dirsymlink - touch $dir/root/dirsymlink/file$i - test $i != a && touch $dir/root/dirsymlink/file.conflict - tar cf archive$i.tar -C $dir root -done - -prep() -{ - echo "== $1 ==" - echo "== $1 ==" >&2 - backup_dir=$1 - dir=out - mkdir -p $dir/root/dir - ln -s dir $dir/root/dirsymlink - test $round = normal && cd $dir >/dev/null -} - -clean() -{ - test $round = normal && cd .. >/dev/null - find $dir | sort - mv $dir $backup_dir -} - -# Expand to '-f ../$1' or '-f $1 -C $dir' depending on $round variable -file_spec() -{ - if test $round = normal - then - echo "-f ../$1" - else - echo "-f $1 -C $dir" - fi -} - -for round in normal dir -do - # Check that 'dirsymlink' replaces 'dir' - prep without_option_$round - tar -x `file_spec archivea.tar` || exit 1 - tar -x `file_spec archiveb.tar` || exit 1 - clean - - # Keep directory symlink must keep root/dirsymlink - prep with_option_$round - tar -x --keep-directory-symlink `file_spec archivea.tar` || exit 1 - tar -x --keep-directory-symlink `file_spec archiveb.tar` || exit 1 - clean - prep collision_$round - tar -x --keep-directory-symlink `file_spec archivea.tar` --keep-old-files || exit 1 - tar -x --keep-directory-symlink `file_spec archiveb.tar` --keep-old-files || exit 1 - tar -x --keep-directory-symlink `file_spec archivec.tar` --keep-old-files && exit 1 - clean -done -) 128. incr07.at:18: testing incremental restores with -C ... ./incr07.at:40: mkdir gnu @@ -11480,8 +11446,34 @@ test -d dirA && echo >&2 "toplevel dirA exists" exit 0 ) -106. extrac23.at:18: ok +129. incr08.at:38: testing filename normalization ... +./incr08.at:41: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +ckmtime || exit 77 + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir tartest +cd tartest +mkdir foo +mkdir foo/subdir +mkdir foo/subdir/dir1 +mkdir subdir +mkdir subdir/dir2 +decho A +find .|sort +decho B +DIR=`pwd` +tar -cvf ../foo.tar --listed-incremental=../foo.snar -C foo . $DIR +) ./incr05.at:24: mkdir oldgnu (cd oldgnu @@ -11504,33 +11496,77 @@ echo Level 1 tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir . ) -129. incr08.at:38: testing filename normalization ... -./incr08.at:41: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./extrac20.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * -ckmtime || exit 77 test -z "`sort < /dev/null 2>&1`" || exit 77 -mkdir tartest -cd tartest -mkdir foo -mkdir foo/subdir -mkdir foo/subdir/dir1 -mkdir subdir -mkdir subdir/dir2 -decho A -find .|sort -decho B -DIR=`pwd` -tar -cvf ../foo.tar --listed-incremental=../foo.snar -C foo . $DIR +for i in a b c +do + dir=in$i + mkdir -p $dir/root/dir $dir/root/dirsymlink + touch $dir/root/dirsymlink/file$i + test $i != a && touch $dir/root/dirsymlink/file.conflict + tar cf archive$i.tar -C $dir root +done + +prep() +{ + echo "== $1 ==" + echo "== $1 ==" >&2 + backup_dir=$1 + dir=out + mkdir -p $dir/root/dir + ln -s dir $dir/root/dirsymlink + test $round = normal && cd $dir >/dev/null +} + +clean() +{ + test $round = normal && cd .. >/dev/null + find $dir | sort + mv $dir $backup_dir +} + +# Expand to '-f ../$1' or '-f $1 -C $dir' depending on $round variable +file_spec() +{ + if test $round = normal + then + echo "-f ../$1" + else + echo "-f $1 -C $dir" + fi +} + +for round in normal dir +do + # Check that 'dirsymlink' replaces 'dir' + prep without_option_$round + tar -x `file_spec archivea.tar` || exit 1 + tar -x `file_spec archiveb.tar` || exit 1 + clean + + # Keep directory symlink must keep root/dirsymlink + prep with_option_$round + tar -x --keep-directory-symlink `file_spec archivea.tar` || exit 1 + tar -x --keep-directory-symlink `file_spec archiveb.tar` || exit 1 + clean + + prep collision_$round + tar -x --keep-directory-symlink `file_spec archivea.tar` --keep-old-files || exit 1 + tar -x --keep-directory-symlink `file_spec archiveb.tar` --keep-old-files || exit 1 + tar -x --keep-directory-symlink `file_spec archivec.tar` --keep-old-files && exit 1 + clean +done ) ./incr06.at:24: mkdir oldgnu @@ -11563,28 +11599,17 @@ echo Level 1 sub . tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . ) -./incr05.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -ckmtime || exit 77 -mkdir dir -mkdir dir/sub -genfile --file dir/file1 -genfile --file dir/sub/file2 - -echo Level 0 -tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir . - -genfile --file dir/file3 -echo Level 1 -tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir . -) +stderr: +A +B +tar: .: Directory is new +tar: ./subdir: Directory is new +tar: ./subdir/dir1: Directory is new +tar: /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest: Directory is new +tar: /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest/subdir: Directory is new +tar: /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest/subdir/dir2: Directory is new +tar: Removing leading `/' from member names +stdout: ./incr07.at:40: mkdir oldgnu (cd oldgnu @@ -11631,7 +11656,52 @@ test -d dirA && echo >&2 "toplevel dirA exists" exit 0 ) +A +. +./foo +./foo/subdir +./foo/subdir/dir1 +./subdir +./subdir/dir2 +B +./ +./subdir/ +./subdir/dir1/ +/build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest/ +/build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest/subdir/ +/build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest/subdir/dir2/ +./incr08.at:41: +DIR=`pwd`/gnu/tartest +sed "s|$DIR|ABSPATH|" stdout + +./incr05.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +ckmtime || exit 77 +mkdir dir +mkdir dir/sub +genfile --file dir/file1 +genfile --file dir/sub/file2 + +echo Level 0 +tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir . + +genfile --file dir/file3 +echo Level 1 +tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir . +) +./incr08.at:41: +DIR=`pwd`/gnu/tartest +sed "/tar: Removing leading \`\/*\/' from/d;s|$DIR|ABSPATH|" stderr +129. incr08.at:38: ok 126. incr05.at:21: ok + ./incr06.at:24: mkdir posix (cd posix @@ -11690,39 +11760,6 @@ decho B tar -cvf foo.tar --incremental -C foo . -C `pwd` toplevel_file -C bar . ) -stderr: -A -B -tar: .: Directory is new -tar: ./subdir: Directory is new -tar: ./subdir/dir1: Directory is new -tar: /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest: Directory is new -tar: /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest/subdir: Directory is new -tar: /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest/subdir/dir2: Directory is new -tar: Removing leading `/' from member names -stdout: -A -. -./foo -./foo/subdir -./foo/subdir/dir1 -./subdir -./subdir/dir2 -B -./ -./subdir/ -./subdir/dir1/ -/build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest/ -/build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest/subdir/ -/build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/129/gnu/tartest/subdir/dir2/ -./incr08.at:41: -DIR=`pwd`/gnu/tartest -sed "s|$DIR|ABSPATH|" stdout - -./incr08.at:41: -DIR=`pwd`/gnu/tartest -sed "/tar: Removing leading \`\/*\/' from/d;s|$DIR|ABSPATH|" stderr -129. incr08.at:38: ok ./incr07.at:40: mkdir posix (cd posix @@ -11769,7 +11806,6 @@ test -d dirA && echo >&2 "toplevel dirA exists" exit 0 ) - 131. incr10.at:18: testing concatenated incremental archives (deletes) ... ./incr10.at:28: mkdir gnu @@ -11796,79 +11832,11 @@ tar -xvf full.tar -g /dev/null -C out ) 130. incr09.at:26: ok +127. incr06.at:21: ok -./extrac20.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -for i in a b c -do - dir=in$i - mkdir -p $dir/root/dir $dir/root/dirsymlink - touch $dir/root/dirsymlink/file$i - test $i != a && touch $dir/root/dirsymlink/file.conflict - tar cf archive$i.tar -C $dir root -done - -prep() -{ - echo "== $1 ==" - echo "== $1 ==" >&2 - backup_dir=$1 - dir=out - mkdir -p $dir/root/dir - ln -s dir $dir/root/dirsymlink - test $round = normal && cd $dir >/dev/null -} - -clean() -{ - test $round = normal && cd .. >/dev/null - find $dir | sort - mv $dir $backup_dir -} - -# Expand to '-f ../$1' or '-f $1 -C $dir' depending on $round variable -file_spec() -{ - if test $round = normal - then - echo "-f ../$1" - else - echo "-f $1 -C $dir" - fi -} - -for round in normal dir -do - # Check that 'dirsymlink' replaces 'dir' - prep without_option_$round - tar -x `file_spec archivea.tar` || exit 1 - tar -x `file_spec archiveb.tar` || exit 1 - clean - - # Keep directory symlink must keep root/dirsymlink - prep with_option_$round - tar -x --keep-directory-symlink `file_spec archivea.tar` || exit 1 - tar -x --keep-directory-symlink `file_spec archiveb.tar` || exit 1 - clean - prep collision_$round - tar -x --keep-directory-symlink `file_spec archivea.tar` --keep-old-files || exit 1 - tar -x --keep-directory-symlink `file_spec archiveb.tar` --keep-old-files || exit 1 - tar -x --keep-directory-symlink `file_spec archivec.tar` --keep-old-files && exit 1 - clean -done -) +131. incr10.at:18: ok +128. incr07.at:18: ok 132. incr11.at:25: testing concatenated incremental archives (renames) ... ./incr11.at:28: mkdir gnu @@ -11899,10 +11867,6 @@ decho List find out | sort ) -127. incr06.at:21: ok -128. incr07.at:18: - ok -131. incr10.at:18: ok 133. filerem01.at:36: testing file removed as we read it ... ./filerem01.at:39: mkdir gnu @@ -11923,13 +11887,14 @@ --listed-incremental db -v dir >/dev/null ) -stdout: -./filerem01.at:39: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix + +134. filerem02.at:26: testing toplevel file removed ... +./filerem02.at:29: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -11937,12 +11902,13 @@ mkdir dir/sub genfile --file dir/file1 genfile --file dir/sub/file2 +mkdir dir2 +genfile --file dir2/file1 -genfile --run --checkpoint=3 --unlink dir/file1 -- \ +genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \ tar --blocking-factor=1 -c -f archive.tar \ - --listed-incremental db -v dir >/dev/null + --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null ) - 135. dirrem01.at:38: testing directory removed before reading ... ./dirrem01.at:41: mkdir gnu @@ -11970,13 +11936,13 @@ --warning=no-file-changed \ -v dir >/dev/null ) -134. filerem02.at:26: testing toplevel file removed ... -./filerem02.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +stdout: +./filerem01.at:39: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -11984,20 +11950,13 @@ mkdir dir/sub genfile --file dir/file1 genfile --file dir/sub/file2 -mkdir dir2 -genfile --file dir2/file1 -genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \ +genfile --run --checkpoint=3 --unlink dir/file1 -- \ tar --blocking-factor=1 -c -f archive.tar \ - --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null + --listed-incremental db -v dir >/dev/null ) -stderr: -tar: dir2: Cannot stat: No such file or directory -tar: dir2: Cannot open: No such file or directory -tar: Exiting with failure status due to previous errors -stdout: stdout: -./filerem02.at:29: +./extrac20.at:24: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -12006,19 +11965,69 @@ export TAR_OPTIONS rm -rf * -mkdir dir -mkdir dir/sub -genfile --file dir/file1 -genfile --file dir/sub/file2 -mkdir dir2 -genfile --file dir2/file1 -genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \ - tar --blocking-factor=1 -c -f archive.tar \ - --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +for i in a b c +do + dir=in$i + mkdir -p $dir/root/dir $dir/root/dirsymlink + touch $dir/root/dirsymlink/file$i + test $i != a && touch $dir/root/dirsymlink/file.conflict + tar cf archive$i.tar -C $dir root +done + +prep() +{ + echo "== $1 ==" + echo "== $1 ==" >&2 + backup_dir=$1 + dir=out + mkdir -p $dir/root/dir + ln -s dir $dir/root/dirsymlink + test $round = normal && cd $dir >/dev/null +} + +clean() +{ + test $round = normal && cd .. >/dev/null + find $dir | sort + mv $dir $backup_dir +} + +# Expand to '-f ../$1' or '-f $1 -C $dir' depending on $round variable +file_spec() +{ + if test $round = normal + then + echo "-f ../$1" + else + echo "-f $1 -C $dir" + fi +} + +for round in normal dir +do + # Check that 'dirsymlink' replaces 'dir' + prep without_option_$round + tar -x `file_spec archivea.tar` || exit 1 + tar -x `file_spec archiveb.tar` || exit 1 + clean + + # Keep directory symlink must keep root/dirsymlink + prep with_option_$round + tar -x --keep-directory-symlink `file_spec archivea.tar` || exit 1 + tar -x --keep-directory-symlink `file_spec archiveb.tar` || exit 1 + clean + + prep collision_$round + tar -x --keep-directory-symlink `file_spec archivea.tar` --keep-old-files || exit 1 + tar -x --keep-directory-symlink `file_spec archiveb.tar` --keep-old-files || exit 1 + tar -x --keep-directory-symlink `file_spec archivec.tar` --keep-old-files && exit 1 + clean +done ) -stdout: -133. filerem01.at:36: ok ./dirrem01.at:41: mkdir posix (cd posix @@ -12045,7 +12054,38 @@ --warning=no-file-changed \ -v dir >/dev/null ) +stderr: +tar: dir2: Cannot stat: No such file or directory +tar: dir2: Cannot open: No such file or directory +tar: Exiting with failure status due to previous errors +stdout: +./filerem02.at:29: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +mkdir dir +mkdir dir/sub +genfile --file dir/file1 +genfile --file dir/sub/file2 +mkdir dir2 +genfile --file dir2/file1 + +genfile --run --checkpoint=3 --exec 'rm -rf dir2' -- \ + tar --blocking-factor=1 -c -f archive.tar \ + --listed-incremental db -v --warning=no-new-dir dir dir2 >/dev/null +) +stdout: +133. filerem01.at:36: ok 132. incr11.at:25: ok +stdout: +135. dirrem01.at:38: ok + + 136. dirrem02.at:31: testing explicitly named directory removed before reading ... ./dirrem02.at:34: @@ -12074,18 +12114,8 @@ --warning=no-file-changed \ -v dir dir/sub >/dev/null ) -stdout: -135. dirrem01.at:38: ok -stderr: - -tar: dir2: Cannot stat: No such file or directory -tar: dir2: Cannot open: No such file or directory -tar: Exiting with failure status due to previous errors -stdout: - -134. filerem02.at:26: ok -138. rename02.at:24: testing move between hierarchies ... -./rename02.at:27: +137. rename01.at:24: testing renamed dirs in incrementals ... +./rename01.at:27: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -12097,41 +12127,36 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 + mkdir foo genfile --file foo/file1 genfile --file foo/file2 mkdir foo/bar -genfile --file foo/bar/file.r -mkdir foo/bar/baz -genfile --file foo/bar/baz/file.z - -sleep 1 +genfile --file foo/bar/file echo "Creating base archive" tar -g incr -cf arch.1 -v foo -mv foo/bar/baz foo +mv foo/bar foo/baz echo "Creating incremental archive" tar -g incr -cf arch.2 -v foo mv foo old -tar xfg arch.1 /dev/null --warning=no-timestamp 2>tmperr -sort tmperr >&2 +tar xfg arch.1 /dev/null echo "Begin directory listing 1" find foo | sort echo "End directory listing 1" -tar xfgv arch.2 /dev/null --warning=no-timestamp +tar xfg arch.2 /dev/null echo Begin directory listing 2 find foo | sort echo End directory listing 2 ) -stdout: -137. rename01.at:24: testing renamed dirs in incrementals ... -./rename01.at:27: +138. rename02.at:24: testing move between hierarchies ... +./rename02.at:27: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -12143,34 +12168,40 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 - mkdir foo genfile --file foo/file1 genfile --file foo/file2 mkdir foo/bar -genfile --file foo/bar/file +genfile --file foo/bar/file.r +mkdir foo/bar/baz +genfile --file foo/bar/baz/file.z + +sleep 1 echo "Creating base archive" tar -g incr -cf arch.1 -v foo -mv foo/bar foo/baz +mv foo/bar/baz foo echo "Creating incremental archive" tar -g incr -cf arch.2 -v foo mv foo old -tar xfg arch.1 /dev/null +tar xfg arch.1 /dev/null --warning=no-timestamp 2>tmperr +sort tmperr >&2 echo "Begin directory listing 1" find foo | sort echo "End directory listing 1" -tar xfg arch.2 /dev/null +tar xfgv arch.2 /dev/null --warning=no-timestamp echo Begin directory listing 2 find foo | sort echo End directory listing 2 ) +stdout: +stderr: ./dirrem02.at:34: mkdir posix (cd posix @@ -12197,7 +12228,54 @@ --warning=no-file-changed \ -v dir dir/sub >/dev/null ) +tar: dir2: Cannot stat: No such file or directory +tar: dir2: Cannot open: No such file or directory +tar: Exiting with failure status due to previous errors +stdout: +134. filerem02.at:26: ok + +./rename01.at:27: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +mkdir foo +genfile --file foo/file1 +genfile --file foo/file2 +mkdir foo/bar +genfile --file foo/bar/file + +echo "Creating base archive" +tar -g incr -cf arch.1 -v foo + +mv foo/bar foo/baz + +echo "Creating incremental archive" +tar -g incr -cf arch.2 -v foo + +mv foo old + +tar xfg arch.1 /dev/null + +echo "Begin directory listing 1" +find foo | sort +echo "End directory listing 1" +tar xfg arch.2 /dev/null +echo Begin directory listing 2 +find foo | sort +echo End directory listing 2 +) +stdout: +136. dirrem02.at:31: ok 139. rename03.at:23: testing cyclic renames ... ./rename03.at:26: mkdir gnu @@ -12255,121 +12333,7 @@ find foo | sort echo End directory listing 2 ) -stdout: -136. dirrem02.at:31: ok - -./extrac20.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -for i in a b c -do - dir=in$i - mkdir -p $dir/root/dir $dir/root/dirsymlink - touch $dir/root/dirsymlink/file$i - test $i != a && touch $dir/root/dirsymlink/file.conflict - tar cf archive$i.tar -C $dir root -done - -prep() -{ - echo "== $1 ==" - echo "== $1 ==" >&2 - backup_dir=$1 - dir=out - mkdir -p $dir/root/dir - ln -s dir $dir/root/dirsymlink - test $round = normal && cd $dir >/dev/null -} - -clean() -{ - test $round = normal && cd .. >/dev/null - find $dir | sort - mv $dir $backup_dir -} - -# Expand to '-f ../$1' or '-f $1 -C $dir' depending on $round variable -file_spec() -{ - if test $round = normal - then - echo "-f ../$1" - else - echo "-f $1 -C $dir" - fi -} - -for round in normal dir -do - # Check that 'dirsymlink' replaces 'dir' - prep without_option_$round - tar -x `file_spec archivea.tar` || exit 1 - tar -x `file_spec archiveb.tar` || exit 1 - clean - - # Keep directory symlink must keep root/dirsymlink - prep with_option_$round - tar -x --keep-directory-symlink `file_spec archivea.tar` || exit 1 - tar -x --keep-directory-symlink `file_spec archiveb.tar` || exit 1 - clean - - prep collision_$round - tar -x --keep-directory-symlink `file_spec archivea.tar` --keep-old-files || exit 1 - tar -x --keep-directory-symlink `file_spec archiveb.tar` --keep-old-files || exit 1 - tar -x --keep-directory-symlink `file_spec archivec.tar` --keep-old-files && exit 1 - clean -done -) -./rename01.at:27: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir foo -genfile --file foo/file1 -genfile --file foo/file2 -mkdir foo/bar -genfile --file foo/bar/file - -echo "Creating base archive" -tar -g incr -cf arch.1 -v foo - -mv foo/bar foo/baz - -echo "Creating incremental archive" -tar -g incr -cf arch.2 -v foo - -mv foo old - -tar xfg arch.1 /dev/null - -echo "Begin directory listing 1" -find foo | sort -echo "End directory listing 1" - -tar xfg arch.2 /dev/null -echo Begin directory listing 2 -find foo | sort -echo End directory listing 2 -) 140. rename04.at:27: testing renamed directory containing subdirectories ... ./rename04.at:30: mkdir gnu @@ -12487,14 +12451,87 @@ tar -xf archive.2 -g db.2 find dir | sort ) +./extrac20.at:24: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +for i in a b c +do + dir=in$i + mkdir -p $dir/root/dir $dir/root/dirsymlink + touch $dir/root/dirsymlink/file$i + test $i != a && touch $dir/root/dirsymlink/file.conflict + tar cf archive$i.tar -C $dir root +done + +prep() +{ + echo "== $1 ==" + echo "== $1 ==" >&2 + backup_dir=$1 + dir=out + mkdir -p $dir/root/dir + ln -s dir $dir/root/dirsymlink + test $round = normal && cd $dir >/dev/null +} + +clean() +{ + test $round = normal && cd .. >/dev/null + find $dir | sort + mv $dir $backup_dir +} + +# Expand to '-f ../$1' or '-f $1 -C $dir' depending on $round variable +file_spec() +{ + if test $round = normal + then + echo "-f ../$1" + else + echo "-f $1 -C $dir" + fi +} + +for round in normal dir +do + # Check that 'dirsymlink' replaces 'dir' + prep without_option_$round + tar -x `file_spec archivea.tar` || exit 1 + tar -x `file_spec archiveb.tar` || exit 1 + clean + + # Keep directory symlink must keep root/dirsymlink + prep with_option_$round + tar -x --keep-directory-symlink `file_spec archivea.tar` || exit 1 + tar -x --keep-directory-symlink `file_spec archiveb.tar` || exit 1 + clean + + prep collision_$round + tar -x --keep-directory-symlink `file_spec archivea.tar` --keep-old-files || exit 1 + tar -x --keep-directory-symlink `file_spec archiveb.tar` --keep-old-files || exit 1 + tar -x --keep-directory-symlink `file_spec archivec.tar` --keep-old-files && exit 1 + clean +done +) 137. rename01.at:24: ok -./rename04.at:30: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +141. rename05.at:24: testing renamed subdirectories ... +./rename05.at:27: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -12511,6 +12548,7 @@ tar -cf archive.1 -g db.1 directory decho Renaming +mv directory/subdir directory/subdir.0 mv directory dir decho Creating incremental archive @@ -12520,20 +12558,19 @@ mv dir orig decho First restore -tar -xf archive.1 -g db.1 +tar -xf archive.1 -g db.1 --warning=no-timestamp find directory | sort decho Second restore -tar -xf archive.2 -g db.2 +tar -xf archive.2 -g db.2 --warning=no-timestamp find dir | sort ) -141. rename05.at:24: testing renamed subdirectories ... -./rename05.at:27: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./rename04.at:30: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -12550,7 +12587,6 @@ tar -cf archive.1 -g db.1 directory decho Renaming -mv directory/subdir directory/subdir.0 mv directory dir decho Creating incremental archive @@ -12560,15 +12596,13 @@ mv dir orig decho First restore -tar -xf archive.1 -g db.1 --warning=no-timestamp +tar -xf archive.1 -g db.1 find directory | sort decho Second restore -tar -xf archive.2 -g db.2 --warning=no-timestamp +tar -xf archive.2 -g db.2 find dir | sort ) -103. extrac20.at:21: ok - ./rename05.at:27: mkdir oldgnu (cd oldgnu @@ -12608,6 +12642,8 @@ tar -xf archive.2 -g db.2 --warning=no-timestamp find dir | sort ) +140. rename04.at:27: ok + 142. rename06.at:19: testing chained renames ... ./rename06.at:29: mkdir gnu @@ -12688,7 +12724,7 @@ tar -xf archive.2 -g db.2 --warning=no-timestamp find dir | sort ) -140. rename04.at:27: ok +103. extrac20.at:21: ok ./rename06.at:29: mkdir oldgnu (cd oldgnu @@ -12730,6 +12766,7 @@ find test1 | sort ) +141. rename05.at:24: ok 143. chtype.at:27: testing changed file types in incrementals ... ./chtype.at:30: mkdir gnu @@ -12771,7 +12808,6 @@ tar -xf archive.2 --listed-incremental=/dev/null --warning=no-timestamp find directory | sort ) -141. rename05.at:24: ok ./rename06.at:29: mkdir posix @@ -13016,29 +13052,6 @@ ls directory/test1 ) -./link01.at:36: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -mkdir directory -mkdir directory/test1 -mkdir directory/test2 - -echo TEST > directory/test1/test.txt -ln directory/test1/test.txt directory/test2/test.txt || exit 77 - -tar cf archive directory/test1/test.txt directory/test1/test.txt - -rm -r directory -tar xf archive --warning=no-timestamp - -ls directory/test1 -) ./ignfail.at:26: mkdir posix (cd posix @@ -13091,11 +13104,11 @@ test $status = 0 ) ./link01.at:36: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -13114,11 +13127,11 @@ ls directory/test1 ) ./link01.at:36: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -13187,7 +13200,32 @@ chmod 700 directory test $status = 0 ) +./link01.at:36: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +mkdir directory +mkdir directory/test1 +mkdir directory/test2 + +echo TEST > directory/test1/test.txt +ln directory/test1/test.txt directory/test2/test.txt || exit 77 + +tar cf archive directory/test1/test.txt directory/test1/test.txt + +rm -r directory +tar xf archive --warning=no-timestamp + +ls directory/test1 +) 145. link01.at:33: ok +144. ignfail.at:23: ok + 146. link02.at:32: testing preserve hard links with --remove-files ... ./link02.at:35: @@ -13206,8 +13244,35 @@ tar -c -f archive --remove-files file1 file2 file3 file4 tar tfv archive | sed -n 's/.*file[2-4] link to //p' ) -144. ignfail.at:23: ok +147. link03.at:24: testing working -l with --remove-files ... +./link03.at:34: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + + +genfile -l 64 -f file1 +ln file1 file2 +ln file2 file3 +ln file3 file4 + +echo archive.1 +tar -c -f archive.1 -l --remove-files file1 file2 file3 file4 + +genfile -l 64 -f file1 +ln file1 file2 +ln file2 file3 +ln file3 file4 +echo archive.2 +tar -c -f archive.2 -l --remove-files file1 file2 file3 +echo testing archive.2 +tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p' +) ./link02.at:35: mkdir oldgnu (cd oldgnu @@ -13224,13 +13289,12 @@ tar -c -f archive --remove-files file1 file2 file3 file4 tar tfv archive | sed -n 's/.*file[2-4] link to //p' ) -147. link03.at:24: testing working -l with --remove-files ... ./link03.at:34: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -13286,11 +13350,11 @@ tar tfv archive | sed -n 's/.*file[2-4] link to //p' ) ./link03.at:34: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -13329,36 +13393,7 @@ tar -c -f archive --remove-files file1 file2 file3 file4 tar tfv archive | sed -n 's/.*file[2-4] link to //p' ) -./link03.at:34: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - - -genfile -l 64 -f file1 -ln file1 file2 -ln file2 file3 -ln file3 file4 - -echo archive.1 -tar -c -f archive.1 -l --remove-files file1 file2 file3 file4 - -genfile -l 64 -f file1 -ln file1 file2 -ln file2 file3 -ln file3 file4 - -echo archive.2 -tar -c -f archive.2 -l --remove-files file1 file2 file3 -echo testing archive.2 -tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p' -) 146. link02.at:32: ok - ./link03.at:34: mkdir posix (cd posix @@ -13387,6 +13422,7 @@ echo testing archive.2 tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p' ) + 148. link04.at:29: testing link count is 1 but multiple occurrences ... ./link04.at:32: mkdir v7 @@ -13478,41 +13514,6 @@ s,symlink,FOO,g ' | sort ) -./exclude05.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -rm -rf testdir exclfile -mkdir -p testdir -awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \ - while read name - do - genfile --file $name - done - -awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile - -tar cf archive --anchored --exclude-from=exclfile \ - testdir -tar tf archive | sort - -echo "NEXT" -tar cf archive --exclude-from=exclfile \ - testdir -tar tf archive | sort - -rm -rf testdir exclfile - -) 147. link03.at:24: ok ./link04.at:32: mkdir ustar @@ -13673,10 +13674,24 @@ genfile --file=this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_between_name_and_prefix || exit 77 tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_between_name_and_prefix ) -150. long01.at:28: ok 151. lustar01.at:21: ok +150. long01.at:28: ok + + +152. lustar02.at:21: testing ustar: unsplittable path name ... +./lustar02.at:32: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * +install-sh -d this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be >/dev/null && genfile --file this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be/tween_name_and_prefix || exit 77 +tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be +) 153. lustar03.at:21: testing ustar: splitting long names ... ./lustar03.at:29: mkdir ustar @@ -13693,22 +13708,51 @@ tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation/of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be echo "List archive" tar tf archive) -152. lustar02.at:21: testing ustar: unsplittable path name ... -./lustar02.at:32: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./exclude05.at:24: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * -install-sh -d this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be >/dev/null && genfile --file this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be/tween_name_and_prefix || exit 77 -tar cf archive this_is_a_very_long_name_for_a_file_designed_to_test_generation_of_ustar_archives_by_gnu_tar_semicolon_it_will_not_fit_the_name_field_and_cannot_be_split_be +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +rm -rf testdir exclfile +mkdir -p testdir +awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \ + while read name + do + genfile --file $name + done + +awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile + +tar cf archive --anchored --exclude-from=exclfile \ + testdir +tar tf archive | sort + +echo "NEXT" +tar cf archive --exclude-from=exclfile \ + testdir +tar tf archive | sort + +rm -rf testdir exclfile + ) 152. lustar02.at:21: ok + 153. lustar03.at:21: ok + +154. old.at:23: testing old archives ... +./old.at:27: +mkdir directory +tar cfvo archive directory || exit 1 +tar tf archive + ./incr04.at:34: mkdir oldgnu (cd oldgnu @@ -13734,54 +13778,7 @@ echo "Incremental dump" tar cvf a1.tar -g a.sna a ) - - -./incr03.at:31: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -ckmtime || exit 77 - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir directory -genfile --file=directory/x -genfile --file=directory/y - -sleep 1 - -tar -cf archive.1 -g db directory - -mv directory/x directory/z -cp db db.old -tar -cf archive.2 -g db directory - -mv directory orig - -echo Listing of archive.1 -tar -tf archive.1 | sort -echo Listing of archive.2 -tar -tf archive.2 | sort - -echo Directory after first restore -tar -xf archive.1 -g db --warning=no-timestamp -find directory | sort - -echo Directory after second restore -tar -xf archive.2 -g db --warning=no-timestamp -find directory | sort -) -154. old.at:23: testing old archives ... -./old.at:27: -mkdir directory -tar cfvo archive directory || exit 1 -tar tf archive - +154. old.at:23: ok 155. time01.at:20: testing time: tricky time stamps ... ./time01.at:23: mkdir pax @@ -13834,7 +13831,46 @@ tar -c -f archive.tar dir tar -d -f archive.tar dir ) -154. old.at:23: ok +./incr03.at:31: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +ckmtime || exit 77 + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir directory +genfile --file=directory/x +genfile --file=directory/y + +sleep 1 + +tar -cf archive.1 -g db directory + +mv directory/x directory/z +cp db db.old +tar -cf archive.2 -g db directory + +mv directory orig + +echo Listing of archive.1 +tar -tf archive.1 | sort +echo Listing of archive.2 +tar -tf archive.2 | sort + +echo Directory after first restore +tar -xf archive.1 -g db --warning=no-timestamp +find directory | sort + +echo Directory after second restore +tar -xf archive.2 -g db --warning=no-timestamp +find directory | sort +) 156. time02.at:20: testing time: clamping mtime ... ./time02.at:23: @@ -13978,6 +14014,50 @@ cmp file2 extract-dir-pipe/file2 ) 157. multiv01.at:23: ok +./rename02.at:27: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir foo +genfile --file foo/file1 +genfile --file foo/file2 +mkdir foo/bar +genfile --file foo/bar/file.r +mkdir foo/bar/baz +genfile --file foo/bar/baz/file.z + +sleep 1 + +echo "Creating base archive" +tar -g incr -cf arch.1 -v foo + +mv foo/bar/baz foo + +echo "Creating incremental archive" +tar -g incr -cf arch.2 -v foo + +mv foo old + +tar xfg arch.1 /dev/null --warning=no-timestamp 2>tmperr +sort tmperr >&2 + +echo "Begin directory listing 1" +find foo | sort +echo "End directory listing 1" + +tar xfgv arch.2 /dev/null --warning=no-timestamp +echo Begin directory listing 2 +find foo | sort +echo End directory listing 2 +) 158. multiv02.at:28: testing skipping a straddling member ... ./multiv02.at:31: @@ -14000,6 +14080,62 @@ echo separator tar -v -x -f A.tar -f B.tar -f C.tar -M en --warning=no-timestamp || exit 1 ) +./rename03.at:26: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +mkdir foo +genfile --file foo/file1 +genfile --file foo/file2 + +mkdir foo/a +genfile --file foo/a/filea + +mkdir foo/b +genfile --file foo/b/fileb + +mkdir foo/c +genfile --file foo/c/filec + +sleep 1 + +echo "First dump" +echo "First dump">&2 +tar -g incr -cf arch.1 -v foo 2>tmperr +sort tmperr >&2 + +# Shuffle directories: +(cd foo +mv a $$ +mv c a +mv b c +mv $$ b) + +echo "Second dump" +echo "Second dump" >&2 +tar -g incr -cf arch.2 -v foo 2>tmperr +sort tmperr >&2 + +tar xfg arch.1 /dev/null --warning=no-timestamp + +echo "Begin directory listing 1" +find foo | sort +echo "End directory listing 1" + +tar xfgv arch.2 /dev/null --warning=no-timestamp +echo Begin directory listing 2 +find foo | sort +echo End directory listing 2 +) ./multiv02.at:31: mkdir oldgnu (cd oldgnu @@ -14123,106 +14259,6 @@ tar -M -x -f arch.1 -f arch.2 --warning=no-timestamp || exit 1 cmp $BFILE bfile ) -./rename02.at:27: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir foo -genfile --file foo/file1 -genfile --file foo/file2 -mkdir foo/bar -genfile --file foo/bar/file.r -mkdir foo/bar/baz -genfile --file foo/bar/baz/file.z - -sleep 1 - -echo "Creating base archive" -tar -g incr -cf arch.1 -v foo - -mv foo/bar/baz foo - -echo "Creating incremental archive" -tar -g incr -cf arch.2 -v foo - -mv foo old - -tar xfg arch.1 /dev/null --warning=no-timestamp 2>tmperr -sort tmperr >&2 - -echo "Begin directory listing 1" -find foo | sort -echo "End directory listing 1" - -tar xfgv arch.2 /dev/null --warning=no-timestamp -echo Begin directory listing 2 -find foo | sort -echo End directory listing 2 -) -./rename03.at:26: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -mkdir foo -genfile --file foo/file1 -genfile --file foo/file2 - -mkdir foo/a -genfile --file foo/a/filea - -mkdir foo/b -genfile --file foo/b/fileb - -mkdir foo/c -genfile --file foo/c/filec - -sleep 1 - -echo "First dump" -echo "First dump">&2 -tar -g incr -cf arch.1 -v foo 2>tmperr -sort tmperr >&2 - -# Shuffle directories: -(cd foo -mv a $$ -mv c a -mv b c -mv $$ b) - -echo "Second dump" -echo "Second dump" >&2 -tar -g incr -cf arch.2 -v foo 2>tmperr -sort tmperr >&2 - -tar xfg arch.1 /dev/null --warning=no-timestamp - -echo "Begin directory listing 1" -find foo | sort -echo "End directory listing 1" - -tar xfgv arch.2 /dev/null --warning=no-timestamp -echo Begin directory listing 2 -find foo | sort -echo End directory listing 2 -) 159. multiv03.at:30: ok 160. multiv04.at:36: testing split directory members in a MV archive ... @@ -14293,6 +14329,71 @@ echo Diffing szesc cmp bak/szesc szesc || exit 1 ) +./incr04.at:34: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +ckmtime || exit 77 + +install-sh -d a/b >/dev/null || exit 77 +awk 'BEGIN { + for (i=1;i<=142;i++) + printf("a/b/one_31_chars_long_file_name_%03d\n", i); + }' < /dev/null | genfile --files-from - + +sleep 1 + +echo "Initial dump" +tar cvf a0.tar -g a.sna a +mv a/b a/c +echo "Incremental dump" +tar cvf a1.tar -g a.sna a +) +./incr03.at:31: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +ckmtime || exit 77 + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir directory +genfile --file=directory/x +genfile --file=directory/y + +sleep 1 + +tar -cf archive.1 -g db directory + +mv directory/x directory/z +cp db db.old +tar -cf archive.2 -g db directory + +mv directory orig + +echo Listing of archive.1 +tar -tf archive.1 | sort +echo Listing of archive.2 +tar -tf archive.2 | sort + +echo Directory after first restore +tar -xf archive.1 -g db --warning=no-timestamp +find directory | sort + +echo Directory after second restore +tar -xf archive.2 -g db --warning=no-timestamp +find directory | sort +) 161. multiv05.at:26: ok 162. multiv06.at:27: testing Multivolumes with L=record_size ... @@ -14345,14 +14446,58 @@ cd $TEST_DATA_DIR tar -t -M -fxsplit-1.tar -fxsplit-2.tar ---- - 2026-09-03 13:54:28.601526036 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/163/stdout 2026-09-03 13:54:28.583611836 +0000 +--- - 2025-08-01 07:34:11.489186715 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/163/stdout 2025-08-01 07:34:11.484167843 +0000 @@ -1,4 +1 @@ -Archive volumes split at an extended header Volume 1 -foo -bar 163. multiv07.at:28: skipped (multiv07.at:31) +./rename02.at:27: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir foo +genfile --file foo/file1 +genfile --file foo/file2 +mkdir foo/bar +genfile --file foo/bar/file.r +mkdir foo/bar/baz +genfile --file foo/bar/baz/file.z + +sleep 1 + +echo "Creating base archive" +tar -g incr -cf arch.1 -v foo + +mv foo/bar/baz foo + +echo "Creating incremental archive" +tar -g incr -cf arch.2 -v foo + +mv foo old + +tar xfg arch.1 /dev/null --warning=no-timestamp 2>tmperr +sort tmperr >&2 + +echo "Begin directory listing 1" +find foo | sort +echo "End directory listing 1" + +tar xfgv arch.2 /dev/null --warning=no-timestamp +echo Begin directory listing 2 +find foo | sort +echo End directory listing 2 +) 164. multiv08.at:25: testing multivolume header creation ... ./multiv08.at:28: @@ -14373,6 +14518,62 @@ ) 164. multiv08.at:25: ok +./rename03.at:26: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +mkdir foo +genfile --file foo/file1 +genfile --file foo/file2 + +mkdir foo/a +genfile --file foo/a/filea + +mkdir foo/b +genfile --file foo/b/fileb + +mkdir foo/c +genfile --file foo/c/filec + +sleep 1 + +echo "First dump" +echo "First dump">&2 +tar -g incr -cf arch.1 -v foo 2>tmperr +sort tmperr >&2 + +# Shuffle directories: +(cd foo +mv a $$ +mv c a +mv b c +mv $$ b) + +echo "Second dump" +echo "Second dump" >&2 +tar -g incr -cf arch.2 -v foo 2>tmperr +sort tmperr >&2 + +tar xfg arch.1 /dev/null --warning=no-timestamp + +echo "Begin directory listing 1" +find foo | sort +echo "End directory listing 1" + +tar xfgv arch.2 /dev/null --warning=no-timestamp +echo Begin directory listing 2 +find foo | sort +echo End directory listing 2 +) 165. multiv09.at:26: testing bad next volume ... ./multiv09.at:33: mkdir v7 @@ -14408,6 +14609,46 @@ q EOF ) +./chtype.at:30: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77 +mkdir directory/a +genfile --file directory/a/a + +echo First backup +tar --create --file=archive.1 --listed-incremental=db.1 directory + +sleep 2 + +# Remove directory b and create a file with this name. +# Previous versions were not able to restore over this file. +rm -r directory/b +genfile --file directory/b +genfile --file directory/a/b + +echo Second backup +tar --create --file=archive.2 --listed-incremental=db.2 directory + +# Delete a +rm -r directory + +echo Restore archive.1 +tar -xf archive.1 --listed-incremental=/dev/null --warning=no-timestamp +echo Restore archive.2 +tar -xf archive.2 --listed-incremental=/dev/null --warning=no-timestamp +find directory | sort +) ./multiv09.at:33: mkdir ustar (cd ustar @@ -14459,72 +14700,7 @@ q EOF ) -./incr04.at:34: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -ckmtime || exit 77 - -install-sh -d a/b >/dev/null || exit 77 -awk 'BEGIN { - for (i=1;i<=142;i++) - printf("a/b/one_31_chars_long_file_name_%03d\n", i); - }' < /dev/null | genfile --files-from - - -sleep 1 - -echo "Initial dump" -tar cvf a0.tar -g a.sna a -mv a/b a/c -echo "Incremental dump" -tar cvf a1.tar -g a.sna a -) 165. multiv09.at:26: ok -./incr03.at:31: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -ckmtime || exit 77 - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir directory -genfile --file=directory/x -genfile --file=directory/y - -sleep 1 - -tar -cf archive.1 -g db directory - -mv directory/x directory/z -cp db db.old -tar -cf archive.2 -g db directory - -mv directory orig - -echo Listing of archive.1 -tar -tf archive.1 | sort -echo Listing of archive.2 -tar -tf archive.2 | sort - -echo Directory after first restore -tar -xf archive.1 -g db --warning=no-timestamp -find directory | sort - -echo Directory after second restore -tar -xf archive.2 -g db --warning=no-timestamp -find directory | sort -) 166. multiv10.at:37: testing file start at the beginning of a posix volume ... ./multiv10.at:40: @@ -14621,6 +14797,41 @@ tar -tvf 2.tar tar --numeric-owner -tvf 2.tar ) +./exclude05.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +rm -rf testdir exclfile +mkdir -p testdir +awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \ + while read name + do + genfile --file $name + done + +awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile + +tar cf archive --anchored --exclude-from=exclfile \ + testdir +tar tf archive | sort + +echo "NEXT" +tar cf archive --exclude-from=exclfile \ + testdir +tar tf archive | sort + +rm -rf testdir exclfile + +) 168. map.at:21: ok 169. sparse01.at:21: testing sparse files ... @@ -14648,9 +14859,9 @@ ) stdout: separator --rw-r--r-- pbuilder1/pbuilder1 1000 2026-09-03 13:54 begin --rw-r--r-- pbuilder1/pbuilder1 3102720 2026-09-03 13:54 sparsefile --rw-r--r-- pbuilder1/pbuilder1 1000 2026-09-03 13:54 end +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-08-01 07:34 begin +-rw-r--r-- pbuilder2/pbuilder2 3102720 2025-08-01 07:34 sparsefile +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-08-01 07:34 end separator sparsefile 3102720 ./sparse01.at:24: @@ -14677,9 +14888,9 @@ ) stdout: separator --rw-r--r-- pbuilder1/pbuilder1 1000 2026-09-03 13:54 begin --rw-r--r-- pbuilder1/pbuilder1 3102720 2026-09-03 13:54 sparsefile --rw-r--r-- pbuilder1/pbuilder1 1000 2026-09-03 13:54 end +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-08-01 07:34 begin +-rw-r--r-- pbuilder2/pbuilder2 3102720 2025-08-01 07:34 sparsefile +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-08-01 07:34 end separator sparsefile 3102720 ./sparse01.at:24: @@ -14706,9 +14917,9 @@ ) stdout: separator --rw-r--r-- pbuilder1/pbuilder1 1000 2026-09-03 13:54 begin --rw-r--r-- pbuilder1/pbuilder1 3102720 2026-09-03 13:54 sparsefile --rw-r--r-- pbuilder1/pbuilder1 1000 2026-09-03 13:54 end +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-08-01 07:34 begin +-rw-r--r-- pbuilder2/pbuilder2 3102720 2025-08-01 07:34 sparsefile +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-08-01 07:34 end separator sparsefile 3102720 169. sparse01.at:21: ok @@ -14730,239 +14941,6 @@ tar xfO archive | cat - > sparsecopy || exit 1 cmp sparsefile sparsecopy ) -./sparse02.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77 -tar --hole-detection=raw -c -f archive --sparse sparsefile || exit 1 -echo separator - -tar xfO archive | cat - > sparsecopy || exit 1 -cmp sparsefile sparsecopy -) -./sparse02.at:28: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77 -tar --hole-detection=raw -c -f archive --sparse sparsefile || exit 1 -echo separator - -tar xfO archive | cat - > sparsecopy || exit 1 -cmp sparsefile sparsecopy -) -./rename02.at:27: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir foo -genfile --file foo/file1 -genfile --file foo/file2 -mkdir foo/bar -genfile --file foo/bar/file.r -mkdir foo/bar/baz -genfile --file foo/bar/baz/file.z - -sleep 1 - -echo "Creating base archive" -tar -g incr -cf arch.1 -v foo - -mv foo/bar/baz foo - -echo "Creating incremental archive" -tar -g incr -cf arch.2 -v foo - -mv foo old - -tar xfg arch.1 /dev/null --warning=no-timestamp 2>tmperr -sort tmperr >&2 - -echo "Begin directory listing 1" -find foo | sort -echo "End directory listing 1" - -tar xfgv arch.2 /dev/null --warning=no-timestamp -echo Begin directory listing 2 -find foo | sort -echo End directory listing 2 -) -170. sparse02.at:21: ok -./rename03.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -mkdir foo -genfile --file foo/file1 -genfile --file foo/file2 - -mkdir foo/a -genfile --file foo/a/filea - -mkdir foo/b -genfile --file foo/b/fileb - -mkdir foo/c -genfile --file foo/c/filec - -sleep 1 - -echo "First dump" -echo "First dump">&2 -tar -g incr -cf arch.1 -v foo 2>tmperr -sort tmperr >&2 - -# Shuffle directories: -(cd foo -mv a $$ -mv c a -mv b c -mv $$ b) - -echo "Second dump" -echo "Second dump" >&2 -tar -g incr -cf arch.2 -v foo 2>tmperr -sort tmperr >&2 - -tar xfg arch.1 /dev/null --warning=no-timestamp - -echo "Begin directory listing 1" -find foo | sort -echo "End directory listing 1" - -tar xfgv arch.2 /dev/null --warning=no-timestamp -echo Begin directory listing 2 -find foo | sort -echo End directory listing 2 -) - -171. sparse03.at:21: testing storing sparse files > 8G ... -./sparse03.at:29: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 -genfile --length 1000 --file begin -genfile --length 1000 --file end -genfile --sparse --file sparsefile --block-size 512 8G A || exit 77 -tar -c -f archive --sparse begin sparsefile end || exit 1 -echo separator - -tar tfv archive -echo separator -mkdir directory -tar Cxf directory archive -genfile --stat=name,size sparsefile -cmp sparsefile directory/sparsefile -) -./exclude05.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -rm -rf testdir exclfile -mkdir -p testdir -awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \ - while read name - do - genfile --file $name - done - -awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile - -tar cf archive --anchored --exclude-from=exclfile \ - testdir -tar tf archive | sort - -echo "NEXT" -tar cf archive --exclude-from=exclfile \ - testdir -tar tf archive | sort - -rm -rf testdir exclfile - -) -./chtype.at:30: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77 -mkdir directory/a -genfile --file directory/a/a - -echo First backup -tar --create --file=archive.1 --listed-incremental=db.1 directory - -sleep 2 - -# Remove directory b and create a file with this name. -# Previous versions were not able to restore over this file. -rm -r directory/b -genfile --file directory/b -genfile --file directory/a/b - -echo Second backup -tar --create --file=archive.2 --listed-incremental=db.2 directory - -# Delete a -rm -r directory - -echo Restore archive.1 -tar -xf archive.1 --listed-incremental=/dev/null --warning=no-timestamp -echo Restore archive.2 -tar -xf archive.2 --listed-incremental=/dev/null --warning=no-timestamp -find directory | sort -) ./incremental.at:26: mkdir oldgnu (cd oldgnu @@ -15001,6 +14979,22 @@ echo y >structure/file tar cfv archive --listed=list structure ) +./sparse02.at:28: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77 +tar --hole-detection=raw -c -f archive --sparse sparsefile || exit 1 +echo separator + +tar xfO archive | cat - > sparsecopy || exit 1 +cmp sparsefile sparsecopy +) ./listed01.at:29: mkdir oldgnu (cd oldgnu @@ -15037,7 +15031,51 @@ tar tf archive.2 || exit 1 ) +./sparse02.at:28: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77 +tar --hole-detection=raw -c -f archive --sparse sparsefile || exit 1 +echo separator + +tar xfO archive | cat - > sparsecopy || exit 1 +cmp sparsefile sparsecopy +) +170. sparse02.at:21: ok + +171. sparse03.at:21: testing storing sparse files > 8G ... +./sparse03.at:29: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 +genfile --length 1000 --file begin +genfile --length 1000 --file end +genfile --sparse --file sparsefile --block-size 512 8G A || exit 77 +tar -c -f archive --sparse begin sparsefile end || exit 1 +echo separator + +tar tfv archive +echo separator +mkdir directory +tar Cxf directory archive +genfile --stat=name,size sparsefile +cmp sparsefile directory/sparsefile +) 125. incr04.at:29: ok +124. incr03.at:28: ok + 172. sparse04.at:21: testing storing long sparse file names ... ./sparse04.at:35: @@ -15052,8 +15090,6 @@ genfile --sparse --file 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 --block-size 512 8M A || exit 77 tar -f - -c --sparse --posix 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | tar tf - ) -172. sparse04.at:21: ok - 173. sparse05.at:21: testing listing sparse files bigger than 2^33 B ... ./sparse05.at:31: mkdir pax @@ -16071,7 +16107,7 @@ genfile --sparse --file BIGFILE --block-size 4K - < mapfile || exit 77 tar -f - -c --sparse --posix BIGFILE | tar tvf - | awk '{ print $3, $(NF) }' ) -124. incr03.at:28: ok +172. sparse04.at:21: ok 174. sparse06.at:21: testing storing sparse file using seek method ... ./sparse06.at:32: @@ -16145,7 +16181,7 @@ ) -174. sparse06.at:21: ok +138. rename02.at:24: ok 175. sparse07.at:21: testing sparse files with unicode names ... ./sparse07.at:24: @@ -16176,6 +16212,7 @@ tar tf archive ) +139. rename03.at:23: ok ./sparse07.at:24: mkdir oldgnu (cd oldgnu @@ -16190,11 +16227,9 @@ tar tf archive ) -138. rename02.at:24: ok -175. sparse07.at:21: ok +175. sparse07.at:21: ok -139. rename03.at:23: ok 176. sparsemv.at:21: testing sparse files in MV archives ... ./sparsemv.at:31: mkdir gnu @@ -16255,14 +16290,13 @@ echo "Compare archive" tar -d -M -f arc.1 -f arc.2 -f arc.3 ) - -178. spmvp01.at:21: testing sparse files in PAX MV archives, v.0.1 ... -./spmvp01.at:24: -mkdir pax -(cd pax -TEST_TAR_FORMAT=pax +174. sparse06.at:21: ok +./sparsemv.at:31: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H pax" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -16271,29 +16305,30 @@ genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77 echo "Pass 1: Split between data blocks" echo "Create archive" -tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile +tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1 echo "Test archive" -tar -t -M -f arc.1 -f arc.2 -f arc.3 +tar --record-size=512 -t -M -f arc.1 -f arc.2 echo "Compare archive" -tar -d -M -f arc.1 -f arc.2 -f arc.3 +tar --record-size=512 -d -M -f arc.1 -f arc.2 echo "Pass 2: Split within a data block" genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77 echo "Create archive" -tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile +tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1 echo "Test archive" -tar -t -M -f arc.1 -f arc.2 -f arc.3 +tar --record-size=512 -t -M -f arc.1 -f arc.2 echo "Compare archive" -tar -d -M -f arc.1 -f arc.2 -f arc.3 +tar --record-size=512 -d -M -f arc.1 -f arc.2 ) -177. spmvp00.at:21: ok -./sparsemv.at:31: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +177. spmvp00.at:21: ok +178. spmvp01.at:21: testing sparse files in PAX MV archives, v.0.1 ... +./spmvp01.at:24: +mkdir pax +(cd pax +TEST_TAR_FORMAT=pax export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H pax" export TAR_OPTIONS rm -rf * @@ -16302,21 +16337,22 @@ genfile --sparse --file sparsefile 0 ABCDEFGHIJK 1M ABCDEFGHI || exit 77 echo "Pass 1: Split between data blocks" echo "Create archive" -tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1 +tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile echo "Test archive" -tar --record-size=512 -t -M -f arc.1 -f arc.2 +tar -t -M -f arc.1 -f arc.2 -f arc.3 echo "Compare archive" -tar --record-size=512 -d -M -f arc.1 -f arc.2 +tar -d -M -f arc.1 -f arc.2 -f arc.3 echo "Pass 2: Split within a data block" genfile --sparse --file sparsefile 0 ABCDEFGHIJ 1M ABCDEFGHI || exit 77 echo "Create archive" -tar --sparse -c --record-size=512 -M -L6 -f arc.1 -f arc.2 sparsefile || exit 1 +tar --sparse --sparse-version=0.1 -c --record-size=512 -M -L6 -f arc.1 -f arc.2 -f arc.3 sparsefile echo "Test archive" -tar --record-size=512 -t -M -f arc.1 -f arc.2 +tar -t -M -f arc.1 -f arc.2 -f arc.3 echo "Compare archive" -tar --record-size=512 -d -M -f arc.1 -f arc.2 +tar -d -M -f arc.1 -f arc.2 -f arc.3 ) + 179. spmvp10.at:21: testing sparse files in PAX MV archives, v.1.0 ... ./spmvp10.at:24: mkdir pax @@ -16347,8 +16383,10 @@ echo "Compare archive" tar -d -M -f arc.1 -f arc.2 -f arc.3 ) +176. sparsemv.at:21: ok 178. spmvp01.at:21: ok + 180. sptrcreat.at:33: testing sparse file truncated while archiving ... ./sptrcreat.at:36: mkdir posix @@ -16368,10 +16406,7 @@ echo separator genfile --file foo --seek 200m --length 11575296 --pattern=zeros tar dvf bar | sed '/foo: Mod time differs/d') -176. sparsemv.at:21: ok 179. spmvp10.at:21: ok - - 181. sptrdiff00.at:26: testing file truncated in sparse region while comparing ... ./sptrdiff00.at:30: mkdir posix @@ -16391,6 +16426,7 @@ genfile --run --checkpoint 3 --length 200m --truncate foo -- \ tar --sparse -vdf bar ) + 182. sptrdiff01.at:26: testing file truncated in data region while comparing ... ./sptrdiff01.at:30: mkdir posix @@ -16410,6 +16446,24 @@ genfile --run --checkpoint 5 --length 221278210 --truncate foo -- \ tar --sparse -vdf bar ) +./sptrdiff00.at:30: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +genfile --sparse --block-size=1024 --file foo \ + 0 ABCDEFGHIJ 1M ABCDEFGHIJ 10M ABCDEFGHIJ 200M ABCDEFGHIJ || exit 77 +genfile --file baz +echo creating +tar --sparse -vcf bar foo baz +echo comparing +genfile --run --checkpoint 3 --length 200m --truncate foo -- \ + tar --sparse -vdf bar +) ./sptrcreat.at:36: mkdir gnu (cd gnu @@ -16428,7 +16482,7 @@ echo separator genfile --file foo --seek 200m --length 11575296 --pattern=zeros tar dvf bar | sed '/foo: Mod time differs/d') -./sptrdiff00.at:30: +./sptrdiff01.at:30: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -16443,15 +16497,33 @@ echo creating tar --sparse -vcf bar foo baz echo comparing +genfile --run --checkpoint 5 --length 221278210 --truncate foo -- \ + tar --sparse -vdf bar +) +./sptrdiff00.at:30: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile --sparse --block-size=1024 --file foo \ + 0 ABCDEFGHIJ 1M ABCDEFGHIJ 10M ABCDEFGHIJ 200M ABCDEFGHIJ || exit 77 +genfile --file baz +echo creating +tar --sparse -vcf bar foo baz +echo comparing genfile --run --checkpoint 3 --length 200m --truncate foo -- \ tar --sparse -vdf bar ) ./sptrdiff01.at:30: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -16464,6 +16536,24 @@ genfile --run --checkpoint 5 --length 221278210 --truncate foo -- \ tar --sparse -vdf bar ) +./sptrcreat.at:36: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile --sparse --block-size=1024 --file foo \ + 0 ABCDEFGHIJ 1M ABCDEFGHIJ 10M ABCDEFGHIJ 200M ABCDEFGHIJ || exit 77 +genfile --file baz +genfile --run --checkpoint 3 --length 200m --truncate foo -- \ + tar --sparse -vcf bar foo baz +echo Exit status: $? +echo separator +genfile --file foo --seek 200m --length 11575296 --pattern=zeros +tar dvf bar | sed '/foo: Mod time differs/d') ./exclude05.at:24: mkdir posix (cd posix @@ -16499,59 +16589,45 @@ rm -rf testdir exclfile ) -./sptrdiff00.at:30: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./chtype.at:30: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * -genfile --sparse --block-size=1024 --file foo \ - 0 ABCDEFGHIJ 1M ABCDEFGHIJ 10M ABCDEFGHIJ 200M ABCDEFGHIJ || exit 77 -genfile --file baz -echo creating -tar --sparse -vcf bar foo baz -echo comparing -genfile --run --checkpoint 3 --length 200m --truncate foo -- \ - tar --sparse -vdf bar -) -./sptrcreat.at:36: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * -genfile --sparse --block-size=1024 --file foo \ - 0 ABCDEFGHIJ 1M ABCDEFGHIJ 10M ABCDEFGHIJ 200M ABCDEFGHIJ || exit 77 -genfile --file baz -genfile --run --checkpoint 3 --length 200m --truncate foo -- \ - tar --sparse -vcf bar foo baz -echo Exit status: $? -echo separator -genfile --file foo --seek 200m --length 11575296 --pattern=zeros -tar dvf bar | sed '/foo: Mod time differs/d') -./sptrdiff01.at:30: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * +test -z "`sort < /dev/null 2>&1`" || exit 77 -genfile --sparse --block-size=1024 --file foo \ - 0 ABCDEFGHIJ 1M ABCDEFGHIJ 10M ABCDEFGHIJ 200M ABCDEFGHIJ || exit 77 -genfile --file baz -echo creating -tar --sparse -vcf bar foo baz -echo comparing -genfile --run --checkpoint 5 --length 221278210 --truncate foo -- \ - tar --sparse -vdf bar + +install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77 +mkdir directory/a +genfile --file directory/a/a + +echo First backup +tar --create --file=archive.1 --listed-incremental=db.1 directory + +sleep 2 + +# Remove directory b and create a file with this name. +# Previous versions were not able to restore over this file. +rm -r directory/b +genfile --file directory/b +genfile --file directory/a/b + +echo Second backup +tar --create --file=archive.2 --listed-incremental=db.2 directory + +# Delete a +rm -r directory + +echo Restore archive.1 +tar -xf archive.1 --listed-incremental=/dev/null --warning=no-timestamp +echo Restore archive.2 +tar -xf archive.2 --listed-incremental=/dev/null --warning=no-timestamp +find directory | sort ) 181. sptrdiff00.at:26: ok @@ -16600,7 +16676,6 @@ echo separator tar tf archive | sort || exit 1 ) -180. sptrcreat.at:33: ok ./update.at:31: mkdir ustar (cd ustar @@ -16623,7 +16698,7 @@ echo separator tar tf archive | sort || exit 1 ) -./chtype.at:30: +./update.at:31: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -16635,36 +16710,39 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 +mkdir directory +genfile --length 10240 --pattern zeros --file directory/file1 +genfile --length 10240 --pattern default --file directory/file2 -install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77 -mkdir directory/a -genfile --file directory/a/a - -echo First backup -tar --create --file=archive.1 --listed-incremental=db.1 directory - -sleep 2 +tar cf archive directory || exit 1 +echo separator +tar uf archive directory || exit 1 +echo separator +tar tf archive | sort || exit 1 +) +./update.at:31: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -# Remove directory b and create a file with this name. -# Previous versions were not able to restore over this file. -rm -r directory/b -genfile --file directory/b -genfile --file directory/a/b -echo Second backup -tar --create --file=archive.2 --listed-incremental=db.2 directory +test -z "`sort < /dev/null 2>&1`" || exit 77 -# Delete a -rm -r directory +mkdir directory +genfile --length 10240 --pattern zeros --file directory/file1 +genfile --length 10240 --pattern default --file directory/file2 -echo Restore archive.1 -tar -xf archive.1 --listed-incremental=/dev/null --warning=no-timestamp -echo Restore archive.2 -tar -xf archive.2 --listed-incremental=/dev/null --warning=no-timestamp -find directory | sort +tar cf archive directory || exit 1 +echo separator +tar uf archive directory || exit 1 +echo separator +tar tf archive | sort || exit 1 ) -182. sptrdiff01.at:26: ok - +183. update.at:28: ok 184. update01.at:29: testing update directories ... ./update01.at:32: @@ -16693,6 +16771,8 @@ echo "separator" tar tf arc | sort || exit 1 ) +182. sptrdiff01.at:26: ok + 185. update02.at:26: testing update changed files ... ./update02.at:29: mkdir v7 @@ -16720,51 +16800,7 @@ echo "separator" tar tf arc | sort || exit 1 ) -./update.at:31: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir directory -genfile --length 10240 --pattern zeros --file directory/file1 -genfile --length 10240 --pattern default --file directory/file2 - -tar cf archive directory || exit 1 -echo separator -tar uf archive directory || exit 1 -echo separator -tar tf archive | sort || exit 1 -) -./update.at:31: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir directory -genfile --length 10240 --pattern zeros --file directory/file1 -genfile --length 10240 --pattern default --file directory/file2 - -tar cf archive directory || exit 1 -echo separator -tar uf archive directory || exit 1 -echo separator -tar tf archive | sort || exit 1 -) -183. update.at:28: ok +180. sptrcreat.at:33: ok 186. update03.at:20: testing update with chdir ... ./update03.at:27: @@ -16809,13 +16845,6 @@ echo Update tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 ) -stdout: -separator --rw-r--r-- pbuilder1/pbuilder1 1000 2026-09-03 13:54 begin --rw-r--r-- pbuilder1/pbuilder1 8589935104 2026-09-03 13:54 sparsefile --rw-r--r-- pbuilder1/pbuilder1 1000 2026-09-03 13:54 end -separator -sparsefile 8589935104 ./update03.at:27: mkdir ustar (cd ustar @@ -16837,35 +16866,6 @@ echo Update tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 ) -171. sparse03.at:21: ok - -187. update04.at:20: testing update with wildcards ... -./update04.at:23: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - -genfile --file file.a -genfile --file file.b -genfile --file file.c -echo Create -tar cf archive ./file.* -sleep 1 -echo "update" > file.b -echo First update -tar ufv archive --wildcards './file.*' - -echo "Second update" -tar ufv archive --wildcards './file.*' - -echo "Non-matching pattern" -tar ufv archive --wildcards './file.*' './foo.*' -echo $? -) ./update03.at:27: mkdir posix (cd posix @@ -16909,32 +16909,6 @@ tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 ) 186. update03.at:20: ok - -188. verify.at:25: testing verify ... -./verify.at:28: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - -touch foo -tar -cvf archive.tar --verify foo -) -./verify.at:28: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -touch foo -tar -cvf archive.tar --verify foo -) ./incr02.at:35: mkdir oldgnu (cd oldgnu @@ -16981,6 +16955,94 @@ # Check the timestamp genfile --stat=mtime dir/subdir1 | diff ts - ) + +187. update04.at:20: testing update with wildcards ... +./update04.at:23: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + +genfile --file file.a +genfile --file file.b +genfile --file file.c +echo Create +tar cf archive ./file.* +sleep 1 +echo "update" > file.b +echo First update +tar ufv archive --wildcards './file.*' + +echo "Second update" +tar ufv archive --wildcards './file.*' + +echo "Non-matching pattern" +tar ufv archive --wildcards './file.*' './foo.*' +echo $? +) +./multiv04.at:39: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + + +mkdir directory +awk 'BEGIN { for (i = 0; i < 1024; i++) printf("directory/%014x\n", i); }' structure/file + +# On Nextstep (and perhaps other 4.3BSD systems), +# a newly created file's ctime isn't updated +# until the next sync or stat operation on the file. +ls -l structure/file >/dev/null + +# If the time of an initial backup and the creation time of a file contained +# in that backup are the same, the file will be backed up again when an +# incremental backup is done, because the incremental backup backs up +# files created "on or after" the initial backup time. Without the sleep +# command, behaviour of tar becomes variable, depending whether the system +# clock ticked over to the next second between creating the file and +# backing it up. +sleep 1 + +tar cf archive --listed=list structure +tar cfv archive --listed=list structure +echo separator +# ReiserFS often offsets the timestamps of newly created files +# 1 second to the past. Try to compensate for it, until a better +# solution is found. +sleep 2 +echo y >structure/file +tar cfv archive --listed=list structure +) 192. shortfile.at:26: testing short input files ... ./shortfile.at:29: @@ -17243,6 +17343,33 @@ touch foo tar uf archive foo ) +./update04.at:23: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile --file file.a +genfile --file file.b +genfile --file file.c +echo Create +tar cf archive ./file.* +sleep 1 +echo "update" > file.b +echo First update +tar ufv archive --wildcards './file.*' + +echo "Second update" +tar ufv archive --wildcards './file.*' + +echo "Non-matching pattern" +tar ufv archive --wildcards './file.*' './foo.*' +echo $? +) +119. listed01.at:26: ok ./shortupd.at:34: mkdir oldgnu (cd oldgnu @@ -17255,6 +17382,7 @@ touch foo tar uf archive foo ) + ./shortupd.at:34: mkdir ustar (cd ustar @@ -17279,20 +17407,6 @@ touch foo tar uf archive foo ) -./shortupd.at:34: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -touch foo -tar uf archive foo -) -193. shortupd.at:31: ok - 194. truncate.at:29: testing truncate ... ./truncate.at:32: mkdir v7 @@ -17311,6 +17425,54 @@ echo separator genfile --file foo --seek 195k --length 5k --pattern=zeros tar dvf bar|sed '/foo: Mod time differs/d') +./exclude05.at:24: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +rm -rf testdir exclfile +mkdir -p testdir +awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \ + while read name + do + genfile --file $name + done + +awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile + +tar cf archive --anchored --exclude-from=exclfile \ + testdir +tar tf archive | sort + +echo "NEXT" +tar cf archive --exclude-from=exclfile \ + testdir +tar tf archive | sort + +rm -rf testdir exclfile + +) +./shortupd.at:34: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +touch foo +tar uf archive foo +) +193. shortupd.at:31: ok ./truncate.at:32: mkdir oldgnu (cd oldgnu @@ -17328,6 +17490,21 @@ echo separator genfile --file foo --seek 195k --length 5k --pattern=zeros tar dvf bar|sed '/foo: Mod time differs/d') + +195. grow.at:24: testing grow ... +./grow.at:27: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + +genfile --file foo --length 50000k +genfile --file baz +genfile --run=10 --checkpoint 10 --length 1024 --append foo -- tar -vcf bar foo baz +) ./truncate.at:32: mkdir ustar (cd ustar @@ -17362,32 +17539,6 @@ echo separator genfile --file foo --seek 195k --length 5k --pattern=zeros tar dvf bar|sed '/foo: Mod time differs/d') -./multiv04.at:39: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - - -mkdir directory -awk 'BEGIN { for (i = 0; i < 1024; i++) printf("directory/%014x\n", i); }' &1`" || exit 77 - - -rm -rf testdir exclfile -mkdir -p testdir -awk 'BEGIN {for (i=9; i < 100; ++i ) { print "testdir/file" i; }}' < /dev/null | \ - while read name - do - genfile --file $name - done - -awk 'BEGIN {for (i=1000000; i >= 12; --i ) { print "testdir/file" i }}' < /dev/null > exclfile - -tar cf archive --anchored --exclude-from=exclfile \ - testdir -tar tf archive | sort - -echo "NEXT" -tar cf archive --exclude-from=exclfile \ - testdir -tar tf archive | sort - -rm -rf testdir exclfile - -) -./update04.at:23: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -genfile --file file.a -genfile --file file.b -genfile --file file.c -echo Create -tar cf archive ./file.* -sleep 1 -echo "update" > file.b -echo First update -tar ufv archive --wildcards './file.*' - -echo "Second update" -tar ufv archive --wildcards './file.*' - -echo "Non-matching pattern" -tar ufv archive --wildcards './file.*' './foo.*' -echo $? -) -./incremental.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -ckmtime || exit 77 - -mkdir structure -echo x >structure/file - -# On Nextstep (and perhaps other 4.3BSD systems), -# a newly created file's ctime isn't updated -# until the next sync or stat operation on the file. -ls -l structure/file >/dev/null - -# If the time of an initial backup and the creation time of a file contained -# in that backup are the same, the file will be backed up again when an -# incremental backup is done, because the incremental backup backs up -# files created "on or after" the initial backup time. Without the sleep -# command, behaviour of tar becomes variable, depending whether the system -# clock ticked over to the next second between creating the file and -# backing it up. -sleep 1 - -tar cf archive --listed=list structure -tar cfv archive --listed=list structure -echo separator -# ReiserFS often offsets the timestamps of newly created files -# 1 second to the past. Try to compensate for it, until a better -# solution is found. -sleep 2 -echo y >structure/file -tar cfv archive --listed=list structure -) -./grow.at:27: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -genfile --file foo --length 50000k -genfile --file baz -genfile --run=10 --checkpoint 10 --length 1024 --append foo -- tar -vcf bar foo baz -) -119. listed01.at:26: ok - 196. sigpipe.at:21: testing sigpipe handling ... ./sigpipe.at:30: @@ -17686,14 +17696,12 @@ find . | sort exit $EC -198. remfiles01.at:28: ok - ./grow.at:27: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -17701,6 +17709,8 @@ genfile --file baz genfile --run=10 --checkpoint 10 --length 1024 --append foo -- tar -vcf bar foo baz ) +198. remfiles01.at:28: ok + 199. remfiles02.at:28: testing remove-files with compression: grand-child ... ./remfiles02.at:32: @@ -17734,6 +17744,8 @@ genfile --stat a 200. remfiles03.at:28: ok +143. chtype.at:27: ok + 201. remfiles04a.at:25: testing remove-files with -C:rel in -c/non-incr. mode ... ./remfiles04a.at:28: @@ -17755,8 +17767,6 @@ echo A find . | sort ) -201. remfiles04a.at:25: ok - 202. remfiles04b.at:33: testing remove-files with -C:rel in -c/incr. mode ... ./remfiles04b.at:36: mkdir gnu @@ -17777,8 +17787,10 @@ echo A find . | sort ) +201. remfiles04a.at:25: ok 202. remfiles04b.at:33: ok + 203. remfiles04c.at:33: testing remove-files with -C:rel in -r mode ... ./remfiles04c.at:36: mkdir gnu @@ -17802,8 +17814,6 @@ echo B find . | sort ) -203. remfiles04c.at:33: ok - 204. remfiles05a.at:34: testing remove-files with -C:rel,rel in -c/non-incr. mode ... ./remfiles05a.at:37: mkdir gnu @@ -17827,7 +17837,38 @@ decho B find . | sort ) -./grow.at:27: +203. remfiles04c.at:33: ok +204. remfiles05a.at:34: ok + + +./update01.at:32: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir a +genfile --file a/b + +tar cf arc a + +echo "separator" + +sleep 2 +genfile --file a/c + +tar ufv arc a +echo "separator" +tar tf arc | sort || exit 1 +) +206. remfiles05c.at:25: testing remove-files with -C:rel,rel in -r mode ... +./remfiles05c.at:28: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -17836,12 +17877,22 @@ export TAR_OPTIONS rm -rf * -genfile --file foo --length 50000k -genfile --file baz -genfile --run=10 --checkpoint 10 --length 1024 --append foo -- tar -vcf bar foo baz -) -204. remfiles05a.at:34: ok +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir foo +mkdir bar +echo file > file +echo foo/file > foo/file +echo bar/file > bar/file +tar -cf foo.tar -C foo file -C ../bar file +decho A +find . | sort +decho B +tar -rvf foo.tar --remove-files -C foo file -C ../bar file +decho C +find . | sort +) 205. remfiles05b.at:25: testing remove-files with -C:rel,rel in -c/incr. mode ... ./remfiles05b.at:28: mkdir gnu @@ -17866,9 +17917,11 @@ find . | sort ) 205. remfiles05b.at:25: ok +206. remfiles05c.at:25: ok -206. remfiles05c.at:25: testing remove-files with -C:rel,rel in -r mode ... -./remfiles05c.at:28: + +208. remfiles06b.at:25: testing remove-files with -C:rel,abs in -c/incr. mode ... +./remfiles06b.at:28: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -17885,16 +17938,12 @@ echo file > file echo foo/file > foo/file echo bar/file > bar/file -tar -cf foo.tar -C foo file -C ../bar file +DIR=`pwd` decho A -find . | sort +tar -cvf foo.tar --incremental --remove-files -C foo file -C $DIR/bar file decho B -tar -rvf foo.tar --remove-files -C foo file -C ../bar file -decho C find . | sort ) -206. remfiles05c.at:25: ok - 207. remfiles06a.at:25: testing remove-files with -C:rel,abs in -c/non-incr. mode ... ./remfiles06a.at:28: mkdir gnu @@ -17919,36 +17968,20 @@ decho B find . | sort ) -195. grow.at:24: ok -./update02.at:29: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./grow.at:27: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir a -genfile --file a/b - -tar cf arc a - -echo "separator" - -sleep 2 -touch a/b - -tar ufv arc a -echo "separator" -tar tf arc | sort || exit 1 +genfile --file foo --length 50000k +genfile --file baz +genfile --run=10 --checkpoint 10 --length 1024 --append foo -- tar -vcf bar foo baz ) -207. remfiles06a.at:25: ok - -./update01.at:32: +./update02.at:29: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -17968,37 +18001,14 @@ echo "separator" sleep 2 -genfile --file a/c +touch a/b tar ufv arc a echo "separator" tar tf arc | sort || exit 1 ) -208. remfiles06b.at:25: testing remove-files with -C:rel,abs in -c/incr. mode ... -./remfiles06b.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir foo -mkdir bar -echo file > file -echo foo/file > foo/file -echo bar/file > bar/file -DIR=`pwd` -decho A -tar -cvf foo.tar --incremental --remove-files -C foo file -C $DIR/bar file -decho B -find . | sort -) -143. chtype.at:27: ok +208. remfiles06b.at:25: ok +207. remfiles06a.at:25: ok 209. remfiles06c.at:25: testing remove-files with -C:rel,abs in -r mode ... @@ -18052,9 +18062,10 @@ decho B find . | sort ) -208. remfiles06b.at:25: ok - 210. remfiles07a.at:25: ok +209. remfiles06c.at:25: ok + + 211. remfiles07b.at:25: testing remove-files with -C:abs,rel in -c/incr. mode ... ./remfiles07b.at:28: mkdir gnu @@ -18079,9 +18090,6 @@ decho B find . | sort ) -209. remfiles06c.at:25: ok - - 212. remfiles07c.at:25: testing remove-files with -C:abs,rel in -r mode ... ./remfiles07c.at:28: mkdir gnu @@ -18109,6 +18117,9 @@ decho C find . | sort ) +211. remfiles07b.at:25: ok + +212. remfiles07c.at:25: ok 213. remfiles08a.at:28: testing remove-files deleting two subdirs in -c/non-incr. mode ... ./remfiles08a.at:31: mkdir gnu @@ -18128,11 +18139,6 @@ decho B find . ) -211. remfiles07b.at:25: ok -212. remfiles07c.at:25: ok -213. remfiles08a.at:28: ok - - 214. remfiles08b.at:31: testing remove-files deleting two subdirs in -c/incr. mode ... ./remfiles08b.at:34: @@ -18153,6 +18159,9 @@ decho B find . ) +213. remfiles08a.at:28: ok + +214. remfiles08b.at:31: ok 215. remfiles08c.at:28: testing remove-files deleting two subdirs in -r mode ... ./remfiles08c.at:31: mkdir gnu @@ -18178,6 +18187,7 @@ decho C find . ) + 216. remfiles09a.at:25: testing remove-files on full directory in -c/non-incr. mode ... ./remfiles09a.at:28: mkdir gnu @@ -18195,11 +18205,9 @@ decho B find . ) -214. remfiles08b.at:31: ok -216. remfiles09a.at:25: ok - - 215. remfiles08c.at:28: ok + +216. remfiles09a.at:25: ok 217. remfiles09b.at:29: testing remove-files on full directory in -c/incr. mode ... ./remfiles09b.at:32: mkdir gnu @@ -18217,6 +18225,7 @@ decho B find . ) + 218. remfiles09c.at:25: testing remove-files on full directory in -r mode ... ./remfiles09c.at:28: mkdir gnu @@ -18240,6 +18249,28 @@ decho C find . | sort ) +217. remfiles09b.at:29: ok + +218. remfiles09c.at:25: ok +219. remfiles10.at:20: testing remove-files ... +./remfiles10.at:23: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +mkdir foo +echo foo/file > foo/file +decho A +(cd foo && tar -cvf ../foo.tar --remove-files .) +tar_status=$? +decho B +find foo +exit $tar_status +) ./update04.at:23: mkdir ustar (cd ustar @@ -18267,35 +18298,25 @@ echo $? ) -219. remfiles10.at:20: testing remove-files ... -./remfiles10.at:23: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./grow.at:27: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * -mkdir foo -echo foo/file > foo/file -decho A -(cd foo && tar -cvf ../foo.tar --remove-files .) -tar_status=$? -decho B -find foo -exit $tar_status +genfile --file foo --length 50000k +genfile --file baz +genfile --run=10 --checkpoint 10 --length 1024 --append foo -- tar -vcf bar foo baz ) -217. remfiles09b.at:29: ok -218. remfiles09c.at:25: ok stderr: A tar: .: Cannot rmdir: Invalid argument tar: Exiting with failure status due to previous errors B - ./remfiles10.at:44: sed '2s/:[^:]*$//' stderr - 219. remfiles10.at:20: ok 220. xattr01.at:25: testing xattrs: basic functionality ... ./xattr01.at:28: @@ -18345,6 +18366,15 @@ getfattr -h -d dir | grep -v -e '^#' -e ^$ getfattr -h -d dir/file | grep -v -e '^#' -e ^$ ) +--- - 2025-08-01 07:34:16.316232039 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/220/stdout 2025-08-01 07:34:16.312198014 +0000 +@@ -1,3 +1 @@ +-user.test="OurDirValue" +-user.test="OurFileValue" + + +220. xattr01.at:25: skipped (xattr01.at:28) + 221. xattr02.at:25: testing xattrs: change directory with -C option ... ./xattr02.at:28: mkdir v7 @@ -18400,23 +18430,13 @@ getfattr -h -d file2 | grep -v -e '^#' -e ^$ getfattr -h -d subsubdir | grep -v -e '^#' -e ^$ ) ---- - 2026-09-03 13:54:33.607544356 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/220/stdout 2026-09-03 13:54:33.603611836 +0000 -@@ -1,3 +1 @@ --user.test="OurDirValue" --user.test="OurFileValue" - - -220. xattr01.at:25: --- - 2026-09-03 13:54:33.610107676 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/221/stdout 2026-09-03 13:54:33.607611836 +0000 +--- - 2025-08-01 07:34:16.343793972 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/221/stdout 2025-08-01 07:34:16.336198164 +0000 @@ -1,4 +1 @@ -user.test="OurFile1Value" -user.test="OurFile2Value" -user.test="OurDirValue" - skipped (xattr01.at:28) -221. xattr02.at:25: skipped (xattr02.at:28) - 222. xattr03.at:25: testing xattrs: trusted.* attributes ... ./xattr03.at:28: mkdir v7 @@ -18480,6 +18500,16 @@ getfattr -mtrusted. -d file2 | grep -v -e '^#' -e ^$ getfattr -mtrusted. -d subsubdir | grep -v -e '^#' -e ^$ ) +221. xattr02.at:25: skipped (xattr02.at:28) +--- - 2025-08-01 07:34:16.356343930 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/222/stdout 2025-08-01 07:34:16.352198264 +0000 +@@ -1,4 +1 @@ +-trusted.test="OurFile1Value" +-trusted.test="OurFile2Value" +-trusted.test="OurDirValue" + + +222. xattr03.at:25: skipped (xattr03.at:28) 223. xattr04.at:26: testing xattrs: s/open/openat/ regression ... ./xattr04.at:29: @@ -18530,14 +18560,12 @@ getfattr -h -d output/file | grep -v -e '^#' -e ^$ exit $ret ) ---- - 2026-09-03 13:54:33.627567876 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/222/stdout 2026-09-03 13:54:33.623611836 +0000 -@@ -1,4 +1 @@ --trusted.test="OurFile1Value" --trusted.test="OurFile2Value" --trusted.test="OurDirValue" +--- - 2025-08-01 07:34:16.384789068 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/223/stdout 2025-08-01 07:34:16.380198439 +0000 +@@ -1,2 +1 @@ +-user.test="value" -222. xattr03.at:25: 224. xattr05.at:28: testing xattrs: keywords with '=' and '%' ... +224. xattr05.at:28: testing xattrs: keywords with '=' and '%' ... ./xattr05.at:31: mkdir v7 (cd v7 @@ -18586,17 +18614,12 @@ getfattr -d output/file | grep -v '# ' > after diff before after ) - skipped (xattr03.at:28) ---- - 2026-09-03 13:54:33.633204036 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/223/stdout 2026-09-03 13:54:33.627611836 +0000 -@@ -1,2 +1 @@ --user.test="value" - -223. xattr04.at:26: - skipped (xattr04.at:29) +223. xattr04.at:26: skipped (xattr04.at:29) +224. xattr05.at:28: skipped (xattr05.at:31) -224. xattr05.at:28: 226. xattr07.at:26: testing xattrs: xattrs and --skip-old-files ... -./xattr07.at:29: + +225. xattr06.at:27: testing xattrs: exclude xattrs on create ... +./xattr06.at:30: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -18629,31 +18652,29 @@ exit 77 fi + mkdir dir +mkdir output genfile --file dir/file -genfile --file dir/file2 - -setfattr -n user.test -v OurDirValue dir -setfattr -n user.test -v OurFileValue dir/file -setfattr -n user.test -v OurFileValue dir/file2 -tar --xattrs --no-recursion -cf archive.tar dir dir/file dir/file2 - -setfattr -n user.test -v OurDirValue2 dir -setfattr -n user.test -v OurFileValue2 dir/file -setfattr -n user.test -v OurFileValue2 dir/file2 +for attr in excluded incla inclb inclc incl_excluded +do + setfattr -n user.${attr} -v value dir/file || exit 77 +done -# Check that tar continues to file2 too! -tar --xattrs -xvf archive.tar --skip-old-files -tar --xattrs -xvf archive.tar --keep-old-files +tar --xattrs-include=user.incl'*' --xattrs-exclude=user.incl_excluded -cf archive.tar -C dir . +tar -xf archive.tar --xattrs-include=user.incl[ab] --xattrs-exclude=user.inclb -C output -getfattr -h -d dir | grep -v -e '^#' -e ^$ -getfattr -h -d dir/file | grep -v -e '^#' -e ^$ -getfattr -h -d dir/file2 | grep -v -e '^#' -e ^$ +getfattr -d output/file | grep -v \ + -e excluded \ + -e inclb \ + -e inclc > filtered +getfattr -d output/file > full +# if they differ then the attribute is still present +diff filtered full ) - skipped (xattr05.at:31) -225. xattr06.at:27: testing xattrs: exclude xattrs on create ... -./xattr06.at:30: +226. xattr07.at:26: testing xattrs: xattrs and --skip-old-files ... +./xattr07.at:29: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -18686,29 +18707,54 @@ exit 77 fi - mkdir dir -mkdir output genfile --file dir/file +genfile --file dir/file2 -for attr in excluded incla inclb inclc incl_excluded -do - setfattr -n user.${attr} -v value dir/file || exit 77 -done +setfattr -n user.test -v OurDirValue dir +setfattr -n user.test -v OurFileValue dir/file +setfattr -n user.test -v OurFileValue dir/file2 -tar --xattrs-include=user.incl'*' --xattrs-exclude=user.incl_excluded -cf archive.tar -C dir . -tar -xf archive.tar --xattrs-include=user.incl[ab] --xattrs-exclude=user.inclb -C output +tar --xattrs --no-recursion -cf archive.tar dir dir/file dir/file2 -getfattr -d output/file | grep -v \ - -e excluded \ - -e inclb \ - -e inclc > filtered -getfattr -d output/file > full -# if they differ then the attribute is still present -diff filtered full +setfattr -n user.test -v OurDirValue2 dir +setfattr -n user.test -v OurFileValue2 dir/file +setfattr -n user.test -v OurFileValue2 dir/file2 + +# Check that tar continues to file2 too! +tar --xattrs -xvf archive.tar --skip-old-files +tar --xattrs -xvf archive.tar --keep-old-files + +getfattr -h -d dir | grep -v -e '^#' -e ^$ +getfattr -h -d dir/file | grep -v -e '^#' -e ^$ +getfattr -h -d dir/file2 | grep -v -e '^#' -e ^$ ) +225. xattr06.at:27: --- - 2025-08-01 07:34:16.424081193 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/226/stderr 2025-08-01 07:34:16.420198689 +0000 +@@ -1,7 +1 @@ +-tar: dir: skipping existing file +-tar: dir/file: skipping existing file +-tar: dir/file2: skipping existing file +-tar: dir/file: Cannot open: File exists +-tar: dir/file2: Cannot open: File exists +-tar: Exiting with failure status due to previous errors + + skipped (xattr06.at:30) +--- - 2025-08-01 07:34:16.426586329 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/226/stdout 2025-08-01 07:34:16.420198689 +0000 +@@ -1,10 +1 @@ +-dir/ +-dir/file +-dir/file2 +-dir/ +-dir/file +-dir/file2 +-user.test="OurDirValue2" +-user.test="OurFileValue2" +-user.test="OurFileValue2" + +226. xattr07.at:26: skipped (xattr07.at:29) -225. xattr06.at:27: skipped (xattr06.at:30) 227. xattr08.at:26: testing xattrs: xattrs and read-only files ... ./xattr08.at:29: @@ -18823,144 +18869,10 @@ diff before after test "$?" = 0 ) ---- - 2026-09-03 13:54:33.682744996 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/226/stderr 2026-09-03 13:54:33.679611836 +0000 -@@ -1,7 +1 @@ --tar: dir: skipping existing file --tar: dir/file: skipping existing file --tar: dir/file2: skipping existing file --tar: dir/file: Cannot open: File exists --tar: dir/file2: Cannot open: File exists --tar: Exiting with failure status due to previous errors - -227. xattr08.at:26: --- - 2026-09-03 13:54:33.685319036 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/226/stdout 2026-09-03 13:54:33.679611836 +0000 -@@ -1,10 +1 @@ --dir/ --dir/file --dir/file2 --dir/ --dir/file --dir/file2 --user.test="OurDirValue2" --user.test="OurFileValue2" --user.test="OurFileValue2" - -226. xattr07.at:26: skipped (xattr08.at:29) - skipped (xattr07.at:29) +227. xattr08.at:26: skipped (xattr08.at:29) 228. acls01.at:25: skipped (acls01.at:28) - -231. selnx01.at:25: testing selinux: basic store/restore ... -./selnx01.at:28: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - - - file=$(TMPDIR=. mktemp fiXXXXXX) - - setfattr -n user.test -v test $file &> /dev/null - if test "$?" != 0; then - exit 77 - fi - - - getfattr $file &> /dev/null - if test "$?" != 0; then - exit 77 - fi - - - - - file=$(TMPDIR=. mktemp fiXXXXXX) - - restorecon $file &> /dev/null - if test "$?" != 0; then - exit 77 - fi - - - chcon -h --user=unconfined_u $file &> /dev/null - if test "$?" != 0; then - exit 77 - fi - - rm -rf $file - - file=$(TMPDIR=. mktemp fiXXXXXX) - err=$( tar --selinux -cf /dev/null $file 2>&1 >/dev/null | wc -l ) - if test "$err" != "0"; then - exit 77 - fi - - -mkdir dir -genfile --file dir/file -ln -s file dir/link - -getfattr -h -d -msecurity.selinux dir dir/file dir/link > start - -restorecon -R dir -chcon -h --user=system_u dir -chcon -h --user=unconfined_u dir/file -chcon -h --user=system_u dir/link - -# archive whole directory including selinux contexts -tar --selinux -cf archive.tar dir - -# clear the directory -rm -rf dir - -# ================================================ -# check if selinux contexts are correctly restored - -tar --selinux -xf archive.tar - -# archive for later debugging -cp archive.tar archive_origin.tar - -# check if selinux contexts were restored -getfattr -h -d dir dir/file dir/link -msecurity.selinux | \ - grep -v -e '^#' -e ^$ | cut -d: -f1 - -# =========================================================================== -# check if selinux contexts are not restored when --selinux option is missing - -getfattr -h -d -msecurity.selinux dir dir/file dir/link > with_selinux -rm -rf dir -tar -xf archive.tar -getfattr -h -d -msecurity.selinux dir dir/file dir/link > without_selinux - -diff with_selinux without_selinux > diff_with_without -if test "$?" -eq "0"; then - echo "selinux contexts probably restored while --selinux is off" -fi - -# ================================================================= -# check if selinux is not archived when --selinux option is missing - -tar -cf archive.tar dir - -# clear the directory -rm -rf dir - -# restore (with --selinux) -tar --selinux -xf archive.tar dir - -getfattr -h -d -msecurity.selinux dir dir/file dir/link > final -diff start final > final_diff -if test "$?" -ne "0"; then - echo "bad result" -fi - -) 229. acls02.at:25: testing acls: work with -C ... ./acls02.at:28: mkdir v7 @@ -19037,7 +18949,7 @@ diff before after test "$?" = 0 ) -230. acls03.at:30: testing acls: default ACLs ... +229. acls02.at:25: 230. acls03.at:30: testing acls: default ACLs ... ./acls03.at:47: mkdir v7 (cd v7 @@ -19255,19 +19167,127 @@ fi ) -229. acls02.at:25: --- - 2026-09-03 13:54:33.713686236 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/231/stdout 2026-09-03 13:54:33.707611836 +0000 + skipped (acls02.at:28) + +230. acls03.at:30: skipped (acls03.at:47) +231. selnx01.at:25: testing selinux: basic store/restore ... +./selnx01.at:28: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + + + file=$(TMPDIR=. mktemp fiXXXXXX) + + setfattr -n user.test -v test $file &> /dev/null + if test "$?" != 0; then + exit 77 + fi + + + getfattr $file &> /dev/null + if test "$?" != 0; then + exit 77 + fi + + + + + file=$(TMPDIR=. mktemp fiXXXXXX) + + restorecon $file &> /dev/null + if test "$?" != 0; then + exit 77 + fi + + + chcon -h --user=unconfined_u $file &> /dev/null + if test "$?" != 0; then + exit 77 + fi + + rm -rf $file + + file=$(TMPDIR=. mktemp fiXXXXXX) + err=$( tar --selinux -cf /dev/null $file 2>&1 >/dev/null | wc -l ) + if test "$err" != "0"; then + exit 77 + fi + + +mkdir dir +genfile --file dir/file +ln -s file dir/link + +getfattr -h -d -msecurity.selinux dir dir/file dir/link > start + +restorecon -R dir +chcon -h --user=system_u dir +chcon -h --user=unconfined_u dir/file +chcon -h --user=system_u dir/link + +# archive whole directory including selinux contexts +tar --selinux -cf archive.tar dir + +# clear the directory +rm -rf dir + +# ================================================ +# check if selinux contexts are correctly restored + +tar --selinux -xf archive.tar + +# archive for later debugging +cp archive.tar archive_origin.tar + +# check if selinux contexts were restored +getfattr -h -d dir dir/file dir/link -msecurity.selinux | \ + grep -v -e '^#' -e ^$ | cut -d: -f1 + +# =========================================================================== +# check if selinux contexts are not restored when --selinux option is missing + +getfattr -h -d -msecurity.selinux dir dir/file dir/link > with_selinux +rm -rf dir +tar -xf archive.tar +getfattr -h -d -msecurity.selinux dir dir/file dir/link > without_selinux + +diff with_selinux without_selinux > diff_with_without +if test "$?" -eq "0"; then + echo "selinux contexts probably restored while --selinux is off" +fi + +# ================================================================= +# check if selinux is not archived when --selinux option is missing + +tar -cf archive.tar dir + +# clear the directory +rm -rf dir + +# restore (with --selinux) +tar --selinux -xf archive.tar dir + +getfattr -h -d -msecurity.selinux dir dir/file dir/link > final +diff start final > final_diff +if test "$?" -ne "0"; then + echo "bad result" +fi + +) + +--- - 2025-08-01 07:34:16.519510110 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/231/stdout 2025-08-01 07:34:16.516199289 +0000 @@ -1,4 +1 @@ -security.selinux="system_u -security.selinux="unconfined_u -security.selinux="system_u - skipped (acls02.at:28) -231. selnx01.at:25: 230. acls03.at:30: skipped (selnx01.at:28) - skipped (acls03.at:47) - - - +231. selnx01.at:25: skipped (selnx01.at:28) 232. selacl01.at:25: testing acls/selinux: special files & fifos ... ./selacl01.at:28: mkdir v7 @@ -19377,7 +19397,13 @@ diff before after echo separator ) -233. capabs_raw01.at:25: testing capabilities: binary store/restore ... + +--- - 2025-08-01 07:34:16.539046032 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/232/stdout 2025-08-01 07:34:16.532199389 +0000 +@@ -1,2 +1 @@ +-separator + +232. selacl01.at:25: 233. capabs_raw01.at:25: testing capabilities: binary store/restore ... ./capabs_raw01.at:28: mkdir v7 (cd v7 @@ -19453,7 +19479,14 @@ # Newer systems print = instead of + here getcap dir/file | sed 's/+/=/' ) -234. onetop01.at:21: testing tar --one-top-level ... + skipped (selacl01.at:28) + +--- - 2025-08-01 07:34:16.553229040 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/233/stdout 2025-08-01 07:34:16.548199489 +0000 +@@ -1,2 +1 @@ +-dir/file = cap_chown=ei + +233. capabs_raw01.at:25: 234. onetop01.at:21: testing tar --one-top-level ... ./onetop01.at:24: mkdir v7 (cd v7 @@ -19475,26 +19508,15 @@ tar --one-top-level -x -f ../a.tar find . | sort ) ---- - 2026-09-03 13:54:33.738598436 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/232/stdout 2026-09-03 13:54:33.735611836 +0000 -@@ -1,2 +1 @@ --separator - -232. selacl01.at:25: --- - 2026-09-03 13:54:33.743706116 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/233/stdout 2026-09-03 13:54:33.739611836 +0000 -@@ -1,2 +1 @@ --dir/file = cap_chown=ei - -233. capabs_raw01.at:25: skipped (selacl01.at:28) - skipped (capabs_raw01.at:28) -./onetop01.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +235. onetop02.at:21: testing tar --one-top-level --show-transformed ... +./onetop02.at:24: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * @@ -19507,38 +19529,28 @@ tar cf a.tar a c mkdir out cd out -tar --one-top-level -x -f ../a.tar +tar --one-top-level --show-transformed -v -x -f ../a.tar find . | sort ) -236. onetop03.at:21: testing tar --one-top-level --transform ... -./onetop03.at:24: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +./grow.at:27: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir a -genfile --file a/b -genfile --file c -tar cf a.tar a c -mkdir out -cd out -tar --one-top-level --transform 's/c/d/' -x -f ../a.tar -find . | sort +genfile --file foo --length 50000k +genfile --file baz +genfile --run=10 --checkpoint 10 --length 1024 --append foo -- tar -vcf bar foo baz ) -235. onetop02.at:21: testing tar --one-top-level --show-transformed ... -./onetop02.at:24: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +./onetop01.at:24: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -19551,7 +19563,7 @@ tar cf a.tar a c mkdir out cd out -tar --one-top-level --show-transformed -v -x -f ../a.tar +tar --one-top-level -x -f ../a.tar find . | sort ) ./onetop02.at:24: @@ -19596,12 +19608,12 @@ tar --one-top-level -x -f ../a.tar find . | sort ) -./onetop03.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./onetop02.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -19614,7 +19626,7 @@ tar cf a.tar a c mkdir out cd out -tar --one-top-level --transform 's/c/d/' -x -f ../a.tar +tar --one-top-level --show-transformed -v -x -f ../a.tar find . | sort ) ./onetop01.at:24: @@ -19638,12 +19650,12 @@ tar --one-top-level -x -f ../a.tar find . | sort ) -./onetop03.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./onetop02.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -19656,15 +19668,15 @@ tar cf a.tar a c mkdir out cd out -tar --one-top-level --transform 's/c/d/' -x -f ../a.tar +tar --one-top-level --show-transformed -v -x -f ../a.tar find . | sort ) ./onetop02.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -19680,12 +19692,12 @@ tar --one-top-level --show-transformed -v -x -f ../a.tar find . | sort ) -./onetop03.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./onetop01.at:24: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -19698,15 +19710,20 @@ tar cf a.tar a c mkdir out cd out -tar --one-top-level --transform 's/c/d/' -x -f ../a.tar +tar --one-top-level -x -f ../a.tar find . | sort ) -./onetop01.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +235. onetop02.at:21: ok + +234. onetop01.at:21: ok + +236. onetop03.at:21: testing tar --one-top-level --transform ... +./onetop03.at:24: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * @@ -19719,15 +19736,16 @@ tar cf a.tar a c mkdir out cd out -tar --one-top-level -x -f ../a.tar +tar --one-top-level --transform 's/c/d/' -x -f ../a.tar find . | sort ) -./onetop02.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +237. onetop04.at:21: testing tar --one-top-level --transform ... +./onetop04.at:24: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * @@ -19738,17 +19756,14 @@ genfile --file a/b genfile --file c tar cf a.tar a c -mkdir out -cd out -tar --one-top-level --show-transformed -v -x -f ../a.tar -find . | sort +tar -tf a.tar --one-top-level --transform 's/c/d/' --show-transformed | sort ) ./onetop03.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * @@ -19764,14 +19779,48 @@ tar --one-top-level --transform 's/c/d/' -x -f ../a.tar find . | sort ) -234. onetop01.at:21: ok +./onetop04.at:24: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -./onetop02.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir a +genfile --file a/b +genfile --file c +tar cf a.tar a c +tar -tf a.tar --one-top-level --transform 's/c/d/' --show-transformed | sort +) +./onetop04.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir a +genfile --file a/b +genfile --file c +tar cf a.tar a c +tar -tf a.tar --one-top-level --transform 's/c/d/' --show-transformed | sort +) +./onetop03.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * @@ -19784,17 +19833,15 @@ tar cf a.tar a c mkdir out cd out -tar --one-top-level --show-transformed -v -x -f ../a.tar +tar --one-top-level --transform 's/c/d/' -x -f ../a.tar find . | sort ) -236. onetop03.at:21: ok -237. onetop04.at:21: testing tar --one-top-level --transform ... ./onetop04.at:24: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * @@ -19807,13 +19854,33 @@ tar cf a.tar a c tar -tf a.tar --one-top-level --transform 's/c/d/' --show-transformed | sort ) +./onetop03.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir a +genfile --file a/b +genfile --file c +tar cf a.tar a c +mkdir out +cd out +tar --one-top-level --transform 's/c/d/' -x -f ../a.tar +find . | sort +) ./onetop04.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * @@ -19826,7 +19893,29 @@ tar cf a.tar a c tar -tf a.tar --one-top-level --transform 's/c/d/' --show-transformed | sort ) -235. onetop02.at:21: ok +237. onetop04.at:21: ok +./onetop03.at:24: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkdir a +genfile --file a/b +genfile --file c +tar cf a.tar a c +mkdir out +cd out +tar --one-top-level --transform 's/c/d/' -x -f ../a.tar +find . | sort +) + 238. onetop05.at:21: testing tar --one-top-level restoring permissions ... ./onetop05.at:28: mkdir v7 @@ -19875,25 +19964,8 @@ echo "TOP: mode changed: $orig_mode != $mode" fi ) +236. onetop03.at:21: ok -./onetop04.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir a -genfile --file a/b -genfile --file c -tar cf a.tar a c -tar -tf a.tar --one-top-level --transform 's/c/d/' --show-transformed | sort -) 239. gtarfail.at:21: testing gtarfail ... ./gtarfail.at:26: @@ -19903,18 +19975,7 @@ tar --utc -tvf $STAR_TESTSCRIPTS/gtarfail.tar ---- - 2026-09-03 13:54:33.913795236 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/239/stdout 2026-09-03 13:54:33.911611836 +0000 -@@ -1,7 +1 @@ ---rw-r--r-- jes/glone 518 2001-05-25 14:41 vedpowered.gif ---rw-r--r-- jes/glone 6825 1997-04-29 00:19 cd.gif ---rw-r--r-- jes/glone 33354 1999-06-22 12:17 DSCN0049c.JPG ---rw-r--r-- jes/glone 86159 2001-06-05 18:16 Window1.jpg ---rw-r--r-- jes/glone 1310 2001-05-25 13:05 vipower.gif ---rw-rw-rw- jes/glone 148753 1998-09-15 13:08 billyboy.jpg - -239. gtarfail.at:21: skipped (gtarfail.at:26) - +195. grow.at:24: ok ./onetop05.at:28: mkdir oldgnu (cd oldgnu @@ -19962,24 +20023,18 @@ echo "TOP: mode changed: $orig_mode != $mode" fi ) -./onetop04.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 +--- - 2025-08-01 07:34:16.837582937 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/239/stdout 2025-08-01 07:34:16.832201264 +0000 +@@ -1,7 +1 @@ +--rw-r--r-- jes/glone 518 2001-05-25 14:41 vedpowered.gif +--rw-r--r-- jes/glone 6825 1997-04-29 00:19 cd.gif +--rw-r--r-- jes/glone 33354 1999-06-22 12:17 DSCN0049c.JPG +--rw-r--r-- jes/glone 86159 2001-06-05 18:16 Window1.jpg +--rw-r--r-- jes/glone 1310 2001-05-25 13:05 vipower.gif +--rw-rw-rw- jes/glone 148753 1998-09-15 13:08 billyboy.jpg + +239. gtarfail.at:21: skipped (gtarfail.at:26) -mkdir a -genfile --file a/b -genfile --file c -tar cf a.tar a c -tar -tf a.tar --one-top-level --transform 's/c/d/' --show-transformed | sort -) 240. gtarfail2.at:21: testing gtarfail2 ... ./gtarfail2.at:26: @@ -19988,8 +20043,8 @@ tar --utc -tvf $STAR_TESTSCRIPTS/gtarfail2.tar ---- - 2026-09-03 13:54:33.937568476 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/240/stdout 2026-09-03 13:54:33.931611836 +0000 +--- - 2025-08-01 07:34:16.859511954 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/240/stdout 2025-08-01 07:34:16.852201389 +0000 @@ -1,11 +1 @@ --rwxr-xr-x jes/glone 214 2001-09-21 14:08 .clean -lrwxrwxrwx jes/cats 0 1998-05-07 12:39 RULES -> makefiles/RULES @@ -20003,39 +20058,6 @@ -lrwxrwxrwx jes/glone 0 2001-08-29 10:54 build/psmake/astoi.c -> ../../lib/astoi.c 240. gtarfail2.at:21: skipped (gtarfail2.at:26) - -241. multi-fail.at:21: testing multi-fail ... -./multi-fail.at:26: - -test -z "$STAR_TESTSCRIPTS" && exit 77 -tarball_prereq gnu-multi-fail-volume1.gtar 7c28663dd98b0bd91ceb4be7af55254e $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 - - -test -z "$STAR_TESTSCRIPTS" && exit 77 -tarball_prereq gnu-multi-fail-volume2.gtar b5d41c4c3ec440687d4a44957b5079a8 $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 - - -tar --utc -tvM -f $STAR_TESTSCRIPTS/gnu-multi-fail-volume1.gtar \ - -f $STAR_TESTSCRIPTS/gnu-multi-fail-volume2.gtar <&- - -./onetop04.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkdir a -genfile --file a/b -genfile --file c -tar cf a.tar a c -tar -tf a.tar --one-top-level --transform 's/c/d/' --show-transformed | sort -) ./onetop05.at:28: mkdir ustar (cd ustar @@ -20083,8 +20105,23 @@ echo "TOP: mode changed: $orig_mode != $mode" fi ) ---- - 2026-09-03 13:54:33.973595796 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/241/stdout 2026-09-03 13:54:33.967611836 +0000 + +241. multi-fail.at:21: testing multi-fail ... +./multi-fail.at:26: + +test -z "$STAR_TESTSCRIPTS" && exit 77 +tarball_prereq gnu-multi-fail-volume1.gtar 7c28663dd98b0bd91ceb4be7af55254e $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 + + +test -z "$STAR_TESTSCRIPTS" && exit 77 +tarball_prereq gnu-multi-fail-volume2.gtar b5d41c4c3ec440687d4a44957b5079a8 $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 + + +tar --utc -tvM -f $STAR_TESTSCRIPTS/gnu-multi-fail-volume1.gtar \ + -f $STAR_TESTSCRIPTS/gnu-multi-fail-volume2.gtar <&- + +--- - 2025-08-01 07:34:16.885323316 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/241/stdout 2025-08-01 07:34:16.880201564 +0000 @@ -1,53 +1 @@ -drwxrwsr-x joerg/bs 0 2003-10-11 14:32 OBJ/i386-sunos5-gcc/ --rw-r--r-- joerg/bs 1 2003-10-11 14:32 OBJ/i386-sunos5-gcc/Dnull @@ -20139,52 +20176,8 @@ --rw-r--r-- joerg/bs 952 2003-10-10 18:07 OBJ/i386-sunos5-gcc/movearch.o --rw-r--r-- joerg/bs 2756 2003-10-07 17:53 OBJ/i386-sunos5-gcc/table.o -241. multi-fail.at:21: skipped (multi-fail.at:26) -237. onetop04.at:21: ok - - -242. ustar-big-2g.at:21: testing ustar-big-2g ... -./ustar-big-2g.at:26: -test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 - -cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77 - - -test -z "$STAR_TESTSCRIPTS" && exit 77 -tarball_prereq ustar-big-2g.tar.bz2 b63979733629c8fcdf40b60065422767 $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 - - -tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-2g.tar.bz2 - -stderr: -243. ustar-big-8g.at:21: testing ustar-big-8g ... -./ustar-big-8g.at:26: -test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 - -cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77 - - -test -z "$STAR_TESTSCRIPTS" && exit 77 -tarball_prereq ustar-big-8g.tar.bz2 60ff503fa4b8288bef7ada89e9c91b0f $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 - - -tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-8g.tar.bz2 - -stderr: ---- - 2026-09-03 13:54:34.007896516 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/243/stdout 2026-09-03 13:54:34.003611836 +0000 -@@ -1,3 +1 @@ ---rw------- jes/glone 8589934591 2002-06-15 15:08 8gb-1 ---rw-r--r-- jes/glone 0 2002-06-15 14:53 file - -243. ustar-big-8g.at:21: skipped (ustar-big-8g.at:26) - ---- - 2026-09-03 13:54:34.017481836 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/242/stdout 2026-09-03 13:54:33.995611836 +0000 -@@ -1,3 +1 @@ ---rw------- jes/glone 2147483647 2002-06-15 14:53 big ---rw-r--r-- jes/glone 0 2002-06-15 14:53 file - +241. multi-fail.at:21: + skipped (multi-fail.at:26) ./onetop05.at:28: mkdir posix (cd posix @@ -20232,7 +20225,50 @@ echo "TOP: mode changed: $orig_mode != $mode" fi ) + +242. ustar-big-2g.at:21: testing ustar-big-2g ... +./ustar-big-2g.at:26: +test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 + +cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77 + + +test -z "$STAR_TESTSCRIPTS" && exit 77 +tarball_prereq ustar-big-2g.tar.bz2 b63979733629c8fcdf40b60065422767 $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 + + +tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-2g.tar.bz2 + +stderr: +243. ustar-big-8g.at:21: testing ustar-big-8g ... +./ustar-big-8g.at:26: +test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 + +cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77 + + +test -z "$STAR_TESTSCRIPTS" && exit 77 +tarball_prereq ustar-big-8g.tar.bz2 60ff503fa4b8288bef7ada89e9c91b0f $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 + + +tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-8g.tar.bz2 + +--- - 2025-08-01 07:34:16.904503956 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/242/stdout 2025-08-01 07:34:16.900201689 +0000 +@@ -1,3 +1 @@ +--rw------- jes/glone 2147483647 2002-06-15 14:53 big +--rw-r--r-- jes/glone 0 2002-06-15 14:53 file + 242. ustar-big-2g.at:21: skipped (ustar-big-2g.at:26) +stderr: +--- - 2025-08-01 07:34:16.910595554 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/243/stdout 2025-08-01 07:34:16.904201714 +0000 +@@ -1,3 +1 @@ +--rw------- jes/glone 8589934591 2002-06-15 15:08 8gb-1 +--rw-r--r-- jes/glone 0 2002-06-15 14:53 file + +243. ustar-big-8g.at:21: + skipped (ustar-big-8g.at:26) 244. pax-big-10g.at:21: testing pax-big-10g ... ./pax-big-10g.at:26: test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 @@ -20246,14 +20282,6 @@ tar --utc -tvjf $STAR_TESTSCRIPTS/pax-big-10g.tar.bz2 -stderr: ---- - 2026-09-03 13:54:34.038756836 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/244/stdout 2026-09-03 13:54:34.035611836 +0000 -@@ -1,3 +1 @@ ---rw------- jes/glone 10737418240 2002-06-15 21:18 10g ---rw-r--r-- jes/glone 0 2002-06-15 14:53 file - -244. pax-big-10g.at:21: skipped (pax-big-10g.at:26) ./onetop05.at:28: mkdir gnu (cd gnu @@ -20301,6 +20329,14 @@ echo "TOP: mode changed: $orig_mode != $mode" fi ) +stderr: +--- - 2025-08-01 07:34:16.932728892 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/244/stdout 2025-08-01 07:34:16.928201864 +0000 +@@ -1,3 +1 @@ +--rw------- jes/glone 10737418240 2002-06-15 21:18 10g +--rw-r--r-- jes/glone 0 2002-06-15 14:53 file + +244. pax-big-10g.at:21: skipped (pax-big-10g.at:26) 238. onetop05.at:21: ok 64. exclude05.at:21: ok ./update04.at:23: @@ -20329,7 +20365,7 @@ tar ufv archive --wildcards './file.*' './foo.*' echo $? ) -./update02.at:29: +./update01.at:32: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -20349,13 +20385,13 @@ echo "separator" sleep 2 -touch a/b +genfile --file a/c tar ufv arc a echo "separator" tar tf arc | sort || exit 1 ) -./update01.at:32: +./update02.at:29: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -20375,12 +20411,13 @@ echo "separator" sleep 2 -genfile --file a/c +touch a/b tar ufv arc a echo "separator" tar tf arc | sort || exit 1 ) +116. incremental.at:23: ok ./update04.at:23: mkdir gnu (cd gnu @@ -20407,7 +20444,6 @@ tar ufv archive --wildcards './file.*' './foo.*' echo $? ) -116. incremental.at:23: ok 160. multiv04.at:36: ok ./incr02.at:35: mkdir posix @@ -20456,7 +20492,7 @@ genfile --stat=mtime dir/subdir1 | diff ts - ) 187. update04.at:20: ok -./update02.at:29: +./update01.at:32: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -20476,13 +20512,13 @@ echo "separator" sleep 2 -touch a/b +genfile --file a/c tar ufv arc a echo "separator" tar tf arc | sort || exit 1 ) -./update01.at:32: +./update02.at:29: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -20502,13 +20538,13 @@ echo "separator" sleep 2 -genfile --file a/c +touch a/b tar ufv arc a echo "separator" tar tf arc | sort || exit 1 ) -./update02.at:29: +./update01.at:32: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -20528,13 +20564,13 @@ echo "separator" sleep 2 -touch a/b +genfile --file a/c tar ufv arc a echo "separator" tar tf arc | sort || exit 1 ) -./update01.at:32: +./update02.at:29: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -20554,7 +20590,7 @@ echo "separator" sleep 2 -genfile --file a/c +touch a/b tar ufv arc a echo "separator" @@ -20629,9 +20665,9 @@ echo Final files: find tart -print | sort 2>/dev/null ) +118. incr02.at:32: ok 185. update02.at:26: ok 184. update01.at:29: ok -118. incr02.at:32: ok 173. sparse05.at:21: ok 120. listed02.at:28: ok @@ -20689,17 +20725,17 @@ Making install in src make[2]: Entering directory '/build/reproducible-path/tar-1.35+dfsg/src' make[3]: Entering directory '/build/reproducible-path/tar-1.35+dfsg/src' -make[3]: Nothing to be done for 'install-data-am'. /usr/bin/mkdir -p '/build/reproducible-path/tar-1.35+dfsg/debian/tmp/usr/bin' +make[3]: Nothing to be done for 'install-data-am'. /usr/bin/install -c tar '/build/reproducible-path/tar-1.35+dfsg/debian/tmp/usr/bin' make[3]: Leaving directory '/build/reproducible-path/tar-1.35+dfsg/src' make[2]: Leaving directory '/build/reproducible-path/tar-1.35+dfsg/src' Making install in scripts make[2]: Entering directory '/build/reproducible-path/tar-1.35+dfsg/scripts' make[3]: Entering directory '/build/reproducible-path/tar-1.35+dfsg/scripts' -make[3]: Nothing to be done for 'install-data-am'. /usr/bin/mkdir -p '/build/reproducible-path/tar-1.35+dfsg/debian/tmp/usr/sbin' /usr/bin/mkdir -p '/build/reproducible-path/tar-1.35+dfsg/debian/tmp/usr/sbin' +make[3]: Nothing to be done for 'install-data-am'. /usr/bin/install -c backup.sh dump-remind '/build/reproducible-path/tar-1.35+dfsg/debian/tmp/usr/sbin' /usr/bin/install -c backup restore '/build/reproducible-path/tar-1.35+dfsg/debian/tmp/usr/sbin' make[3]: Leaving directory '/build/reproducible-path/tar-1.35+dfsg/scripts' @@ -20797,10 +20833,6 @@ Normalized debian/tar/usr/share/locale/ru/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/ro/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/pt_BR/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/tr/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/sv/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/sr/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/sl/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/ms/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/ky/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/ko/LC_MESSAGES/tar.mo @@ -20809,25 +20841,29 @@ Normalized debian/tar/usr/share/locale/pl/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/nl/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/nb/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/hr/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/gl/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/ga/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/fr/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/ja/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/it/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/id/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/hu/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/fi/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/eu/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/et/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/es/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/tr/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/sv/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/sr/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/sl/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/cs/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/ca/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/bg/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/hr/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/gl/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/ga/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/fr/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/eo/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/el/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/de/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/da/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/cs/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/ca/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/bg/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/fi/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/eu/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/et/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/es/LC_MESSAGES/tar.mo dh_compress dh_fixperms dh_missing @@ -20844,8 +20880,8 @@ dh_gencontrol dh_md5sums dh_builddeb -dpkg-deb: building package 'tar' in '../tar_1.35+dfsg-3.1_arm64.deb'. dpkg-deb: building package 'tar-dbgsym' in '../tar-dbgsym_1.35+dfsg-3.1_arm64.deb'. +dpkg-deb: building package 'tar' in '../tar_1.35+dfsg-3.1_arm64.deb'. dpkg-deb: building package 'tar-scripts' in '../tar-scripts_1.35+dfsg-3.1_all.deb'. dpkg-genbuildinfo --build=binary -O../tar_1.35+dfsg-3.1_arm64.buildinfo dpkg-genchanges --build=binary -O../tar_1.35+dfsg-3.1_arm64.changes @@ -20854,12 +20890,14 @@ dpkg-buildpackage: info: binary-only upload (no source included) dpkg-genchanges: info: not including original source code in upload I: copying local configuration +I: user script /srv/workspace/pbuilder/1907254/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/1907254/tmp/hooks/B01_cleanup finished I: unmounting dev/ptmx filesystem I: unmounting dev/pts filesystem I: unmounting dev/shm filesystem I: unmounting proc filesystem I: unmounting sys filesystem I: cleaning the build env -I: removing directory /srv/workspace/pbuilder/1898174 and its subdirectories -I: Current time: Thu Sep 3 01:55:00 -12 2026 -I: pbuilder-time-stamp: 1788443700 +I: removing directory /srv/workspace/pbuilder/1907254 and its subdirectories +I: Current time: Fri Aug 1 21:34:41 +14 2025 +I: pbuilder-time-stamp: 1754033681