Diff of the two buildlogs: -- --- b1/build.log 2025-09-01 22:10:01.037825197 +0000 +++ b2/build.log 2025-09-01 22:18:32.846433353 +0000 @@ -1,6 +1,6 @@ I: pbuilder: network access will be disabled during build -I: Current time: Sun Oct 4 16:31:02 -12 2026 -I: pbuilder-time-stamp: 1791174662 +I: Current time: Tue Sep 2 12:10:02 +14 2025 +I: pbuilder-time-stamp: 1756764602 I: Building the build Environment I: extracting base tarball [/var/cache/pbuilder/forky-reproducible-base.tgz] I: copying local configuration @@ -30,53 +30,85 @@ 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/1557811/tmp/hooks/D02_print_environment starting +I: user script /srv/workspace/pbuilder/3455240/tmp/hooks/D01_modify_environment starting +debug: Running on ionos1-amd64. +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 Sep 1 22:10 /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/3455240/tmp/hooks/D01_modify_environment finished +I: user script /srv/workspace/pbuilder/3455240/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='amd64' - DEBIAN_FRONTEND='noninteractive' - DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=42 ' - DISTRIBUTION='forky' - HOME='/root' - HOST_ARCH='amd64' + 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]="x86_64-pc-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=amd64 + DEBIAN_FRONTEND=noninteractive + DEB_BUILD_OPTIONS='buildinfo=+all reproducible=+all parallel=40 ' + DIRSTACK=() + DISTRIBUTION=forky + EUID=0 + FUNCNAME=([0]="Echo" [1]="main") + GROUPS=() + HOME=/root + HOSTNAME=i-capture-the-hostname + HOSTTYPE=x86_64 + HOST_ARCH=amd64 IFS=' ' - INVOCATION_ID='0e4738890eff40eb8b8051bb66b687fe' - 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='1557811' - PS1='# ' - PS2='> ' + INVOCATION_ID=13fc0a2f3db84c3daf2eb3459b7ba4ab + LANG=C + LANGUAGE=et_EE:et + LC_ALL=C + MACHTYPE=x86_64-pc-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=3455240 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.lzEonoom/pbuilderrc_J7pK --distribution forky --hookdir /etc/pbuilder/first-build-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/forky-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.lzEonoom/b1 --logfile b1/build.log tar_1.35+dfsg-3.1.dsc' - SUDO_GID='110' - SUDO_HOME='/var/lib/jenkins' - SUDO_UID='105' - SUDO_USER='jenkins' - TERM='unknown' - TZ='/usr/share/zoneinfo/Etc/GMT+12' - USER='root' - _='/usr/bin/systemd-run' - http_proxy='http://213.165.73.152: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.lzEonoom/pbuilderrc_aXSS --distribution forky --hookdir /etc/pbuilder/rebuild-hooks --debbuildopts -b --basetgz /var/cache/pbuilder/forky-reproducible-base.tgz --buildresult /srv/reproducible-results/rbuild-debian/r-b-build.lzEonoom/b2 --logfile b2/build.log tar_1.35+dfsg-3.1.dsc' + SUDO_GID=110 + SUDO_HOME=/var/lib/jenkins + SUDO_UID=105 + SUDO_USER=jenkins + TERM=unknown + TZ=/usr/share/zoneinfo/Etc/GMT-14 + UID=0 + USER=root + _='I: set' + http_proxy=http://46.16.76.132:3128 I: uname -a - Linux ionos5-amd64 6.12.41+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.41-1 (2025-08-12) x86_64 GNU/Linux + Linux i-capture-the-hostname 6.12.41+deb13-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.41-1 (2025-08-12) x86_64 GNU/Linux I: ls -l /bin - lrwxrwxrwx 1 root root 7 Aug 10 2025 /bin -> usr/bin -I: user script /srv/workspace/pbuilder/1557811/tmp/hooks/D02_print_environment finished + lrwxrwxrwx 1 root root 7 Aug 10 12:30 /bin -> usr/bin +I: user script /srv/workspace/pbuilder/3455240/tmp/hooks/D02_print_environment finished -> Attempting to satisfy build-dependencies -> Creating pbuilder-satisfydepends-dummy package Package: pbuilder-satisfydepends-dummy @@ -167,7 +199,7 @@ Get: 37 http://deb.debian.org/debian forky/main amd64 libpcre2-dev amd64 10.46-1 [853 kB] Get: 38 http://deb.debian.org/debian forky/main amd64 libsepol-dev amd64 3.8.1-1 [373 kB] Get: 39 http://deb.debian.org/debian forky/main amd64 libselinux1-dev amd64 3.8.1-1 [169 kB] -Fetched 14.5 MB in 0s (133 MB/s) +Fetched 14.5 MB in 5s (3135 kB/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 ... 19897 files and directories currently installed.) @@ -339,7 +371,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/3455240/tmp/hooks/A99_set_merged_usr starting +Not re-configuring usrmerge for forky +I: user script /srv/workspace/pbuilder/3455240/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 @@ -379,8 +415,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 @@ -1033,7 +1069,7 @@ config.status: executing tests/atconfig commands make[1]: Leaving directory '/build/reproducible-path/tar-1.35+dfsg' dh_auto_build - make -j42 + make -j40 make[1]: Entering directory '/build/reproducible-path/tar-1.35+dfsg' make all-recursive make[2]: Entering directory '/build/reproducible-path/tar-1.35+dfsg' @@ -1090,6 +1126,8 @@ -e '/definitions of _GL_FUNCDECL_RPL/r ./c++defs.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./ctype.in.h > ctype.h-t +mv alloca.h-t alloca.h +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|@''HAVE_DIRENT_H''@|1|g' \ @@ -1159,6 +1197,7 @@ -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 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_GETOPT_H''@|1|g' \ @@ -1168,16 +1207,36 @@ -e 's|@''NEXT_GETOPT_H''@||g' \ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ ./getopt.in.h > getopt.h-t -mv alloca.h-t alloca.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 configmake.h-t configmake.h +mv dirent.h-t dirent.h +mv error.h-t error.h +mv fcntl.h-t fcntl.h +mv getopt.h-t getopt.h /usr/bin/mkdir -p 'malloc' +mv getopt-cdefs.h-t getopt-cdefs.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 /usr/bin/mkdir -p 'malloc' -mv ctype.h-t ctype.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' \ + -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \ + -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \ + -e 's|__glibc_likely|_GL_LIKELY|g' \ + -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ + ./malloc/dynarray-skeleton.c > malloc/dynarray-skeleton.gl.h-t /usr/bin/mkdir -p 'malloc' -mv error.h-t error.h +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|__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 sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's/@''HAVE_INTTYPES_H''@/1/g' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ @@ -1207,26 +1266,6 @@ -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 -mv getopt.h-t getopt.h -mv getopt-cdefs.h-t getopt-cdefs.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 -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' \ - -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \ - -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \ - -e 's|__glibc_likely|_GL_LIKELY|g' \ - -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ - ./malloc/dynarray-skeleton.c > malloc/dynarray-skeleton.gl.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 fcntl.h-t fcntl.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' \ @@ -1245,7 +1284,7 @@ -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 dirent.h-t dirent.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' \ @@ -1253,6 +1292,7 @@ -e 's|@''PRAGMA_COLUMNS''@||g' \ -e 's|@''NEXT_LIMITS_H''@||g' \ ./limits.in.h > limits.h-t +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' \ @@ -1279,10 +1319,8 @@ -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 malloc/dynarray.gl.h-t malloc/dynarray.gl.h -mv malloc/scratch_buffer.gl.h-t malloc/scratch_buffer.gl.h +mv inttypes.h-t inttypes.h /usr/bin/mkdir -p 'selinux' -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|@''INCLUDE_NEXT''@|include_next|g' \ @@ -1309,27 +1347,25 @@ -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 +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/@''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_STDDEF_H''@||g' \ - -e 's|@''HAVE_MAX_ALIGN_T''@|1|g' \ - -e 's|@''HAVE_WCHAR_T''@|1|g' \ - -e 's|@''REPLACE_NULL''@|0|g' \ - ./stddef.in.h > stddef.h-t -mv inttypes.h-t inttypes.h -mv langinfo.h-t langinfo.h + -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/@''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 + -e 's|@''NEXT_STDDEF_H''@||g' \ + -e 's|@''HAVE_MAX_ALIGN_T''@|1|g' \ + -e 's|@''HAVE_WCHAR_T''@|1|g' \ + -e 's|@''REPLACE_NULL''@|0|g' \ + ./stddef.in.h > stddef.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' \ @@ -1454,6 +1490,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 selinux/selinux.h-t selinux/selinux.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' \ @@ -1601,8 +1639,7 @@ -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 -mv stddef.h-t stddef.h +mv signal.h-t signal.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' \ @@ -1704,7 +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 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_STRINGS_H''@|1|g' \ @@ -1720,10 +1757,6 @@ -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 -mv signal.h-t signal.h -/usr/bin/mkdir -p 'sys' -/usr/bin/mkdir -p 'sys' -/usr/bin/mkdir -p 'sys' /usr/bin/mkdir -p 'sys' sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''GUARD_PREFIX''@|GL|g' \ @@ -1739,54 +1772,8 @@ -e '/definition of _GL_ARG_NONNULL/r ./arg-nonnull.h' \ -e '/definition of _GL_WARN_ON_USE/r ./warn-on-use.h' \ ./sys_random.in.h > sys/random.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' \ - -e 's/@''GNULIB_MKTIME''@/1/g' \ - -e 's/@''GNULIB_NANOSLEEP''@/0/g' \ - -e 's/@''GNULIB_STRFTIME''@/0/g' \ - -e 's/@''GNULIB_STRPTIME''@/0/g' \ - -e 's/@''GNULIB_TIME''@/0/g' \ - -e 's/@''GNULIB_TIMEGM''@/1/g' \ - -e 's/@''GNULIB_TIMESPEC_GET''@/0/g' \ - -e 's/@''GNULIB_TIMESPEC_GETRES''@/0/g' \ - -e 's/@''GNULIB_TIME_R''@/1/g' \ - -e 's/@''GNULIB_TIME_RZ''@/1/g' \ - -e 's/@''GNULIB_TZSET''@/1/g' \ - -e 's/@''GNULIB_MDA_TZSET''@/1/g' \ - -e 's|@''HAVE_DECL_LOCALTIME_R''@|1|g' \ - -e 's|@''HAVE_NANOSLEEP''@|1|g' \ - -e 's|@''HAVE_STRPTIME''@|1|g' \ - -e 's|@''HAVE_TIMEGM''@|1|g' \ - -e 's|@''HAVE_TIMESPEC_GET''@|1|g' \ - -e 's|@''HAVE_TIMESPEC_GETRES''@|1|g' \ - -e 's|@''HAVE_TIMEZONE_T''@|0|g' \ - -e 's|@''REPLACE_CTIME''@|GNULIB_PORTCHECK|g' \ - -e 's|@''REPLACE_GMTIME''@|0|g' \ - -e 's|@''REPLACE_LOCALTIME''@|0|g' \ - -e 's|@''REPLACE_LOCALTIME_R''@|0|g' \ - -e 's|@''REPLACE_MKTIME''@|0|g' \ - -e 's|@''REPLACE_NANOSLEEP''@|GNULIB_PORTCHECK|g' \ - -e 's|@''REPLACE_STRFTIME''@|GNULIB_PORTCHECK|g' \ - -e 's|@''REPLACE_TIME''@|0|g' \ - -e 's|@''REPLACE_TIMEGM''@|0|g' \ - -e 's|@''REPLACE_TIMESPEC_GET''@|GNULIB_PORTCHECK|g' \ - -e 's|@''REPLACE_TZSET''@|0|g' \ - -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|0|g' \ - -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|0|g' \ - -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|1|g' \ - -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|0|g' \ - -e 's|@''TIME_H_DEFINES_TIME_UTC''@|1|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' \ - ./time.in.h > time.h-t -mv strings.h-t strings.h +/usr/bin/mkdir -p 'sys' +/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' \ @@ -1844,6 +1831,8 @@ -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 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' \ @@ -1861,6 +1850,8 @@ -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 +/usr/bin/mkdir -p 'sys' +mv sys/stat.h-t sys/stat.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' \ @@ -1872,6 +1863,53 @@ ./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' \ + -e 's/@''GNULIB_MKTIME''@/1/g' \ + -e 's/@''GNULIB_NANOSLEEP''@/0/g' \ + -e 's/@''GNULIB_STRFTIME''@/0/g' \ + -e 's/@''GNULIB_STRPTIME''@/0/g' \ + -e 's/@''GNULIB_TIME''@/0/g' \ + -e 's/@''GNULIB_TIMEGM''@/1/g' \ + -e 's/@''GNULIB_TIMESPEC_GET''@/0/g' \ + -e 's/@''GNULIB_TIMESPEC_GETRES''@/0/g' \ + -e 's/@''GNULIB_TIME_R''@/1/g' \ + -e 's/@''GNULIB_TIME_RZ''@/1/g' \ + -e 's/@''GNULIB_TZSET''@/1/g' \ + -e 's/@''GNULIB_MDA_TZSET''@/1/g' \ + -e 's|@''HAVE_DECL_LOCALTIME_R''@|1|g' \ + -e 's|@''HAVE_NANOSLEEP''@|1|g' \ + -e 's|@''HAVE_STRPTIME''@|1|g' \ + -e 's|@''HAVE_TIMEGM''@|1|g' \ + -e 's|@''HAVE_TIMESPEC_GET''@|1|g' \ + -e 's|@''HAVE_TIMESPEC_GETRES''@|1|g' \ + -e 's|@''HAVE_TIMEZONE_T''@|0|g' \ + -e 's|@''REPLACE_CTIME''@|GNULIB_PORTCHECK|g' \ + -e 's|@''REPLACE_GMTIME''@|0|g' \ + -e 's|@''REPLACE_LOCALTIME''@|0|g' \ + -e 's|@''REPLACE_LOCALTIME_R''@|0|g' \ + -e 's|@''REPLACE_MKTIME''@|0|g' \ + -e 's|@''REPLACE_NANOSLEEP''@|GNULIB_PORTCHECK|g' \ + -e 's|@''REPLACE_STRFTIME''@|GNULIB_PORTCHECK|g' \ + -e 's|@''REPLACE_TIME''@|0|g' \ + -e 's|@''REPLACE_TIMEGM''@|0|g' \ + -e 's|@''REPLACE_TIMESPEC_GET''@|GNULIB_PORTCHECK|g' \ + -e 's|@''REPLACE_TZSET''@|0|g' \ + -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|0|g' \ + -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|0|g' \ + -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|1|g' \ + -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|0|g' \ + -e 's|@''TIME_H_DEFINES_TIME_UTC''@|1|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' \ + ./time.in.h > time.h-t +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' \ -e 's|@''INCLUDE_NEXT''@|include_next|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|#pragma GCC system_header|g' \ @@ -1918,6 +1956,10 @@ -e 's|@''REPLACE_MBRTOC32''@|1|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r ./c++defs.h' \ ./uchar.in.h > uchar.h-t +mv string.h-t string.h +mv stdlib.h-t stdlib.h +mv sys/time.h-t sys/time.h +mv sys/types.h-t sys/types.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''HAVE_UNISTRING_WOE32DLL_H''@|0|g' \ -e 's/@''GNULIB_UNICASE_EMPTY_PREFIX_CONTEXT_DLL_VARIABLE''@/LIBUNISTRING_DLL_VARIABLE/g' \ @@ -2058,6 +2100,8 @@ -e 's/@''GNULIB_UNICTYPE_PROPERTY_IGNORABLE_CONTROL_DLL_VARIABLE''@/LIBUNISTRING_DLL_VARIABLE/g' \ -e 's/@''GNULIB_UNICTYPE_PROPERTY_REGIONAL_INDICATOR_DLL_VARIABLE''@/LIBUNISTRING_DLL_VARIABLE/g' \ > unictype.h-t +mv stdio.h-t stdio.h +mv unicase.h-t unicase.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G \ -e 's|@''HAVE_UNISTRING_WOE32DLL_H''@|0|g' \ -e 's/@''GNULIB_UNINORM_NFD_DLL_VARIABLE''@/LIBUNISTRING_DLL_VARIABLE/g' \ @@ -2065,7 +2109,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/random.h-t sys/random.h +mv time.h-t time.h +mv uchar.h-t uchar.h +mv uninorm.h-t uninorm.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' \ @@ -2263,12 +2309,9 @@ -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 sys/types.h-t sys/types.h sed -e 1h -e '1s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */,' -e 1G -n -e 'w unitypes.h-t' ./unitypes.in.h -mv sys/time.h-t sys/time.h -mv unicase.h-t unicase.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 uninorm.h-t uninorm.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' \ @@ -2284,7 +2327,7 @@ -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 unitypes.h-t unitypes.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|@''INCLUDE_NEXT''@|include_next|g' \ @@ -2408,8 +2451,7 @@ -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 time.h-t time.h -mv uniwidth.h-t uniwidth.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/@''HAVE_WCTYPE_H''@/1/g' \ @@ -2439,16 +2481,10 @@ -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 uchar.h-t uchar.h -mv sys/stat.h-t sys/stat.h -mv utime.h-t utime.h -mv string.h-t string.h mv wctype.h-t wctype.h -mv stdio.h-t stdio.h -mv stdlib.h-t stdlib.h +mv unictype.h-t unictype.h mv wchar.h-t wchar.h mv unistd.h-t unistd.h -mv unictype.h-t unictype.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' @@ -2700,7 +2736,7 @@ make[1]: Entering directory '/build/reproducible-path/tar-1.35+dfsg' cp tests/testsuite debian/testsuite.orig dh_auto_test - make -j42 check "TESTSUITEFLAGS=-j42 --verbose" VERBOSE=1 + make -j40 check "TESTSUITEFLAGS=-j40 --verbose" VERBOSE=1 make[2]: Entering directory '/build/reproducible-path/tar-1.35+dfsg' Making check in doc make[3]: Entering directory '/build/reproducible-path/tar-1.35+dfsg/doc' @@ -2752,9 +2788,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 -j42 --verbose +/bin/sh ./testsuite -j40 --verbose ## ------------------------ ## ## GNU tar 1.35 test suite. ## ## ------------------------ ## @@ -2770,45 +2806,12 @@ - - 1. version.at:19: testing tar version ... ./version.at:21: tar --version | sed 1q -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) -3. options.at:24: testing mixing options ... -./options.at:27: -echo > file1 -TAR_OPTIONS=--numeric-owner tar chof archive file1 -tar tf archive - - 5. options03.at:21: testing TAR_OPTIONS with string arguments ... ./options03.at:31: echo dir/bar > exclude.list @@ -2819,41 +2822,17 @@ tar tf arc.tar -6. opcomp01.at:21: testing occurrence compatibility ... -./opcomp01.at:24: -tar --occurrence=1 -cf test.tar . - - -4. options02.at:26: testing interspersed options ... -./options02.at:29: -echo > file1 -tar c file1 -f archive -tar tf archive - 7. opcomp02.at:21: testing occurrence compatibility ... ./opcomp02.at:24: tar --occurrence=1 -tf test.tar -8. opcomp03.at:21: testing --verify compatibility ... -./opcomp03.at:24: -tar -tWf test.tar . - -9. opcomp04.at:21: testing compress option compatibility ... -./opcomp04.at:24: - -cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 - -genfile --file file -tar czf test.tar file -genfile --file newfile -tar rzf test.tar newfile - - -10. opcomp05.at:21: testing --pax-option compatibility ... -./opcomp05.at:24: -tar -Hgnu -cf test.tar --pax-option user:=root . +3. options.at:24: testing mixing options ... +./options.at:27: +echo > file1 +TAR_OPTIONS=--numeric-owner tar chof archive file1 +tar tf archive 11. opcomp06.at:21: testing --pax-option compatibility ... ./opcomp06.at:24: @@ -2885,53 +2864,67 @@ tar -cf test.tar --acls -Hgnu file -13. interval.at:16: testing checkpoint interval ... -./interval.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=2 -c -f ../a.tar . +8. opcomp03.at:21: testing --verify compatibility ... +./opcomp03.at:24: +tar -tWf test.tar . -14. dot.at:16: testing dot action ... -./dot.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 -c -f ../a.tar . +4. options02.at:26: testing interspersed options ... +./options02.at:29: +echo > file1 +tar c file1 -f archive +tar tf archive +9. opcomp04.at:21: testing compress option compatibility ... +./opcomp04.at:24: -12. defaults.at:16: testing checkpoint defaults ... -./defaults.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 +cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 + +genfile --file file +tar czf test.tar file +genfile --file newfile +tar rzf test.tar newfile + +10. opcomp05.at:21: testing --pax-option compatibility ... +./opcomp05.at:24: +tar -Hgnu -cf test.tar --pax-option user:=root . + +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 * -tar --checkpoint -c -f ../a.tar . +test -z "`sort < /dev/null 2>&1`" || exit 77 -15. dot-compat.at:16: testing dot action (compatibility syntax) ... -./dot-compat.at:18: +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) +14. dot.at:16: testing dot action ... +./dot.at:18: mkdir t cd t for i in 0 1 2 3 4 5 6 7 8 9 @@ -2941,12 +2934,11 @@ TAR_OPTIONS=-Hgnu export TAR_OPTIONS -tar --checkpoint=.2 -c -f ../a.tar . - +tar --checkpoint-action=dot -c -f ../a.tar . -16. dot-int.at:16: testing dot action and interval ... -./dot-int.at:18: +13. interval.at:16: testing checkpoint interval ... +./interval.at:18: mkdir t cd t for i in 0 1 2 3 4 5 6 7 8 9 @@ -2956,45 +2948,12 @@ TAR_OPTIONS=-Hgnu export TAR_OPTIONS -tar --checkpoint-action=dot --checkpoint=2 -c -f ../a.tar . +tar --checkpoint=2 -c -f ../a.tar . -6. opcomp01.at:21: +1. version.at:19: ok -1. version.at:19: 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 - - -7. opcomp02.at:21: 19. testsuite.at:244: testing compress: xz ... +19. testsuite.at:244: testing compress: xz ... ./testsuite.at:244: cat /dev/null | xz - > /dev/null 2>&1 || exit 77 @@ -3024,48 +2983,38 @@ tar xf k.tar.xz test -f empty -8. opcomp03.at:21: ok - ok - ---- - 2026-10-05 04:32:18.663999355 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/11/stderr 2026-10-05 04:32:18.661487690 +0000 -@@ -1,3 +1 @@ --tar: --acls can be used only on POSIX archives --Try 'tar --help' or 'tar --usage' for more information. - -4. options02.at:26: 10. opcomp05.at:21: 3. options.at:24: 18. testsuite.at:243: testing compress: bzip2 ... -./testsuite.at:243: +17. testsuite.at:242: testing compress: gzip ... +./testsuite.at:242: -cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77 +cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 unset TAR_OPTIONS touch empty set -e -: create with --bzip2 -tar --bzip2 -cf k.tar.bz2 empty -tar tf k.tar.bz2 +: create with --gzip +tar --gzip -cf k.tar.gz empty +tar tf k.tar.gz -echo testing .bz2 -tar -acf k2.tar.bz2 empty -cat k2.tar.bz2 | bzip2 -d > k.bz2.tar -tar tf k.bz2.tar +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 .tbz2 -tar -acf k2.tar.tbz2 empty -cat k2.tar.tbz2 | bzip2 -d > k.tbz2.tar -tar tf k.tbz2.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.bz2 +tar xf k.tar.gz test -f empty - ok - ok - ok +8. opcomp03.at:21: + 20. testsuite.at:246: testing compress: lzip ... ./testsuite.at:246: @@ -3092,6 +3041,46 @@ test -f empty + ok +15. dot-compat.at:16: testing dot action (compatibility syntax) ... +./dot-compat.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=.2 -c -f ../a.tar . + + +21. testsuite.at:247: testing compress: lzop ... +./testsuite.at:247: + +cat /dev/null | lzop - > /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 + + +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.lzo +test -f empty + 23. positional01.at:21: testing Exclude ... ./positional01.at:24: @@ -3108,31 +3097,108 @@ echo $? tar -tf a.tar | sort -21. testsuite.at:247: testing compress: lzop ... -./testsuite.at:247: -cat /dev/null | lzop - > /dev/null 2>&1 || exit 77 + + +7. opcomp02.at:21: 12. defaults.at:16: testing checkpoint defaults ... +./defaults.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 -c -f ../a.tar . + + +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 . + + + ok + +18. testsuite.at:243: testing compress: bzip2 ... +./testsuite.at:243: + +cat /dev/null | bzip2 - > /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 --bzip2 +tar --bzip2 -cf k.tar.bz2 empty +tar tf k.tar.bz2 -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 .bz2 +tar -acf k2.tar.bz2 empty +cat k2.tar.bz2 | bzip2 -d > k.bz2.tar +tar tf k.bz2.tar + +echo testing .tbz2 +tar -acf k2.tar.tbz2 empty +cat k2.tar.tbz2 | bzip2 -d > k.tbz2.tar +tar tf k.tbz2.tar # Extraction: ensure compressed format is correctly recognized rm -f empty -tar xf k.tar.lzo +tar xf k.tar.bz2 test -f empty + +27. T-mult.at:21: testing multiple file lists ... +./T-mult.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + +>file1 +>file2 +>file3 +>file4 +cat >F1 <<'_ATEOF' +file1 +file2 +_ATEOF + +cat >F2 <<'_ATEOF' +file3 +file4 +_ATEOF + +tar cf archive -T F1 -T F2 +tar tf archive +) + +--- - 2025-09-01 22:15:22.114011991 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/11/stderr 2025-09-01 22:15:22.106807578 +0000 +@@ -1,3 +1 @@ +-tar: --acls can be used only on POSIX archives +-Try 'tar --help' or 'tar --usage' for more information. + + + + +3. options.at:24: ok 22. testsuite.at:248: testing compress: zstd ... ./testsuite.at:248: @@ -3163,38 +3229,61 @@ tar xf k.tar.zst test -f empty +10. opcomp05.at:21: ok +29. T-rec.at:21: testing recursive file lists ... +./T-rec.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * -11. opcomp06.at:21: - -24. positional02.at:21: testing Directory ... -./positional02.at:24: +>file1 +>file2 +cat >F1 <<'_ATEOF' +file1 +-T F2 +_ATEOF -test -z "`sort < /dev/null 2>&1`" || exit 77 +cat >F2 <<'_ATEOF' +file2 +-T F1 +_ATEOF -mkdir dir -> dir/A.a -> dir/B.a -> dir/A.b -tar -cf a.tar -C dir . +tar cf archive -T F1 echo $? -tar -tf a.tar | sort -tar -cf a.tar . -C dir - - - -25. positional03.at:21: testing Several options ... -./positional03.at:24: +tar tf archive +) +28. T-nest.at:21: testing nested file lists ... +./T-nest.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 +>file1 +>file2 +>file3 +>file4 +cat >F1 <<'_ATEOF' +file1 +-T F2 +file2 +_ATEOF -mkdir t -cd t -mkdir dir -> dir/A.a -> dir/B.a -> dir/A.b -tar -vcf ../a.tar --exclude '*.b' . -C dir --exclude '*.c' | sort +cat >F2 <<'_ATEOF' +file3 +file4 +_ATEOF +tar cf archive -T F1 +tar tf archive +) 26. add-file.at:21: testing The --add-file option ... ./add-file.at:33: mkdir v7 @@ -3226,74 +3315,98 @@ echo 3: tar -cvf arc.tar -T input ) ---- - 2026-10-05 04:32:18.669793256 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/20/stdout 2026-10-05 04:32:18.665487690 +0000 -@@ -1,4 +1 @@ --empty --testing .lz --empty - - skipped (opcomp06.at:24) +6. opcomp01.at:21: ok +25. positional03.at:21: testing Several options ... +./positional03.at:24: +test -z "`sort < /dev/null 2>&1`" || exit 77 -28. T-nest.at:21: testing nested file lists ... -./T-nest.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +mkdir t +cd t +mkdir dir +> dir/A.a +> dir/B.a +> dir/A.b +tar -vcf ../a.tar --exclude '*.b' . -C dir --exclude '*.c' | sort + +31. T-recurse.at:66: testing toggle --recursion (not) from -T ... +24. positional02.at:21: testing Directory ... +./positional02.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 -C dir . +echo $? +tar -tf a.tar | sort +tar -cf a.tar . -C dir + +./T-recurse.at:69: +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 * ->file1 ->file2 ->file3 ->file4 +mkdir directory1 directory2 +touch directory1/file directory2/file + cat >F1 <<'_ATEOF' -file1 --T F2 -file2 +--no-recursion +directory1/ _ATEOF + cat >F2 <<'_ATEOF' -file3 -file4 +directory2/ _ATEOF -tar cf archive -T F1 + +tar cf archive -T F1 --recursion -T F2 tar tf archive + ) -27. T-mult.at:21: testing multiple file lists ... -./T-mult.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +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 ustar" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * ->file1 ->file2 ->file3 ->file4 -cat >F1 <<'_ATEOF' -file1 -file2 -_ATEOF -cat >F2 <<'_ATEOF' -file3 -file4 -_ATEOF +mkdir directory +genfile --file=directory/a --length=1035 -tar cf archive -T F1 -T F2 -tar tf archive -) +echo "Creating the archive" +tar -c -v -f - --index-file=idx directory > archive -29. T-rec.at:21: testing recursive file lists ... -./T-rec.at:24: +echo "Testing the archive" +tar -tf archive +) +--- - 2025-09-01 22:15:22.152113055 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/20/stdout 2025-09-01 22:15:22.142807851 +0000 +@@ -1,4 +1 @@ +-empty +-testing .lz +-empty + +--- - 2025-09-01 22:15:22.160191957 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/21/stdout 2025-09-01 22:15:22.154807941 +0000 +@@ -1,4 +1 @@ +-empty +-testing .lzo +-empty + +32. T-cd.at:21: testing -C in file lists ... +./T-cd.at:24: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -3302,32 +3415,22 @@ export TAR_OPTIONS rm -rf * + +test -z "`sort < /dev/null 2>&1`" || exit 77 + >file1 ->file2 +mkdir dir +>dir/file2 +>dir/file3 cat >F1 <<'_ATEOF' file1 --T F2 -_ATEOF - -cat >F2 <<'_ATEOF' -file2 --T F1 +-C dir +. _ATEOF tar cf archive -T F1 -echo $? -tar tf archive +tar tf archive | sort ) -5. options03.at:21: ok ---- - 2026-10-05 04:32:18.672651207 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/22/stdout 2026-10-05 04:32:18.669487690 +0000 -@@ -1,6 +1 @@ --empty --testing .zst --empty --testing .tzst --empty - 30. T-recurse.at:27: testing files-from & recurse: toggle ... ./T-recurse.at:30: mkdir v7 @@ -3367,8 +3470,9 @@ tar cf "$a" --no-recursion -T F2A --recursion -T F2B tar tf "$a" ) -31. T-recurse.at:66: testing toggle --recursion (not) from -T ... -./T-recurse.at:69: + +39. T-dir01.at:28: testing trailing slash in --files-from ... +./T-dir01.at:30: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -3377,57 +3481,40 @@ 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 +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 ) -20. testsuite.at:246: 32. T-cd.at:21: testing -C in file lists ... -./T-cd.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar + +5. options03.at:21: ok +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 ustar" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * test -z "`sort < /dev/null 2>&1`" || exit 77 ->file1 mkdir dir ->dir/file2 ->dir/file3 -cat >F1 <<'_ATEOF' -file1 --C dir -. -_ATEOF - -tar cf archive -T F1 -tar tf archive | sort +genfile -f dir/file1 +genfile -f dir/file2 +tar cf archive dir +rm -rf dir +echo dir > list +tar xfTv archive list | sort ) ---- - 2026-10-05 04:32:18.673222692 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/21/stdout 2026-10-05 04:32:18.669487690 +0000 -@@ -1,4 +1 @@ --empty --testing .lzo --empty - 34. T-null.at:21: testing 0-separated file without -0 ... ./T-null.at:24: mkdir ustar @@ -3453,8 +3540,8 @@ tar cfTv archive file-list ) -33. T-empty.at:26: testing empty entries ... -./T-empty.at:36: +37. T-nonl.at:27: testing entries with missing newlines ... +./T-nonl.at:30: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -3463,14 +3550,35 @@ export TAR_OPTIONS 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' +a +b +_ATEOF -genfile --file jeden -genfile --file dwa -genfile --file trzy -tar cfvT archive ../file-list +tar cf archive -T empty -T 1.nonl -T 2.nonl -T filelist +tar tf archive +echo == +tar cf archive -T 2.nonl -T empty -T filelist -T 1.nonl +tar tf archive ) -22. testsuite.at:248: 35. T-null2.at:17: testing --null enables verbatim reading ... +--- - 2025-09-01 22:15:22.167436337 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/22/stdout 2025-09-01 22:15:22.158807971 +0000 +@@ -1,6 +1 @@ +-empty +-testing .zst +-empty +-testing .tzst +-empty + + + +4. options02.at:26: ok +35. T-null2.at:17: testing --null enables verbatim reading ... ./T-null2.at:24: mkdir ustar (cd ustar @@ -3495,6 +3603,15 @@ cat file-list | tr '\n' '\0' | tar -c -f archive -v --null -T - ) +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 36. T-zfile.at:26: testing empty file ... ./T-zfile.at:29: @@ -3521,10 +3638,10 @@ tar cf archive -T valid -T empty tar tf archive ) - skipped (testsuite.at:246) -21. testsuite.at:247: -37. T-nonl.at:27: testing entries with missing newlines ... -./T-nonl.at:30: + +9. opcomp04.at:21: ok +33. T-empty.at:26: testing empty entries ... +./T-empty.at:36: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -3533,81 +3650,16 @@ export TAR_OPTIONS 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' -a -b -_ATEOF - - -tar cf archive -T empty -T 1.nonl -T 2.nonl -T filelist -tar tf archive -echo == -tar cf archive -T 2.nonl -T empty -T filelist -T 1.nonl -tar tf archive -) - skipped (testsuite.at:248) - -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 -) - skipped (testsuite.at:247) - - -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 +genfile --file jeden +genfile --file dwa +genfile --file trzy -echo "Testing the archive" -tar -tf archive +tar cfvT archive ../file-list ) -9. opcomp04.at:21: 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 - ok -38. T-dir00.at:28: testing recursive extraction from --files-from ... -./T-dir00.at:30: +44. recurs02.at:30: testing recurse: toggle ... +./recurs02.at:33: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -3616,20 +3668,17 @@ 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 +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: testing tar cvf - ... ./verbose.at:29: mkdir v7 @@ -3646,28 +3695,34 @@ echo Testing the archive tar tf archive ) - -44. recurs02.at:30: testing recurse: toggle ... -./recurs02.at:33: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +21. testsuite.at:247: 11. opcomp06.at:21: 20. testsuite.at:246: 13. interval.at:16: ok +./pipe.at:33: +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 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 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) + +22. testsuite.at:248: skipped (testsuite.at:246) + skipped (testsuite.at:247) + 43. recurse.at:21: testing recurse ... ./recurse.at:24: mkdir v7 @@ -3683,7 +3738,6 @@ tar --create --file archive --no-recursion directory || exit 1 tar tf archive ) - 45. shortrec.at:25: testing short records ... ./shortrec.at:28: mkdir v7 @@ -3703,7 +3757,11 @@ rm -r directory ) -./pipe.at:33: +12. defaults.at:16: ok + skipped (opcomp06.at:24) + skipped (testsuite.at:248) +27. T-mult.at:21: ok +./indexfile.at:29: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -3713,22 +3771,18 @@ 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) +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 +) +16. dot-int.at:16: ok -12. defaults.at:16: 15. dot-compat.at:16: 46. numeric.at:18: testing --numeric-owner basic tests ... +46. numeric.at:18: testing --numeric-owner basic tests ... ./numeric.at:29: mkdir posix (cd posix @@ -3770,13 +3824,9 @@ tar --extract -vvf a dir | awk '=="'"$MYUSR/$MYGRP"'" {print "OK"; next} {print}' ) - ok - ok -25. positional03.at:21: 13. interval.at:16: ok - ok -27. T-mult.at:21: 14. dot.at:16: ok - ok -47. same-order01.at:26: testing working -C with --same-order ... + + +15. dot-compat.at:16: 47. same-order01.at:26: testing working -C with --same-order ... ./same-order01.at:29: mkdir v7 (cd v7 @@ -3799,8 +3849,9 @@ ls directory|sort ) -50. append01.at:29: testing appending files with long names ... -./append01.at:34: + ok + +./T-recurse.at:69: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -3809,28 +3860,46 @@ 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 +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 + ) -49. append.at:21: testing append ... -./append.at:24: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 + + +./T-dir00.at:30: +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 * -touch file1 - touch file2 - tar cf archive file1 - tar rf archive file2 - tar tf archive) -16. dot-int.at:16: 33. T-empty.at:26: 28. T-nest.at:21: ok - ok + + +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 +) 48. same-order02.at:25: testing multiple -C options ... ./same-order02.at:28: mkdir v7 @@ -3857,10 +3926,21 @@ echo separator ls to ) -24. positional02.at:21: 29. T-rec.at:21: ok - ok -42. gzip.at:23: -./T-recurse.at:69: +23. positional01.at:21: 14. dot.at:16: 25. positional03.at:21: 49. append.at:21: testing append ... +./append.at:24: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * +touch file1 + touch file2 + tar cf archive file1 + tar rf archive file2 + tar tf archive) +./verbose.at:29: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -3869,60 +3949,43 @@ 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 +genfile --file file --length 10240 +echo Creating the archive +tar cvf - file > archive +echo Testing the archive tar tf archive - ) ok +28. T-nest.at:21: ok ok -23. positional01.at:21: ok -51. append02.at:54: testing append vs. create ... -./append02.at:57: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +33. T-empty.at:26: ok +29. T-rec.at:21: ok + ok + +32. T-cd.at:21: ok +24. positional02.at:21: ok +37. T-nonl.at:27: ok +42. gzip.at:23: ok +34. T-null.at:21: ok +35. T-null2.at:17: ok +36. T-zfile.at:26: ok +50. append01.at:29: testing appending files with long names ... +./append01.at:34: +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 * -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 +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 ) + 53. append04.at:29: testing append with verify ... ./append04.at:32: mkdir v7 @@ -3951,36 +4014,37 @@ # Verify content of the new archive: tar -tf archive.tar ) -32. T-cd.at:21: ok -./add-file.at:33: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu + +54. append05.at:32: testing append after changed blocking ... +./append05.at:35: +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 --file -File -genfile --file foo -genfile --file bar - -echo 1: -tar -cvf arc.tar --add-file foo --add-file -File +for f in a b c d e f g h i +do + echo $f > $f +done -echo 2: -tar -cvf arc.tar foo --add-file -File bar +decho 'creating archive' +tar -cf archive -b1 a b c +tar tf archive -cat >input <<'_ATEOF' -foo ---add-file=-File -bar -_ATEOF +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 3: -tar -cvf arc.tar -T input +decho 'resulting archive' +tar tf archive ) 52. append03.at:21: testing append with name transformation ... ./append03.at:26: @@ -4001,27 +4065,41 @@ echo Testing tar tf archive ) -./indexfile.at:29: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +51. append02.at:54: testing append vs. create ... +./append02.at:57: +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 --file file1 +genfile --file file2 -mkdir directory -genfile --file=directory/a --length=1035 +# Make sure file timestamps in the archive will not differ +MTIME="--mtime=@0" -echo "Creating the archive" -tar -c -v -f - --index-file=idx directory > archive +# 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 "Testing the archive" -tar -tf archive +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 ) -54. append05.at:32: testing append after changed blocking ... -./append05.at:35: +55. xform-h.at:30: testing transforming hard links on create ... +./xform-h.at:39: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -4030,28 +4108,28 @@ 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 ) -35. T-null2.at:17: ./verbose.at:29: + +./T-dir01.at:30: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -4060,51 +4138,54 @@ 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 -) - ok -34. T-null.at:21: ok +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 oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +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 oldgnu" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * -mkdir directory -touch directory/file -tar --create --file archive --no-recursion directory || exit 1 -tar tf archive +genfile --file file +tar cvf /dev/null file \ + --transform='s/file/other\/name/' \ + --show-transformed-name ) -./T-dir00.at:30: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu + +./indexfile.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 * -test -z "`sort < /dev/null 2>&1`" || exit 77 +mkdir directory +genfile --file=directory/a --length=1035 -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 +echo "Creating the archive" +tar -c -v -f - --index-file=idx directory > archive + +echo "Testing the archive" +tar -tf archive ) ./T-recurse.at:30: mkdir oldgnu @@ -4144,42 +4225,56 @@ tar cf "$a" --no-recursion -T F2A --recursion -T F2B tar tf "$a" ) - -36. T-zfile.at:26: 37. T-nonl.at:27: - ok - ok -55. xform-h.at:30: testing transforming hard links on create ... -./xform-h.at:39: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +./verbose.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 basedir -echo "hello" > basedir/test -ln basedir/test basedir/test_link +genfile --file file --length 10240 +echo Creating the archive +tar cvf - file > archive +echo Testing the archive +tar tf archive +) +18. testsuite.at:243: ok -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' +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 +) -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' +./recurse.at:24: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +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: +./append.at:24: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -4187,6 +4282,29 @@ TAR_OPTIONS="-H oldgnu" export TAR_OPTIONS rm -rf * +touch file1 + touch file2 + tar cf archive file1 + tar rf archive file2 + tar tf archive) + + + +./T-recurse.at:69: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +./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 @@ -4196,13 +4314,10 @@ genfile -f dir/file2 tar cf archive dir rm -rf dir -echo dir/ > list +echo dir > list tar xfTv archive list | sort ) - - - -./recurs02.at:33: +./add-file.at:33: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -4211,20 +4326,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 -tar tf archive -tar cf archive directory1 directory2 -tar tf archive \ - --no-recursion directory1 \ - --recursion directory2 || exit 1 -) +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 -17. testsuite.at:242: ./append01.at:34: +echo 3: +tar -cvf arc.tar -T input +) +./append01.at:34: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -4239,75 +4362,27 @@ 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 ) +rm -rf * +mkdir directory1 directory2 +touch directory1/file directory2/file - ok -./shortrec.at:28: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * +cat >F1 <<'_ATEOF' +--no-recursion +directory1/ +_ATEOF -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 -) -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 * +cat >F2 <<'_ATEOF' +directory2/ +_ATEOF -genfile --file file -tar -cf archive.tar -V /label/ file -tar tf archive.tar -) -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 -) -58. xform03.at:21: testing transforming hard link targets ... -./xform03.at:24: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * +tar cf archive -T F1 --recursion -T F2 +tar tf archive -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 ) +17. testsuite.at:242: ok 59. exclude.at:23: testing exclude ... ./exclude.at:26: mkdir ustar @@ -4350,8 +4425,10 @@ tar tf archive.tar | sort done ) -60. exclude01.at:19: testing exclude wildcards ... -./exclude01.at:22: + +19. testsuite.at:244: ok +62. exclude03.at:19: testing exclude: wildcards match slash ... +./exclude03.at:22: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -4366,6 +4443,7 @@ 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 @@ -4373,30 +4451,30 @@ touch testdir/dir3/file3 touch testdir/dir3/\* -tar cf archive --exclude=testdir/dir1/\* \ - --no-wildcards \ - --exclude=testdir/dir2/\* \ - --wildcards \ - --exclude=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 "NEXT" tar cf archive testdir -tar t "testdir/dir1/*" -f archive | sort +tar t --wildcards 'testdir/*f*1' -f archive | sort echo "NEXT" -tar cf archive testdir/dir1 -tar t --no-wildcards "testdir/dir1/*" -f archive | sort +tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort echo "NEXT" -tar cf archive testdir -tar t --wildcards "testdir/dir1/*" -f archive | sort +tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort rm -rf testdir + ) -62. exclude03.at:19: testing exclude: wildcards match slash ... -./exclude03.at:22: +58. xform03.at:21: testing transforming hard link targets ... +60. exclude01.at:19: testing exclude wildcards ... +./exclude01.at:22: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -4411,7 +4489,6 @@ 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 @@ -4419,28 +4496,184 @@ 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' \ +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 --wildcards 'testdir/*f*1' -f archive | sort +tar t "testdir/dir1/*" -f archive | sort echo "NEXT" -tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort +tar cf archive testdir/dir1 +tar t --no-wildcards "testdir/dir1/*" -f archive | sort echo "NEXT" -tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort +tar cf archive testdir +tar t --wildcards "testdir/dir1/*" -f archive | sort rm -rf testdir +) +./shortrec.at:28: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +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 +) +./xform03.at:24: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +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 +) +68. exclude09.at:37: testing --exclude-tag option and --listed-incremental ... +./exclude09.at:40: +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=excludeme --listed=snar -v etest | 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) +64. exclude05.at:21: testing exclude: lots of excludes ... +./exclude05.at:24: +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 + + +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 ) +./recurs02.at:33: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +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 +) +./same-order02.at:28: +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 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 +) 61. exclude02.at:19: testing exclude: anchoring ... ./exclude02.at:22: mkdir v7 @@ -4490,35 +4723,64 @@ rm -rf testdir file1.txt ) -./T-recurse.at:69: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./append02.at:57: +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 * -mkdir directory1 directory2 -touch directory1/file directory2/file +genfile --file file1 +genfile --file file2 -cat >F1 <<'_ATEOF' ---no-recursion -directory1/ -_ATEOF +# 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 -cat >F2 <<'_ATEOF' -directory2/ -_ATEOF +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 -tar cf archive -T F1 --recursion -T F2 -tar tf archive +echo Comparing archives +cmp archive.1 archive.2 +) +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 ) -./append03.at:26: +./xform02.at:24: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -4527,16 +4789,11 @@ 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 +genfile --file file +tar cvf /dev/null file \ + --transform='s/file/other\/name/' \ + --show-transformed-name ) - 63. exclude04.at:19: testing exclude: case insensitive ... ./exclude04.at:22: mkdir v7 @@ -4585,29 +4842,8 @@ rm -rf testdir ) - -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 * - - -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.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: +70. exclude11.at:36: testing --exclude-tag-under option ... +./exclude11.at:39: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -4616,15 +4852,13 @@ 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 -v etest | sort ) -./same-order02.at:28: +./append05.at:35: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -4633,50 +4867,48 @@ export TAR_OPTIONS rm -rf * -genfile -l 1024 -f file1 -genfile -l 1024 -f file2 -tar cf archive file1 file2 +for f in a b c d e f g h i +do + echo $f > $f +done -mkdir en -mkdir to +decho 'creating archive' +tar -cf archive -b1 a b c -HERE=`pwd` -tar -xf archive --same-order --warning=no-timestamp \ - -C $HERE/en file1 \ - -C $HERE/to file2 || exit 1 +tar tf archive -ls en -echo separator -ls to +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 ) -./append.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * -touch file1 - touch file2 - tar cf archive file1 - tar rf archive file2 - tar tf archive) -./recurse.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +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 ustar" +TAR_OPTIONS="-H pax" export TAR_OPTIONS rm -rf * -mkdir directory -touch directory/file -tar --create --file archive --no-recursion directory || exit 1 -tar tf archive + +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.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 ) -./same-order01.at:29: +./append03.at:26: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -4685,21 +4917,17 @@ export TAR_OPTIONS rm -rf * +genfile --file file.1 +genfile --file file.2 -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 +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 ) -64. exclude05.at:21: testing exclude: lots of excludes ... -./exclude05.at:24: +66. exclude07.at:19: testing exclude: --exclude-backups option ... +./exclude07.at:22: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -4708,31 +4936,13 @@ 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 - - -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 - +tar -v -c -f archive --exclude-backups dir ) 67. exclude08.at:36: testing --exclude-tag option ... ./exclude08.at:39: @@ -4750,90 +4960,10 @@ mkexcltest etest tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort ) -18. testsuite.at:243: ./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 - -echo "Creating the archive" -tar -c -v -f - --index-file=idx directory > archive - -echo "Testing the archive" -tar -tf archive -) - ok -./add-file.at:33: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -./append02.at:57: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -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 -) -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 -) -68. exclude09.at:37: testing --exclude-tag option and --listed-incremental ... -./exclude09.at:40: +71. exclude12.at:37: testing --exclude-tag-under and --listed-incremental ... +./exclude12.at:40: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -4846,14 +4976,15 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 mkexcltest etest -tar -c -f etest.tar --exclude-tag=excludeme --listed=snar -v etest | sort +tar -c -f etest.tar --exclude-tag-under=excludeme --listed=snar -v etest | sort ) -./pipe.at:33: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +56. xform01.at:26: ok +./same-order01.at:29: +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 * @@ -4861,19 +4992,17 @@ 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 -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) +tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 -69. exclude10.at:38: testing --exclude-tag option in incremental pass ... -./exclude10.at:41: +ls directory|sort +) +72. exclude13.at:39: testing --exclude-tag-under option in incremental pass ... +./exclude13.at:42: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -4888,31 +5017,35 @@ mkexcltest etest rm etest/subdir/excludeme decho "# Level 0" -tar -c -f etest-0.tar --exclude-tag=excludeme --listed=snar-0 -v etest | sort +tar -c -f etest-0.tar --exclude-tag-under=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 +tar -c -f etest-1.tar --exclude-tag-under=excludeme --listed=snar-1 -v etest | sort ) -71. exclude12.at:37: testing --exclude-tag-under and --listed-incremental ... -./exclude12.at:40: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./T-dir01.at:30: +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-under=excludeme --listed=snar -v etest | sort +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 ) -./verbose.at:29: +./recurse.at:24: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -4921,53 +5054,25 @@ export TAR_OPTIONS rm -rf * -genfile --file file --length 10240 -echo Creating the archive -tar cvf - file > archive -echo Testing the archive +mkdir directory +touch directory/file +tar --create --file archive --no-recursion directory || exit 1 tar tf archive ) -19. testsuite.at:244: ok -56. xform01.at:26: ok -72. exclude13.at:39: testing --exclude-tag-under option in incremental pass ... -./exclude13.at:42: -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-under=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-under=excludeme --listed=snar-1 -v etest | sort -) -70. exclude11.at:36: testing --exclude-tag-under option ... -./exclude11.at:39: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +./verbose.at:29: +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 * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort +genfile --file file --length 10240 +echo Creating the archive +tar cvf - file > archive +echo Testing the archive +tar tf archive ) 73. exclude14.at:36: testing --exclude-tag-all option ... ./exclude14.at:39: @@ -4985,78 +5090,7 @@ mkexcltest etest tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort ) -./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 -) -./xform02.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 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 - -# 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 -) -./append01.at:34: +./indexfile.at:29: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -5065,13 +5099,16 @@ 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 -) +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 +) 74. exclude15.at:36: testing --exclude-tag-all and --listed-incremental ... ./exclude15.at:39: mkdir gnu @@ -5088,27 +5125,7 @@ mkexcltest etest tar -c -f etest.tar --exclude-tag-all=excludeme --listed=snar -v etest | 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 -) -./T-dir01.at:30: +./xform02.at:24: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -5117,30 +5134,10 @@ 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 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 +genfile --file file +tar cvf /dev/null file \ + --transform='s/file/other\/name/' \ + --show-transformed-name ) ./T-recurse.at:30: mkdir ustar @@ -5180,6 +5177,60 @@ tar cf "$a" --no-recursion -T F2A --recursion -T F2B tar tf "$a" ) +./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}' + +) +./append.at:24: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * +touch file1 + touch file2 + tar cf archive file1 + tar rf archive file2 + tar tf archive) ./recurs02.at:33: mkdir ustar (cd ustar @@ -5200,6 +5251,21 @@ --no-recursion directory1 \ --recursion directory2 || exit 1 ) +./append01.at:34: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +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 +) ./shortrec.at:28: mkdir ustar (cd ustar @@ -5218,26 +5284,7 @@ rm -r directory ) -./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 - -echo "Creating the archive" -tar -c -v -f - --index-file=idx directory > archive - -echo "Testing the archive" -tar -tf archive -) -./exclude07.at:22: +./xform-h.at:39: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -5246,14 +5293,27 @@ export TAR_OPTIONS rm -rf * -mkdir dir -genfile --file dir/file -genfile --file dir/file~ -genfile --file "dir/.#file" -genfile --file "dir/#file#" +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' + + +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 -v -c -f archive --exclude-backups dir ) + ./append03.at:26: mkdir ustar (cd ustar @@ -5272,76 +5332,37 @@ echo Testing tar tf archive ) -stderr: - -./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 -) -75. exclude16.at:38: testing --exclude-tag-all option in incremental pass ... -./exclude16.at:41: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./add-file.at:33: +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 * +genfile --file -File +genfile --file foo +genfile --file bar -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 -) -./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 +echo 1: +tar -cvf arc.tar --add-file foo --add-file -File -cat >F1 <<'_ATEOF' ---no-recursion -directory1/ -_ATEOF +echo 2: +tar -cvf arc.tar foo --add-file -File bar -cat >F2 <<'_ATEOF' -directory2/ +cat >input <<'_ATEOF' +foo +--add-file=-File +bar _ATEOF -tar cf archive -T F1 --recursion -T F2 -tar tf archive - +echo 3: +tar -cvf arc.tar -T input ) - -./append.at:24: +./append05.at:35: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -5349,56 +5370,35 @@ TAR_OPTIONS="-H ustar" export TAR_OPTIONS rm -rf * -touch file1 - touch file2 - tar cf archive file1 - tar rf archive file2 - tar tf archive) -./xform-h.at:39: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -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 ) -./xform02.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./exclude08.at:39: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -genfile --file file -tar cvf /dev/null file \ - --transform='s/file/other\/name/' \ - --show-transformed-name -) -./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr -./xform03.at:24: +TAR_OPTIONS="-H oldgnu" +./exclude07.at:22: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -5407,46 +5407,22 @@ 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 +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 ) -./append02.at:57: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" 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 +test -z "`sort < /dev/null 2>&1`" || exit 77 -echo Comparing archives -cmp archive.1 archive.2 +mkexcltest etest +tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort ) ./same-order02.at:28: mkdir ustar @@ -5473,49 +5449,7 @@ echo separator ls to ) -71. exclude12.at:37: 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}' - -) -./exclude08.at:39: +./exclude11.at:39: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -5528,67 +5462,35 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 mkexcltest etest -tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort +tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort ) -./same-order01.at:29: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./T-recurse.at:69: +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 directory1 directory2 +touch directory1/file directory2/file -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -genfile -l 1024 -f file1 -genfile -l 1024 -f file2 -tar cf archive file1 file2 +cat >F1 <<'_ATEOF' +--no-recursion +directory1/ +_ATEOF -mkdir directory -tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 -ls directory|sort -) -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 v7" -export TAR_OPTIONS -rm -rf * +cat >F2 <<'_ATEOF' +directory2/ +_ATEOF -mkdir dir -cd dir -echo '*.o' >.cvsignore -tar -cf - --exclude-vcs-ignores . | tar -tf - -) -./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 cf archive -T F1 --recursion -T F2 tar tf archive + ) -68. exclude09.at:37: ok -./add-file.at:33: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS ./pipe.at:33: mkdir posix (cd posix @@ -5612,90 +5514,154 @@ cmp orig/file1 directory/file1 echo "separator" cmp orig/file2 directory/file2) -./append01.at:34: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +stderr: +./recurse.at:24: +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 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 +mkdir directory +touch directory/file +tar --create --file archive --no-recursion directory || exit 1 tar tf archive ) +./append02.at:57: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS rm -rf * -genfile --file -File -genfile --file foo -genfile --file bar +genfile --file file1 +genfile --file file2 -echo 1: -tar -cvf arc.tar --add-file foo --add-file -File +# Make sure file timestamps in the archive will not differ +MTIME="--mtime=@0" -echo 2: -tar -cvf arc.tar foo --add-file -File bar +# 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 -cat >input <<'_ATEOF' -foo ---add-file=-File -bar -_ATEOF +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 +) +./verbose.at:29: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -echo 3: -tar -cvf arc.tar -T input +genfile --file file --length 10240 +echo Creating the archive +tar cvf - file > archive +echo Testing the archive +tar tf archive ) -77. exclude18.at:30: testing --exclude-vcs extract list compare ... -./exclude18.at:33: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +71. exclude12.at:37: ok +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 v7" +TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * test -z "`sort < /dev/null 2>&1`" || exit 77 -mkdir gitrepo -cd 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 -# Make an empty VCS directory: -mkdir .svn +decho "# Level 1" +cp snar-0 snar-1 +tar -c -f etest-1.tar --exclude-tag-all=excludeme --listed=snar-1 -v etest | sort +) +./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 * -# Make a VCS directory with a file: -mkdir .git -touch .git/_A -# Make a VCS file: -touch .gitignore +test -z "`sort < /dev/null 2>&1`" || exit 77 -# Make non-VCS files: -touch .git_B -touch _C +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 +) +./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr +./xform02.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * -# Create an archive, include VCS: -cd .. -tar -cf gitrepo.tar gitrepo -rm -r gitrepo +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 * -echo Extract: -tar -xvf gitrepo.tar --exclude-vcs | sort +# Create two empty files: +touch file1 file2 -echo -echo List: -tar -tf gitrepo.tar --exclude-vcs | sort +# Create an archive: +tar cpfW archive.tar file1 file2 -echo -echo Diff: -tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort +# 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 ) ./indexfile.at:29: mkdir gnu @@ -5716,22 +5682,7 @@ echo "Testing the archive" tar -tf archive ) -./exclude11.at:39: -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 - -mkexcltest etest -tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort -) -./append05.at:35: +./same-order01.at:29: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -5740,44 +5691,38 @@ 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 +test -z "`sort < /dev/null 2>&1`" || exit 77 -tar tf archive -decho 'adding d e f' -tar -vrf archive -b3 d e f -echo == -tar tf archive +genfile -l 1024 -f file1 +genfile -l 1024 -f file2 +tar cf archive file1 file2 -decho 'adding g h i' -tar -vrf archive -b5 g h i +mkdir directory +tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 -decho 'resulting archive' -tar tf archive +ls directory|sort ) 69. exclude10.at:38: ok -65. exclude06.at:26: ok -./xform02.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./exclude07.at:22: +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 * -genfile --file file -tar cvf /dev/null file \ - --transform='s/file/other\/name/' \ - --show-transformed-name +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 ) -74. exclude15.at:36: ./exclude14.at:39: +./exclude14.at:39: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -5792,22 +5737,39 @@ mkexcltest etest tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort ) -./exclude07.at:22: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./append.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 * -mkdir dir -genfile --file dir/file -genfile --file dir/file~ -genfile --file "dir/.#file" -genfile --file "dir/#file#" +rm -rf * +touch file1 + touch file2 + tar cf archive file1 + tar rf archive file2 + tar tf archive) +65. exclude06.at:26: 74. exclude15.at:36: ok + 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 * -tar -v -c -f archive --exclude-backups dir +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 ) ./exclude03.at:22: mkdir oldgnu @@ -5853,74 +5815,6 @@ rm -rf testdir ) -./recurs02.at:33: -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 -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 -) -./append04.at:32: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -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 -) - ok -./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 -) ./T-dir01.at:30: mkdir posix (cd posix @@ -5941,52 +5835,42 @@ echo dir/ > list tar xfTv archive list | sort ) -./exclude17.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./append01.at:34: +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 dir -cd dir -echo '*.o' >.cvsignore -tar -cf - --exclude-vcs-ignores . | tar -tf - -) -./append03.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./T-recurse.at:69: +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.1 -genfile --file file.2 +mkdir directory1 directory2 +touch directory1/file directory2/file -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 +cat >F1 <<'_ATEOF' +--no-recursion +directory1/ +_ATEOF + + +cat >F2 <<'_ATEOF' +directory2/ +_ATEOF + + +tar cf archive -T F1 --recursion -T F2 tar tf archive + ) -./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) -./T-recurse.at:30: +68. exclude09.at:37: ./T-recurse.at:30: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -6024,7 +5908,7 @@ tar cf "$a" --no-recursion -T F2A --recursion -T F2B tar tf "$a" ) -./T-recurse.at:69: +./xform02.at:24: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -6033,102 +5917,16 @@ 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 - -) -./shortrec.at:28: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -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 -) - -./exclude01.at:22: -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 -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 +genfile --file file +tar cvf /dev/null file \ + --transform='s/file/other\/name/' \ + --show-transformed-name ) - -72. exclude13.at:39: ok -./verbose.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 --length 10240 -echo Creating the archive -tar cvf - file > archive -echo Testing the archive +72. exclude13.at:39: +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 ) ./exclude02.at:22: @@ -6179,53 +5977,170 @@ rm -rf testdir file1.txt ) -43. recurse.at:21: ok -./exclude04.at:22: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./append03.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 --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 +) + ok +./append05.at:35: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +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 + +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 +) +./shortrec.at:28: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +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 +) +./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 +) +41. verbose.at:26: ok +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 v7" +export TAR_OPTIONS +rm -rf * + +mkdir dir +cd dir +echo '*.o' >.cvsignore +tar -cf - --exclude-vcs-ignores . | tar -tf - +) + + +40. indexfile.at:26: ok +./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 +) -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 +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 * -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 +test -z "`sort < /dev/null 2>&1`" || exit 77 -echo "SUB 3" -tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort +mkdir gitrepo +cd gitrepo -rm -rf testdir +# 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 ) ./append02.at:57: @@ -6260,21 +6175,6 @@ echo Comparing archives cmp archive.1 archive.2 ) -./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 -) -stderr: 79. delete02.at:23: testing deleting a member from stdin archive ... ./delete02.at:26: mkdir v7 @@ -6295,41 +6195,7 @@ tar tf archive2 tar f - --delete 2 < archive > archive3 cmp archive2 archive3) - -50. append01.at:29: ok -78. delete01.at:23: testing deleting a member after a big one ... -./delete01.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 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) -./exclude08.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=excludeme -v etest | sort -) -./add-file.at:33: +./pipe.at:33: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -6338,32 +6204,21 @@ 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 -) +test -z "`sort < /dev/null 2>&1`" || exit 77 -40. indexfile.at:26: ok -./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr -./xform-h.at:39: +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) +./exclude08.at:39: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -6372,45 +6227,28 @@ 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' - - -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' +test -z "`sort < /dev/null 2>&1`" || exit 77 +mkexcltest etest +tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort ) -80. delete03.at:21: testing deleting members with long names ... -./delete03.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./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#" -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 +tar -v -c -f archive --exclude-backups dir ) ./same-order02.at:28: mkdir posix @@ -6437,29 +6275,28 @@ echo separator ls to ) -./same-order01.at:29: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./T-dir00.at:30: +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 * 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 +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 ) -./exclude17.at:24: + +./numeric.at:29: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -6468,30 +6305,54 @@ 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 -cd dir -echo '*.o' >.cvsignore -tar -cf - --exclude-vcs-ignores . | tar -tf - +# 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}' + ) -./xform03.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./exclude17.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 * -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 +mkdir dir +cd dir +echo '*.o' >.cvsignore +tar -cf - --exclude-vcs-ignores . | tar -tf - ) -./pipe.at:33: + +./append.at:24: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -6499,21 +6360,50 @@ TAR_OPTIONS="-H gnu" export TAR_OPTIONS rm -rf * +touch file1 + touch file2 + tar cf archive file1 + tar rf archive file2 + tar tf archive) +78. delete01.at:23: testing deleting a member after a big one ... +./delete01.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 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) +./same-order01.at:29: +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 +genfile -l 1024 -f file1 +genfile -l 1024 -f file2 +tar cf archive file1 file2 + 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) +tar -xf archive --same-order -C directory --warning=no-timestamp || exit 1 + +ls directory|sort +) 81. delete04.at:23: testing deleting a large last member ... ./delete04.at:26: mkdir v7 @@ -6538,8 +6428,8 @@ tar f archive --delete file10 tar tf archive ) -75. exclude16.at:38: ok -./append03.at:26: +80. delete03.at:21: testing deleting members with long names ... +./delete03.at:26: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -6548,95 +6438,16 @@ 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 -) -./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 -) -./exclude07.at:22: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -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#" - -tar -v -c -f archive --exclude-backups dir -) -./append05.at:35: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -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 +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 - -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 +tar -cf archive ./$prefix* && + tar --delete -f archive ./${prefix}5 && + 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 \ 82. delete05.at:27: testing deleting non-existing member ... ./delete05.at:30: mkdir v7 @@ -6656,26 +6467,7 @@ tar --file archive --blocking-factor=20 --delete tre tar tf archive ) - --no-recursion directory1 \ - --recursion directory2 || exit 1 -) -57. xform02.at:21: ./exclude14.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-all=excludeme -v etest | sort -) - ok -41. verbose.at:26: 83. delete06.at:25: testing EOF detection ... +83. delete06.at:25: testing EOF detection ... ./delete06.at:28: mkdir gnu (cd gnu @@ -6695,82 +6487,73 @@ dd if=archive.tar of=trunc.tar bs=$size count=1 2>/dev/null tar --delete 'b/' -f trunc.tar ) - ok -31. T-recurse.at:66: 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) - -./T-dir00.at:30: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./exclude04.at:22: +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 * 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 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 -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 -rm -r directory -) +tar cf archive --exclude=FILE2 \ + --exclude=file1 \ + --ignore-case \ + --exclude=file3 \ + --no-ignore-case \ + --exclude=FILE2 \ + --exclude=file4 \ + testdir +tar tf archive | sort -./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 * +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 -test -z "`sort < /dev/null 2>&1`" || exit 77 +echo "SUB 3" +tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort + +rm -rf testdir -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 ) -./append04.at:32: +./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) +./add-file.at:33: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -6779,45 +6562,33 @@ export TAR_OPTIONS rm -rf * -# Create two empty files: -touch file1 file2 +genfile --file -File +genfile --file foo +genfile --file bar -# Create an archive: -tar cpfW archive.tar file1 file2 +echo 1: +tar -cvf arc.tar --add-file foo --add-file -File -# Verify created archive by listing its content: -tar -tf archive.tar -echo == -# Create another empty file: -touch file3 +echo 2: +tar -cvf arc.tar foo --add-file -File bar -# Append it to the already created archive: -tar rpfW archive.tar file3 -# Verify content of the new archive: -tar -tf archive.tar -) -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 v7" -export TAR_OPTIONS -rm -rf * +cat >input <<'_ATEOF' +foo +--add-file=-File +bar +_ATEOF -mkdir directory -touch directory/file -tar cf archive directory || exit 1 -tar xf archive --warning=no-timestamp || exit 1 + +echo 3: +tar -cvf arc.tar -T input ) ./exclude17.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 * @@ -6826,47 +6597,36 @@ echo '*.o' >.cvsignore tar -cf - --exclude-vcs-ignores . | tar -tf - ) -59. exclude.at:23: ok -./T-recurse.at:30: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./xform-h.at:39: +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 directory1 directory2 -touch directory1/file directory2/file - -cat >F1 <<'_ATEOF' ---no-recursion -directory1/ ---recursion -directory2/ -_ATEOF +mkdir basedir +echo "hello" > basedir/test +ln basedir/test basedir/test_link -cat >F2A <<'_ATEOF' -directory1/ -_ATEOF +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' -cat >F2B <<'_ATEOF' -directory2/ -_ATEOF +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' -a=archive -tar cf "$a" --files-from F1 -tar tf "$a" +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' -a=archive2 -tar cf "$a" --no-recursion -T F2A --recursion -T F2B -tar tf "$a" ) - -./exclude18.at:33: +./exclude01.at:22: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -6878,83 +6638,50 @@ 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 +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/\* -# Create an archive, include VCS: -cd .. -tar -cf gitrepo.tar gitrepo -rm -r gitrepo +tar cf archive --exclude=testdir/dir1/\* \ + --no-wildcards \ + --exclude=testdir/dir2/\* \ + --wildcards \ + --exclude=testdir/dir3/\* \ + testdir +tar tf archive | sort -echo Extract: -tar -xvf gitrepo.tar --exclude-vcs | sort +echo "NEXT" +tar cf archive testdir +tar t "testdir/dir1/*" -f archive | sort -echo -echo List: -tar -tf gitrepo.tar --exclude-vcs | sort +echo "NEXT" +tar cf archive testdir/dir1 +tar t --no-wildcards "testdir/dir1/*" -f archive | sort -echo -echo Diff: -tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort +echo "NEXT" +tar cf archive testdir +tar t --wildcards "testdir/dir1/*" -f archive | sort +rm -rf testdir ) -./delete01.at:26: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +stderr: +./append02.at:57: +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 * -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) - - -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) -./append02.at:57: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile --file file1 -genfile --file file2 +genfile --file file1 +genfile --file file2 # Make sure file timestamps in the archive will not differ MTIME="--mtime=@0" @@ -6976,7 +6703,27 @@ echo Comparing archives cmp archive.1 archive.2 ) -./exclude07.at:22: +./delete06.at:28: +mkdir pax +(cd pax +TEST_TAR_FORMAT=pax +export TEST_TAR_FORMAT +TAR_OPTIONS="-H pax" +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 +) +43. recurse.at:21: 31. T-recurse.at:66: ok +./T-dir01.at:30: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -6985,39 +6732,19 @@ 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 -) -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 * +test -z "`sort < /dev/null 2>&1`" || exit 77 -touch file -ln -s file link 2> /dev/null || ln file link -tar cf archive link -rm link -touch link -tar xf archive +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 ) -./numeric.at:29: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -./exclude08.at:39: + ok +./exclude11.at:39: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -7030,140 +6757,43 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 mkexcltest etest -tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort -) -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}' - +tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort ) -./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) -stderr: - -87. extrac04.at:23: testing extract + fnmatch ... -./extrac04.at:26: -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 -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 -) -52. append03.at:21: ok -26. add-file.at:21: ok -./delete06.at:28: -mkdir pax -(cd pax -TEST_TAR_FORMAT=pax -export TEST_TAR_FORMAT -TAR_OPTIONS="-H pax" -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 +mkexcltest etest +tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort ) -./same-order01.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./recurs02.at:33: +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 * - -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 +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 ) -./exclude17.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr ./delete05.at:30: mkdir oldgnu (cd oldgnu @@ -7182,7 +6812,10 @@ tar --file archive --blocking-factor=20 --delete tre tar tf archive ) -./extrac01.at:26: +57. xform02.at:21: ok +./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr +49. append.at:21: ok +./delete03.at:26: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -7191,51 +6824,77 @@ export TAR_OPTIONS rm -rf * -mkdir directory -touch directory/file -tar cf archive directory || exit 1 -tar xf archive --warning=no-timestamp || exit 1 + +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 ) -./xform-h.at:39: +./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 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' +mkdir dir +cd dir +echo '*.o' >.cvsignore +tar -cf - --exclude-vcs-ignores . | tar -tf - +) +./append04.at:32: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +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 ) +./delete01.at:26: +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 '*.o' >.cvsignore -tar -cf - --exclude-vcs-ignores . | tar -tf - -) -49. append.at:21: ok -88. extrac05.at:30: testing extracting selected members from pax ... -./extrac05.at:38: +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) +50. append01.at:29: ok + + +./exclude08.at:39: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -7244,74 +6903,132 @@ export TAR_OPTIONS rm -rf * -genfile --sparse --file sparsefile 0 ABCD 1M EFGH 2000K IJKL || exit 77 -genfile --length 118 --file jeden -genfile --length 223 --file dwa -genfile --length 517 --file trzy -genfile --length 110 --file cztery - -tar cf archive jeden dwa trzy cztery || exit 1 - -mkdir dir -cd dir -tar xvfT ../archive ../../list --warning=no-timestamp || exit 1 +test -z "`sort < /dev/null 2>&1`" || exit 77 -cd .. +mkexcltest etest +tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort ) -89. extrac06.at:34: testing mode of extracted directories ... -./extrac06.at:37: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +38. T-dir00.at:28: ./exclude18.at:33: +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 * -# Force umask -umask 022 +test -z "`sort < /dev/null 2>&1`" || exit 77 -# Make sure user's umask is honored, even if we are superuser -TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions" +mkdir gitrepo +cd gitrepo -# Create a directory -mkdir directory -chmod 777 directory -genfile --stat=mode:777 directory +# Make an empty VCS directory: +mkdir .svn -# Archive it -tar cf arc directory +# Make a VCS directory with a file: +mkdir .git +touch .git/_A -# Change its permissions ... -chmod 755 directory -genfile --stat=mode:777 directory +# Make a VCS file: +touch .gitignore -# ... and attempt to restore it twice -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory +# Make non-VCS files: +touch .git_B +touch _C -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory +# 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 -# After both restores, the directory mode should be 755 ) -./exclude11.at:39: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix + ok +./xform03.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 * +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 +) +./append03.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 +genfile --file file.1 +genfile --file file.2 -mkexcltest etest -tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort +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 +) +2. pipe.at:29: ./exclude07.at:22: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +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 ) + ok +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 +) + + ./exclude03.at:22: mkdir ustar (cd ustar @@ -7356,6 +7073,80 @@ rm -rf testdir ) +./T-recurse.at:30: +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 + +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" +) +./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 - +) +./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 * + + +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 +) ./append05.at:35: mkdir gnu (cd gnu @@ -7386,43 +7177,122 @@ decho 'resulting archive' tar tf archive ) -2. pipe.at:29: 44. recurs02.at:30: 90. extrac07.at:27: testing extracting symlinks to a read-only dir ... -./extrac07.at:30: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./same-order02.at:28: +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 1024 -f file1 +genfile -l 1024 -f file2 +tar cf archive file1 file2 -echo "test" > $$ -chmod 0 $$ -cat $$ > /dev/null 2>&1 -result=$? -rm -f $$ -test $result -eq 0 && exit 77 +mkdir en +mkdir to +HERE=`pwd` +tar -xf archive --same-order --warning=no-timestamp \ + -C $HERE/en file1 \ + -C $HERE/to file2 || exit 1 -echo Prepare the directory -mkdir dir -genfile -f foo -cd dir -ln -s ../foo . -cd .. -chmod a-w dir +ls en +echo separator +ls to +) +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 v7" +export TAR_OPTIONS +rm -rf * -echo Create the archive -tar cf archive dir || exit 1 +mkdir directory +touch directory/file +tar cf archive directory || exit 1 +tar xf archive --warning=no-timestamp || exit 1 +) +./shortrec.at:28: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -chmod +w dir +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 -echo Extract -mkdir out -tar -C out -xvf archive +rm -r directory +) +87. extrac04.at:23: testing extract + fnmatch ... +./extrac04.at:26: +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 + +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 +) +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) +./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 ) - ok ./delete04.at:26: mkdir oldgnu (cd oldgnu @@ -7446,33 +7316,30 @@ tar f archive --delete file10 tar tf archive ) +83. delete06.at:25: ok -./same-order02.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu + +./delete02.at:26: +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 * -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 +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 -ls to -) -./xform03.at:24: +tar tf archive2 +tar f - --delete 2 < archive > archive3 +cmp archive2 archive3) + +./exclude14.at:39: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -7481,21 +7348,22 @@ 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 + +test -z "`sort < /dev/null 2>&1`" || exit 77 + +mkexcltest etest +tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort ) -./exclude14.at:39: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +88. extrac05.at:30: testing extracting selected members from pax ... +39. T-dir01.at:28: +51. append02.at:54: ok + ok +./exclude11.at:39: +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 * @@ -7503,10 +7371,39 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 mkexcltest etest -tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort +tar -c -f etest.tar --exclude-tag-under=excludeme -v etest | sort ) -45. shortrec.at:25: ok -39. T-dir01.at:28: ./extrac03.at:26: +./extrac01.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 +touch directory/file +tar cf archive directory || exit 1 +tar xf archive --warning=no-timestamp || exit 1 +) +./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 +) +./extrac03.at:26: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -7519,8 +7416,7 @@ tar -cPvf archive directory/../directory echo separator tar -xPvf archive --warning=no-timestamp) - ok -./delete03.at:26: +./numeric.at:29: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -7529,63 +7425,101 @@ 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}' -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 ) -./exclude01.at:22: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +89. extrac06.at:34: testing mode of extracted directories ... +./extrac06.at:37: +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 +# Force umask +umask 022 +# Make sure user's umask is honored, even if we are superuser +TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions" -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/\* +# Create a directory +mkdir directory +chmod 777 directory +genfile --stat=mode:777 directory -tar cf archive --exclude=testdir/dir1/\* \ - --no-wildcards \ - --exclude=testdir/dir2/\* \ - --wildcards \ - --exclude=testdir/dir3/\* \ - testdir -tar tf archive | sort +# Archive it +tar cf arc directory -echo "NEXT" -tar cf archive testdir -tar t "testdir/dir1/*" -f archive | sort +# Change its permissions ... +chmod 755 directory +genfile --stat=mode:777 directory -echo "NEXT" -tar cf archive testdir/dir1 -tar t --no-wildcards "testdir/dir1/*" -f archive | sort +# ... and attempt to restore it twice +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory -echo "NEXT" -tar cf archive testdir -tar t --wildcards "testdir/dir1/*" -f archive | sort +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory -rm -rf testdir +# After both restores, the directory mode should be 755 ) +./extrac05.at:38: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * +genfile --sparse --file sparsefile 0 ABCD 1M EFGH 2000K IJKL || exit 77 +genfile --length 118 --file jeden +genfile --length 223 --file dwa +genfile --length 517 --file trzy +genfile --length 110 --file cztery -./append04.at:32: +tar cf archive jeden dwa trzy cztery || exit 1 + +mkdir dir +cd dir + +tar xvfT ../archive ../../list --warning=no-timestamp || exit 1 + +cd .. +) +./recurs02.at:33: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -7594,23 +7528,102 @@ export TAR_OPTIONS rm -rf * -# Create two empty files: -touch 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 +) +./add-file.at:33: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -# Create an archive: -tar cpfW archive.tar file1 file2 +genfile --file -File +genfile --file foo +genfile --file bar -# Verify created archive by listing its content: -tar -tf archive.tar -echo == -# Create another empty file: -touch file3 +echo 1: +tar -cvf arc.tar --add-file foo --add-file -File -# Append it to the already created archive: -tar rpfW archive.tar file3 +echo 2: +tar -cvf arc.tar foo --add-file -File bar -# Verify content of the new archive: -tar -tf archive.tar + +cat >input <<'_ATEOF' +foo +--add-file=-File +bar +_ATEOF + + +echo 3: +tar -cvf arc.tar -T input +) +75. exclude16.at:38: ok +90. extrac07.at:27: testing extracting symlinks to a read-only dir ... +./extrac07.at:30: +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 + + +echo Prepare the directory +mkdir dir +genfile -f foo +cd dir +ln -s ../foo . +cd .. +chmod a-w dir + +echo Create the archive +tar cf archive dir || exit 1 + +chmod +w dir + +echo Extract +mkdir out +tar -C out -xvf 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 ) 91. extrac08.at:33: testing restoring mode on existing directory ... ./extrac08.at:36: @@ -7631,58 +7644,10 @@ tar xfv test.tar --warning=no-timestamp genfile --stat=mode.777 dir ) -38. T-dir00.at:28: ok -30. T-recurse.at:27: ok -./exclude02.at:22: -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 -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 - -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 - -) -76. exclude17.at:21: ok -./delete01.at:26: +./extrac02.at:28: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -7691,22 +7656,6 @@ 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) -./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 @@ -7728,11 +7677,84 @@ tar cf archive directory || exit 1 tar xf archive --warning=no-timestamp || exit 1 ) +./extrac03.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 +tar -cPvf archive directory/../directory +echo separator +tar -xPvf archive --warning=no-timestamp) +./exclude04.at:22: +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 +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 + +) +./exclude14.at:39: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -51. append02.at:54: ok +test -z "`sort < /dev/null 2>&1`" || exit 77 -93. extrac10.at:29: testing -C and delayed setting of metadata ... +mkexcltest etest +tar -c -f etest.tar --exclude-tag-all=excludeme -v etest | sort +) +54. append05.at:32: ok +45. shortrec.at:25: ok +76. exclude17.at:21: 93. extrac10.at:29: testing -C and delayed setting of metadata ... ./extrac10.at:32: mkdir gnu (cd gnu @@ -7751,6 +7773,8 @@ diff -r d x/d && diff e x/y/e ) + ok +59. exclude.at:23: ok ./exclude08.at:39: mkdir gnu (cd gnu @@ -7765,8 +7789,7 @@ mkexcltest etest tar -c -f etest.tar --exclude-tag=excludeme -v etest | sort -66. exclude07.at:19: ) - ok +) 92. extrac09.at:34: testing extracting even when . and .. are unreadable ... ./extrac09.at:37: mkdir gnu @@ -7801,60 +7824,14 @@ cmp f extract/f || status=$? exit $status ) - -./exclude04.at:22: -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 -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 - -) +52. append03.at:21: ok +66. exclude07.at:19: ok ./delete05.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 * @@ -7867,22 +7844,54 @@ tar --file archive --blocking-factor=20 --delete tre tar tf archive ) +48. same-order02.at:25: ok +88. extrac05.at:30: ok +70. exclude11.at:36: ok +94. extrac11.at:25: testing scarce file descriptors ... -./extrac03.at:26: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./extrac04.at:26: +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 + +touch file1 mkdir directory -tar -cPvf archive directory/../directory -echo separator -tar -xPvf archive --warning=no-timestamp) -83. delete06.at:25: ok -94. extrac11.at:25: testing scarce file descriptors ... +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 oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +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 +) ./extrac11.at:28: mkdir gnu (cd gnu @@ -7950,32 +7959,66 @@ diff -r a dest3/a >/dev/null 2>&1 ) || { diff -r a dest3/a; exit 1; } ) -95. extrac12.at:25: testing extract dot permissions ... -./extrac12.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./delete01.at:26: +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 dst -echo file1 >src/file1 -echo file2 >src/file2 -chmod a-w src +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) +./extrac06.at:37: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -tar --no-recursion -cf archive.tar -C src . ./file1 file2 && -tar -xf archive.tar -C dst && -cmp src/file1 dst/file1 && -cmp src/file2 dst/file2 + +# 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 ) +47. same-order01.at:26: ok ./delete02.at:26: -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 * @@ -7990,8 +8033,10 @@ tar f - --delete 2 < archive > archive3 cmp archive2 archive3) -96. extrac13.at:26: testing extract over symlinks ... -./extrac13.at:29: +stderr: +30. T-recurse.at:27: ok +95. extrac12.at:25: testing extract dot permissions ... +./extrac12.at:28: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -8000,53 +8045,43 @@ export TAR_OPTIONS rm -rf * -mkdir src dst1 dst2 dst3 +mkdir src dst echo file1 >src/file1 -ln -s target1 dst1/file1 -echo target1 >dst1/target1 -echo target1 >target1 +echo file2 >src/file2 +chmod a-w src -tar -cf archive.tar -C src . && -tar -xf archive.tar -C dst1 --warning=no-timestamp && -diff src/file1 dst1/file1 && -diff target1 dst1/target1 +tar --no-recursion -cf archive.tar -C src . ./file1 file2 && +tar -xf archive.tar -C dst && +cmp src/file1 dst/file1 && +cmp src/file2 dst/file2 +) -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 +90. extrac07.at:27: ok -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 -) -./extrac04.at:26: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr + +./delete04.at:26: +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 - -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 +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 ) ./exclude18.at:33: mkdir ustar @@ -8074,7 +8109,6 @@ touch .gitignore # Make non-VCS files: - touch .git_B touch _C @@ -8094,8 +8128,30 @@ echo Diff: tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort -97. extrac14.at:25: testing extract -C symlink ... -./extrac14.at:28: +) + +./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 +) + + +99. extrac16.at:26: testing extract empty directory with -C ... +./extrac16.at:29: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -8104,21 +8160,20 @@ export TAR_OPTIONS rm -rf * -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 -) +mkdir src src/a src/a/b dest +touch src/a/c + +tar -cf archive.tar -C src a && +tar -xf archive.tar -C dest ) + ./xform-h.at:39: -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 * @@ -8142,22 +8197,8 @@ tar tvf archive | sed -n 's/.*test_link link to //p' ) -47. same-order01.at:26: ./exclude11.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-under=excludeme -v etest | sort -) - ok +26. add-file.at:21: ok +44. recurs02.at:30: ok 98. extrac15.at:25: testing extract parent mkdir failure ... ./extrac15.at:28: mkdir gnu @@ -8187,53 +8228,106 @@ else (exit 0) fi ) -stderr: +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 * -./extrac01.at:26: +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 +) +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 * + +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 +) +./extrac02.at:28: mkdir posix (cd posix TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT TAR_OPTIONS="-H posix" export TAR_OPTIONS -88. extrac05.at:30: ./extrac06.at:37: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +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 +) +101. extrac18.at:34: testing keep-old-files ... +./extrac18.at:37: +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 dir +cd dir +echo 'Old file a' > a +echo 'Old file b' > b -# 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 +tar cf ../archive . -# ... and attempt to restore it twice -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory +rm b +echo 'File a' > a -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory +tar -x -k -f ../archive +echo status=$? -# After both restores, the directory mode should be 755 +cat a ) +92. extrac09.at:34: ok +./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 @@ -8241,42 +8335,50 @@ tar cf archive directory || exit 1 tar xf archive --warning=no-timestamp || exit 1 ) -54. append05.at:32: ok -./exclude14.at:39: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./extrac03.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 - ok 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 -) -./extrac08.at:36: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +mkdir directory +tar -cPvf archive directory/../directory +echo separator +tar -xPvf archive --warning=no-timestamp) +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 * -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 + +echo "test" > $$ +chmod 0 $$ +cat $$ > /dev/null 2>&1 +result=$? +rm -f $$ +test $result -eq 0 && 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 ) -./extrac02.at:28: +./exclude02.at:22: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -8285,70 +8387,134 @@ 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 -) -93. extrac10.at:29: ./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr - ok -90. extrac07.at:27: ok -99. extrac16.at:26: testing extract empty directory with -C ... -./extrac16.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 src/a src/a/b dest -touch src/a/c +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +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 + +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 -C src a && -tar -xf archive.tar -C dest ) -./xform03.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +46. numeric.at:18: ok +95. extrac12.at:25: ok +./exclude01.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 * -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 + +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 ) -48. same-order02.at:25: - ok -100. extrac17.at:21: testing name matching/transformation ordering ... -./extrac17.at:34: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +./exclude03.at:22: +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 * -mkdir dir dir/subdir1 dir/subdir2 out -genfile --file dir/subdir1/file1 -genfile --file dir/subdir2/file2 -tar cf dir.tar dir +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +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 "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 "NEXT" +tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort + +rm -rf testdir -tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ - dir/subdir1/ ) 102. extrac19.at:21: testing skip-old-files ... ./extrac19.at:24: @@ -8375,8 +8541,25 @@ cat a ) -101. extrac18.at:34: testing keep-old-files ... -./extrac18.at:37: +./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) +93. extrac10.at:29: ok +100. extrac17.at:21: testing name matching/transformation ordering ... +./extrac17.at:34: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -8385,34 +8568,43 @@ 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 +mkdir dir dir/subdir1 dir/subdir2 out +genfile --file dir/subdir1/file1 +genfile --file dir/subdir2/file2 -tar -x -k -f ../archive -echo status=$? +tar cf dir.tar dir -cat a +tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ + dir/subdir1/ ) -./delete01.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +99. extrac16.at:26: ok +./extrac04.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 * -genfile -l 50000 --file file1 -genfile -l 1024 --file file2 -tar cf archive file1 file2 -./delete04.at:26: + +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 ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -8421,38 +8613,34 @@ 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 +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 ) -tar -f - --delete file2 archout -tar tf archout -tar f archive --delete file2 -cmp archive archout) -./extrac03.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix + +./delete05.at:30: +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 * -mkdir directory -tar -cPvf archive directory/../directory -echo separator -tar -xPvf archive --warning=no-timestamp) -53. append04.at:29: ok +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 +) 103. extrac20.at:21: testing keep-directory-symlink ... ./extrac20.at:24: mkdir v7 @@ -8526,73 +8714,7 @@ clean done ) - - -97. extrac14.at:25: ./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}' - -) - ok -./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 -) - -95. extrac12.at:25: ok -67. exclude08.at:36: ok -./extrac01.at:26: +./delete02.at:26: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -8601,138 +8723,17 @@ export TAR_OPTIONS rm -rf * -mkdir directory -touch directory/file -tar cf archive directory || exit 1 -tar xf archive --warning=no-timestamp || exit 1 -) - -./delete05.at:30: -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 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 -) - -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 - - -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 -) -70. exclude11.at:36: ./exclude03.at:22: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS - ok -rm -rf * - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -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 "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 "NEXT" -tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort - -rm -rf testdir - -) - -99. extrac16.at:26: 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 -) - ok -92. extrac09.at:34: ok +cat archive | tar f - --delete 2 > archive2 +echo separator +tar tf archive2 +tar f - --delete 2 < archive > archive3 +cmp archive2 archive3) +73. exclude14.at:36: ok 105. extrac22.at:19: testing delay-directory-restore on reversed ordering ... ./extrac22.at:29: mkdir v7 @@ -8781,6 +8782,49 @@ # Previous versions of tar would fail here with the following diagnostics: # tar: ./dir2/data2: Cannot unlink: Permission denied ) +./extrac06.at:37: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +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 +) + + +98. extrac15.at:25: 67. exclude08.at:36: ok + ok +stderr: +97. extrac14.at:25: ok ./extrac17.at:34: mkdir oldgnu (cd oldgnu @@ -8799,25 +8843,56 @@ tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ dir/subdir1/ ) -./extrac08.at:36: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar + + +./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr +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 ustar" +TAR_OPTIONS="-H v7" export TAR_OPTIONS rm -rf * -umask 000 +# Test if the directory permissions are restored properly. mkdir dir chmod 755 dir -echo bla > dir/file -tar cf test.tar dir -chmod 700 dir -tar xfv test.tar --warning=no-timestamp +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 ) -./delete02.at:26: +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 +) +./delete04.at:26: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -8826,18 +8901,22 @@ export TAR_OPTIONS rm -rf * -genfile -l 3073 -p zeros --file 1 -cp 1 2 -cp 2 3 -tar cf archive 1 2 3 +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 -cat archive | tar f - --delete 2 > archive2 -echo separator -tar tf archive2 -tar f - --delete 2 < archive > archive3 -cmp archive2 archive3) -107. extrac24.at:18: testing --to-stdout ... -./extrac24.at:29: +) +109. backup01.at:33: testing extracting existing dir with --backup ... +./backup01.at:36: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -8846,15 +8925,15 @@ 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 +unset VERSION_CONTROL +mkdir dir1 dir2 +echo bla > dir1/file1 +tar cf test.tar dir1 dir2 +tar xfv test.tar --backup --warning=no-timestamp ) +80. delete03.at:21: ok -./extrac03.at:26: +./xform03.at:24: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -8863,11 +8942,15 @@ export TAR_OPTIONS rm -rf * -mkdir directory -tar -cPvf archive directory/../directory -echo separator -tar -xPvf archive --warning=no-timestamp) - +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 +) ./extrac19.at:24: mkdir oldgnu (cd oldgnu @@ -8891,151 +8974,55 @@ echo status=$? cat a -./extrac02.at:28: +) +./exclude18.at:33: 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 -) -98. extrac15.at:25: 73. exclude14.at:36: ok -./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 -) - ok - -./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 -) -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 -) -55. xform-h.at:30: ./extrac06.at:37: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS - ok -rm -rf * - +mkdir gitrepo +cd gitrepo -# Force umask -umask 022 +# Make an empty VCS directory: +mkdir .svn -# Make sure user's umask is honored, even if we are superuser -110. difflink.at:17: testing link mismatch ... -./difflink.at:19: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * +# Make a VCS directory with a file: +mkdir .git +touch .git/_A -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 -) -TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions" +# Make a VCS file: +touch .gitignore -# Create a directory -mkdir directory -chmod 777 directory -genfile --stat=mode:777 directory +# Make non-VCS files: +touch .git_B +touch _C -# Archive it -tar cf arc directory +# Create an archive, include VCS: +cd .. +tar -cf gitrepo.tar gitrepo +rm -r gitrepo -# Change its permissions ... -chmod 755 directory -genfile --stat=mode:777 directory +echo Extract: +tar -xvf gitrepo.tar --exclude-vcs | sort -# ... and attempt to restore it twice -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory +echo +echo List: +tar -tf gitrepo.tar --exclude-vcs | sort -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory +echo +echo Diff: +tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort -# After both restores, the directory mode should be 755 ) +94. extrac11.at:25: ok -stderr: -96. extrac13.at:26: ok 108. extrac25.at:18: testing extract over parent dir that is dangling symlink ... ./extrac25.at:21: mkdir v7 @@ -9054,53 +9041,21 @@ ln -s does_not_exist subdir tar -xvf test.tar ) - -./exclude01.at:22: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +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 posix" +TAR_OPTIONS="-H gnu" 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 +genfile --file foo +genfile --file bar +tar -cf archive --label=Test foo bar +tar tf archive ) -84. extrac01.at:23: ok -94. extrac11.at:25: ok ./exclude04.at:22: mkdir posix (cd posix @@ -9123,21 +9078,6 @@ touch testdir/dir/File1 touch testdir/dir/File2 touch testdir/dir/File3 -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 -) touch testdir/dir/File4 tar cf archive --exclude=FILE2 \ @@ -9163,6 +9103,27 @@ rm -rf testdir ) +110. difflink.at:17: testing link mismatch ... +./difflink.at:19: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +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 +) + + 112. label02.at:21: testing multi-volume label ... ./label02.at:24: @@ -9181,119 +9142,180 @@ 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 ) -./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr -./delete01.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +104. extrac21.at:31: ok +./extrac24.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 -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) - -./exclude18.at:33: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +mkdir dir/ +echo TEXT > dir/file +tar cf a.tar dir +rm -r dir +tar --extract --to-stdout --file a.tar +test -d dir +) +./backup01.at:36: +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 * +unset VERSION_CONTROL +mkdir dir1 dir2 +echo bla > dir1/file1 +tar cf test.tar dir1 dir2 +tar xfv test.tar --backup --warning=no-timestamp +) +./xform-h.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 - -mkdir gitrepo -cd gitrepo - -# Make an empty VCS directory: -mkdir .svn +mkdir basedir +echo "hello" > basedir/test +ln basedir/test basedir/test_link -# Make a VCS directory with a file: -mkdir .git -touch .git/_A -# Make a VCS file: -touch .gitignore +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' -# Make non-VCS files: -touch .git_B -touch _C -# Create an archive, include VCS: -cd .. -tar -cf gitrepo.tar gitrepo -rm -r gitrepo +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 Extract: -tar -xvf gitrepo.tar --exclude-vcs | sort -echo -echo List: -tar -tf gitrepo.tar --exclude-vcs | 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 -echo Diff: -tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort +) +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 ) -./exclude02.at:22: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./extrac18.at:37: +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 dir +cd dir +echo 'Old file a' > a +echo 'Old file b' > b -test -z "`sort < /dev/null 2>&1`" || exit 77 +tar cf ../archive . +rm b +echo 'File a' > a -rm -rf testdir -mkdir -p testdir -touch file1.txt -touch testdir/file1.txt -touch testdir/file2 +tar -x -k -f ../archive +echo status=$? -tar cf archive --exclude="file1.txt" \ - testdir -tar tf archive | sort +cat a +) -echo "SUB 1" -tar cf archive --no-anchored \ - --exclude="file1.txt" \ - testdir -tar tf archive | sort +./extrac01.at:26: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -echo "SUB 2" -tar cf archive --anchored \ - --exclude="file1.txt" \ - testdir -tar tf archive | sort +mkdir directory +touch directory/file +tar cf archive directory || exit 1 +tar xf archive --warning=no-timestamp || exit 1 +) +82. delete05.at:27: ok +115. label05.at:24: testing label with non-create option ... +./label05.at:27: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -echo "SUB 3" -tar cf archive testdir file1.txt -tar t "file1.txt" -f archive | sort +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 +) +./extrac02.at:28: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -echo "SUB 4" -tar t --no-anchored "file1.txt" -f archive | sort +touch file +ln -s file link 2> /dev/null || ln file link +tar cf archive link +rm link +touch link +tar xf archive +) +./extrac17.at:34: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * -echo "SUB 5" -tar t --anchored "file1.txt" -f archive | sort +mkdir dir dir/subdir1 dir/subdir2 out +genfile --file dir/subdir1/file1 +genfile --file dir/subdir2/file2 -rm -rf testdir file1.txt +tar cf dir.tar dir +tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ + dir/subdir1/ ) -./delete05.at:30: +./extrac03.at:26: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -9302,17 +9324,40 @@ export TAR_OPTIONS rm -rf * -genfile -l 1024 -f en -genfile -l 1024 -f to +mkdir directory +tar -cPvf archive directory/../directory +echo separator +tar -xPvf archive --warning=no-timestamp) +./append04.at:32: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * -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 +# 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 ) -58. xform03.at:21: 114. label04.at:27: testing label with non-create option ... -./label04.at:30: +96. extrac13.at:26: ok + +./delete01.at:26: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -9321,16 +9366,13 @@ 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 -) - ok +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) 113. label03.at:27: testing test-label option ... ./label03.at:30: mkdir gnu @@ -9364,7 +9406,7 @@ decho "# Test label: wildcards" tar --test-label --file=iamanarchive --wildcards '*label'; echo $? ) -./extrac24.at:29: +./label01.at:24: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -9373,54 +9415,100 @@ 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 --file foo +genfile --file bar +tar -cf archive --label=Test foo bar +tar tf archive ) -86. extrac03.at:23: - ok -115. label05.at:24: testing label with non-create option ... -./label05.at:27: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./extrac22.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 * -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 + +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 ) +./extrac25.at:21: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -./extrac17.at:34: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +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 +) +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 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 +ckmtime || exit 77 -tar cf dir.tar dir +mkdir directory +$as_ln_s foo directory/bar -tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ - dir/subdir1/ -) +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 +) 116. incremental.at:23: testing incremental ... ./incremental.at:26: mkdir gnu @@ -9460,14 +9548,40 @@ echo y >structure/file tar cfv archive --listed=list structure ) -./extrac02.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu + +./backup01.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 * + +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: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +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 +) + ./extrac19.at:24: mkdir ustar (cd ustar @@ -9491,16 +9605,7 @@ echo status=$? cat a - -touch file -ln -s file link 2> /dev/null || ln file link -tar cf archive link -rm link -touch link -tar xf archive ) -) - ./extrac08.at:36: mkdir posix (cd posix @@ -9519,87 +9624,44 @@ tar xfv test.tar --warning=no-timestamp genfile --stat=mode.777 dir ) -./backup01.at:36: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./extrac06.at:37: +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 * -unset VERSION_CONTROL -mkdir dir1 dir2 -echo bla > dir1/file1 -tar cf test.tar dir1 dir2 -tar xfv test.tar --backup --warning=no-timestamp -) -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 +# 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 -$as_ln_s foo directory/bar +chmod 777 directory +genfile --stat=mode:777 directory -tar -cf archive.0 -g db directory -rm directory/bar -tar -cf archive.1 -g db directory +# Archive it +tar cf arc directory -mv directory orig +# Change its permissions ... +chmod 755 directory +genfile --stat=mode:777 directory -tar xvfg archive.0 /dev/null --warning=no-timestamp -echo separator -tar xvfg archive.1 /dev/null --warning=no-timestamp -) +# ... and attempt to restore it twice +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory -80. delete03.at:21: ok -./delete04.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory -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 +# After both restores, the directory mode should be 755 ) -104. extrac21.at:31: ./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 118. incr02.at:32: testing restoring timestamps from incremental ... ./incr02.at:35: mkdir gnu @@ -9647,46 +9709,97 @@ # Check the timestamp genfile --stat=mtime dir/subdir1 | diff ts - ) - -119. listed01.at:26: testing --listed for individual files ... -./listed01.at:29: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +79. delete02.at:23: ok +./extrac04.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 * -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* +test -z "`sort < /dev/null 2>&1`" || exit 77 -tar tf archive.1 || exit 1 +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 +) +./extrac24.at:29: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * -sleep 2 +mkdir dir/ +echo TEXT > dir/file +tar cf a.tar dir +rm -r dir +tar --extract --to-stdout --file a.tar +test -d dir +) +110. difflink.at:17: ok +./extrac23.at:32: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -genfile --length 10240 --pattern zeros --file directory/file2 +# 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 -echo "separator" -cp listing listing.old -tar --create \ - --file=archive.2 \ - --listed-incremental=listing \ - directory/file* || exit 1 +# 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 +) +./label05.at:27: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -tar tf archive.2 || exit 1 +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 ) -110. difflink.at:17: ok -./delete02.at:26: +84. extrac01.at:23: ok +./delete04.at:26: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -9695,16 +9808,20 @@ export TAR_OPTIONS rm -rf * -genfile -l 3073 -p zeros --file 1 -cp 1 2 -cp 2 3 -tar cf archive 1 2 3 +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 -cat archive | tar f - --delete 2 > archive2 -echo separator -tar tf archive2 -tar f - --delete 2 < archive > archive3 -cmp archive2 archive3) +) 121. listed03.at:24: testing incremental dump when the parent directory is unreadable ... ./listed03.at:27: mkdir gnu @@ -9742,24 +9859,45 @@ cat err >&2 exit $status ) -./extrac25.at:21: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +86. extrac03.at:23: ok +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 oldgnu" +TAR_OPTIONS="-H gnu" 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 + +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 ) -./extrac23.at:32: +./label04.at:30: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -9768,83 +9906,92 @@ 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 +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 ) -./label02.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./extrac17.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 * -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 dir dir/subdir1 dir/subdir2 out +genfile --file dir/subdir1/file1 +genfile --file dir/subdir2/file2 -./extrac18.at:37: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +tar cf dir.tar dir + +tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ + dir/subdir1/ +) +./exclude18.at:33: +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 -cd dir -echo 'Old file a' > a -echo 'Old file b' > b -tar cf ../archive . +test -z "`sort < /dev/null 2>&1`" || exit 77 -rm b -echo 'File a' > a +mkdir gitrepo +cd gitrepo -tar -x -k -f ../archive -echo status=$? +# 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 -cat a ) -./label04.at:30: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./label01.at:24: +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 * -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 +genfile --file foo +genfile --file bar +tar -cf archive --label=Test foo bar +tar tf archive ) 120. listed02.at:28: testing working --listed ... ./listed02.at:31: @@ -9916,6 +10063,7 @@ echo Final files: find tart -print | sort 2>/dev/null ) +stderr: 122. listed04.at:26: testing --listed-incremental and --one-file-system ... ./listed04.at:29: mkdir gnu @@ -9934,45 +10082,9 @@ tar --one-file-system -cvf archive.tar -g archive.incr dir || exit tar -tf archive.tar || exit ) -./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 -) +85. extrac02.at:23: ok -./extrac24.at:29: +./extrac25.at:21: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -9981,105 +10093,25 @@ 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 -) -82. delete05.at:27: ./backup01.at:36: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * +mkdir subdir +touch subdir/a.txt +tar -cf test.tar subdir/a.txt -unset VERSION_CONTROL -mkdir dir1 dir2 -echo bla > dir1/file1 -tar cf test.tar dir1 dir2 -tar xfv test.tar --backup --warning=no-timestamp +rm -rf subdir +ln -s does_not_exist subdir +tar -xvf test.tar ) - ok -123. listed05.at:33: testing --listed-incremental and remounted directories ... -./listed05.at:36: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -ckmtime || exit 77 - -echo "test" > $$ -chmod 0 $$ -cat $$ > /dev/null 2>&1 -result=$? -rm -f $$ -test $result -eq 0 || exit 77 - -options="-C tartest --create --one-file-system --verbose" -rm -rf archive-01.snar archive-01.tar tartest subdir -# Create initial structure -mkdir tartest -echo "hi" > tartest/top-level-file -mkdir tartest/subdir -echo "hi" > tartest/subdir/subdir-file - -echo "# Level 0" -tar $options --file archive-0.tar --listed-incremental=archive-0.snar . - -echo "# Remount" -mv tartest/subdir . -mkdir tartest/subdir -mount -t ramfs none tartest/subdir || exit 77 -tar -C subdir -c -f - . | tar -C tartest/subdir -x -f - - -echo "# Level 1" -cp archive-0.snar archive-1.snar -tar $options --file archive-1.tar --listed-incremental=archive-1.snar . - -umount tartest/subdir -) -46. numeric.at:18: ./extrac04.at:26: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * +./xform03.at:24: sed "/tar: Removing leading \`\/*\/' from/d" stderr -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 -) - ok 78. delete01.at:23: ok ./extrac22.at:29: -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 * @@ -10162,69 +10194,49 @@ tar -xf archive.2 -g db --warning=no-timestamp find directory | sort ) -./extrac19.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +123. listed05.at:33: testing --listed-incremental and remounted directories ... +./listed05.at:36: +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 * -mkdir dir -cd dir -echo 'Old file a' > a -echo 'Old file b' > b - -tar cf ../archive . +ckmtime || exit 77 -rm b -echo 'File a' > a +echo "test" > $$ +chmod 0 $$ +cat $$ > /dev/null 2>&1 +result=$? +rm -f $$ +test $result -eq 0 || exit 77 -tar -x --skip-old-files -f ../archive -echo status=$? +options="-C tartest --create --one-file-system --verbose" +rm -rf archive-01.snar archive-01.tar tartest subdir -cat a -) -./extrac17.at:34: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * +# Create initial structure +mkdir tartest +echo "hi" > tartest/top-level-file +mkdir tartest/subdir +echo "hi" > tartest/subdir/subdir-file -mkdir dir dir/subdir1 dir/subdir2 out -genfile --file dir/subdir1/file1 -genfile --file dir/subdir2/file2 +echo "# Level 0" +tar $options --file archive-0.tar --listed-incremental=archive-0.snar . -tar cf dir.tar dir +echo "# Remount" +mv tartest/subdir . +mkdir tartest/subdir +mount -t ramfs none tartest/subdir || exit 77 +tar -C subdir -c -f - . | tar -C tartest/subdir -x -f - -tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ - dir/subdir1/ -) -85. extrac02.at:23: ok -./extrac08.at:36: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * +echo "# Level 1" +cp archive-0.snar archive-1.snar +tar $options --file archive-1.tar --listed-incremental=archive-1.snar . -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 +umount tartest/subdir ) - - 125. incr04.at:29: testing proper icontents initialization ... ./incr04.at:34: mkdir gnu @@ -10251,7 +10263,89 @@ echo "Incremental dump" tar cvf a1.tar -g a.sna a ) -./label01.at:24: +58. xform03.at:21: ok +126. incr05.at:21: testing incremental dumps with -C ... +./incr05.at:24: +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 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 . +) + + +./extrac18.at:37: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +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 +) +./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 $? +) +./backup01.at:36: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -10260,12 +10354,45 @@ export TAR_OPTIONS rm -rf * -genfile --file foo -genfile --file bar -tar -cf archive --label=Test foo bar -tar tf archive +unset VERSION_CONTROL +mkdir dir1 dir2 +echo bla > dir1/file1 +tar cf test.tar dir1 dir2 +tar xfv test.tar --backup --warning=no-timestamp ) -./exclude03.at:22: +127. incr06.at:21: testing incremental dumps of nested directories ... +./incr06.at:24: +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 dir +mkdir dir/sub +mkdir dir/sub/a +mkdir dir/sub/b +genfile --file dir/file1 +genfile --file dir/sub/file2 +genfile --file dir/sub/a/file3 + +echo Level 0 . sub +tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub +echo Level 0 sub . +tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . + +mkdir dir/c +genfile --file dir/sub/b/file4 + +echo Level 1 . sub +tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub +echo Level 1 sub . +tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . +) +./exclude04.at:22: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -10279,38 +10406,41 @@ 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/\* +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*f*1' \ - --no-wildcards-match-slash \ - --exclude='testdir*f*2' \ - --wildcards-match-slash \ - --exclude='testdir*f*3' \ +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 --wildcards 'testdir/*f*1' -f archive | sort +tar t --wildcards --wildcards-match-slash '*File2' -f archive | sort -echo "NEXT" -tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort +echo "SUB 2" +tar t --wildcards --wildcards-match-slash --ignore-case '*File2' -f archive | sort -echo "NEXT" -tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort +echo "SUB 3" +tar t --wildcards --wildcards-match-slash --no-ignore-case '*File2' -f archive | sort rm -rf testdir ) -126. incr05.at:21: testing incremental dumps with -C ... -./incr05.at:24: +122. listed04.at:26: ok +./extrac08.at:36: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -10319,92 +10449,52 @@ export TAR_OPTIONS rm -rf * -ckmtime || exit 77 +umask 000 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 . +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 ) -./label05.at:27: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu + +./label04.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 * exec <&- genfile --file file decho "# Create volume" -tar -c -f archive file +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 file +tar -rf archive --label='New volume' file ) - ---- - 2026-10-05 04:32:18.986402839 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/123/stderr 2026-10-05 04:32:18.981487690 +0000 -@@ -1,4 +1 @@ --tar: .: Directory is new --tar: ./subdir: Directory is new --tar: ./subdir: directory is on a different filesystem; not dumped - -./label02.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./extrac17.at:34: +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 * -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 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 -mkdir subdir -touch subdir/a.txt -tar -cf test.tar subdir/a.txt +tar cf dir.tar dir -rm -rf subdir -ln -s does_not_exist subdir -tar -xvf test.tar +tar -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ + dir/subdir1/ ) ---- - 2026-10-05 04:32:18.989449881 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/123/stdout 2026-10-05 04:32:18.985487690 +0000 -@@ -1,10 +1 @@ --# Level 0 --./ --./subdir/ --./top-level-file --./subdir/subdir-file --# Remount --# Level 1 --./ --./subdir/ - 128. incr07.at:18: testing incremental restores with -C ... ./incr07.at:40: mkdir gnu @@ -10452,32 +10542,46 @@ test -d dirA && echo >&2 "toplevel dirA exists" exit 0 ) -./extrac18.at:37: +--- - 2025-09-01 22:15:26.844743385 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/123/stderr 2025-09-01 22:15:26.822843232 +0000 +@@ -1,4 +1 @@ +-tar: .: Directory is new +-tar: ./subdir: Directory is new +-tar: ./subdir: directory is on a different filesystem; not dumped + +./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 -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=$? +mkdir dir/ +echo TEXT > dir/file +tar cf a.tar dir +rm -r dir +tar --extract --to-stdout --file a.tar +test -d dir +) +./label02.at:24: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * -cat a +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 ) -./label04.at:30: +./label05.at:27: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -10489,14 +10593,26 @@ exec <&- genfile --file file decho "# Create volume" -tar -c -f archive --label='New volume' file +tar -c -f archive file decho "# Update: wrong label" tar -rf archive --label='My volume' file; echo $? decho "# Update: right label" -tar -rf archive --label='New volume' file +tar -rf archive file ) -127. incr06.at:21: testing incremental dumps of nested directories ... -./incr06.at:24: +--- - 2025-09-01 22:15:26.852453337 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/123/stdout 2025-09-01 22:15:26.842843383 +0000 +@@ -1,10 +1 @@ +-# Level 0 +-./ +-./subdir/ +-./top-level-file +-./subdir/subdir-file +-# Remount +-# Level 1 +-./ +-./subdir/ + +./extrac06.at:37: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -10505,86 +10621,35 @@ export TAR_OPTIONS rm -rf * -ckmtime || exit 77 -mkdir dir -mkdir dir/sub -mkdir dir/sub/a -mkdir dir/sub/b -genfile --file dir/file1 -genfile --file dir/sub/file2 -genfile --file dir/sub/a/file3 - -echo Level 0 . sub -tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub -echo Level 0 sub . -tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . - -mkdir dir/c -genfile --file dir/sub/b/file4 -echo Level 1 . sub -tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub -echo Level 1 sub . -tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . -) -./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 -122. listed04.at:26: ) - 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 * +# Force umask +umask 022 -ckmtime || exit 77 +# Make sure user's umask is honored, even if we are superuser +TAR_OPTIONS="$TAR_OPTIONS --no-same-permissions" +# Create a directory mkdir directory -$as_ln_s foo directory/bar +chmod 777 directory +genfile --stat=mode:777 directory -tar -cf archive.0 -g db directory -rm directory/bar -tar -cf archive.1 -g db directory +# Archive it +tar cf arc directory -mv directory orig +# Change its permissions ... +chmod 755 directory +genfile --stat=mode:777 directory -tar xvfg archive.0 /dev/null --warning=no-timestamp -echo separator -tar xvfg archive.1 /dev/null --warning=no-timestamp -) -./backup01.at:36: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * +# ... and attempt to restore it twice +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory -unset VERSION_CONTROL -mkdir dir1 dir2 -echo bla > dir1/file1 -tar cf test.tar dir1 dir2 -tar xfv test.tar --backup --warning=no-timestamp -) +tar xf arc directory --warning=no-timestamp +genfile --stat=mode:777 directory -./exclude18.at:33: +# After both restores, the directory mode should be 755 +) +./exclude03.at:22: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -10596,95 +10661,37 @@ 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 +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 Extract: -tar -xvf gitrepo.tar --exclude-vcs | sort +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 -echo List: -tar -tf gitrepo.tar --exclude-vcs | sort +echo "NEXT" +tar cf archive testdir +tar t --wildcards 'testdir/*f*1' -f archive | sort -echo -echo Diff: -tar -dvf gitrepo.tar --exclude-vcs gitrepo | sort +echo "NEXT" +tar t --wildcards --no-wildcards-match-slash 'testdir/*f*1' -f archive | sort -) -./label03.at:30: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * +echo "NEXT" +tar t --wildcards --wildcards-match-slash 'testdir/*f*1' -f archive | sort -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 $? -) -123. listed05.at:33: skipped (listed05.at:36) -./delete04.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * +rm -rf testdir -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 ) 129. incr08.at:38: testing filename normalization ... ./incr08.at:41: @@ -10714,68 +10721,124 @@ DIR=`pwd` tar -cvf ../foo.tar --listed-incremental=../foo.snar -C foo . $DIR ) -./extrac17.at:34: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./exclude02.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 dir/subdir1 dir/subdir2 out -genfile --file dir/subdir1/file1 -genfile --file dir/subdir2/file2 -tar cf dir.tar dir +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +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 + +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 -x -v -f dir.tar -C out --strip-components=2 --warning=no-timestamp \ - dir/subdir1/ ) -./exclude01.at:22: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./extrac19.at:24: +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 +cd dir +echo 'Old file a' > a +echo 'Old file b' > b -test -z "`sort < /dev/null 2>&1`" || exit 77 +tar cf ../archive . +rm b +echo 'File a' > a -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 -x --skip-old-files -f ../archive +echo status=$? -tar cf archive --exclude=testdir/dir1/\* \ - --no-wildcards \ - --exclude=testdir/dir2/\* \ - --wildcards \ - --exclude=testdir/dir3/\* \ - testdir -tar tf archive | sort +cat a +) +111. label01.at:21: ok -echo "NEXT" -tar cf archive testdir -tar t "testdir/dir1/*" -f archive | sort +121. listed03.at:24: ok +./extrac25.at:21: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * -echo "NEXT" -tar cf archive testdir/dir1 -tar t --no-wildcards "testdir/dir1/*" -f archive | sort +mkdir subdir +touch subdir/a.txt +tar -cf test.tar subdir/a.txt -echo "NEXT" -tar cf archive testdir -tar t --wildcards "testdir/dir1/*" -f archive | sort +rm -rf subdir +ln -s does_not_exist subdir +tar -xvf test.tar +) +./incr01.at:30: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -rm -rf testdir +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 ) +55. xform-h.at:30: ok +100. extrac17.at:21: ok 130. incr09.at:26: testing incremental with alternating -C ... ./incr09.at:29: mkdir gnu @@ -10802,8 +10865,7 @@ decho B tar -cvf foo.tar --incremental -C foo . -C `pwd` toplevel_file -C bar . ) -79. delete02.at:23: ok -./extrac19.at:24: +./extrac24.at:29: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -10812,22 +10874,22 @@ 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 +mkdir dir/ +echo TEXT > dir/file +tar cf a.tar dir +rm -r dir +tar --extract --to-stdout --file a.tar +test -d dir +./extrac04.at:26: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * ) -./exclude04.at:22: +./backup01.at:36: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -10836,46 +10898,31 @@ 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 -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 +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 ) -111. label01.at:21: ok -./label05.at:27: +./extrac22.at:29: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -10884,15 +10931,51 @@ 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 + +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 ) +77. exclude18.at:30: ok + +91. extrac08.at:33: ok +115. label05.at:24: ok + + +123. listed05.at:33: 114. label04.at:27: ok 131. incr10.at:18: testing concatenated incremental archives (deletes) ... ./incr10.at:28: mkdir gnu @@ -10918,16 +11001,7 @@ mkdir out tar -xvf full.tar -g /dev/null -C out ) -91. extrac08.at:33: ok - -./extrac06.at:37: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * +81. delete04.at:23: ok 132. incr11.at:25: testing concatenated incremental archives (renames) ... ./incr11.at:28: mkdir gnu @@ -10958,36 +11032,30 @@ decho List find out | sort ) +./extrac18.at:37: +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 'Old file a' > a +echo 'Old file b' > b -# 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 +tar cf ../archive . -# ... and attempt to restore it twice -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory +rm b +echo 'File a' > a -tar xf arc directory --warning=no-timestamp -genfile --stat=mode:777 directory +tar -x -k -f ../archive +echo status=$? -# After both restores, the directory mode should be 755 +cat a ) - ./incr05.at:24: mkdir oldgnu (cd oldgnu @@ -11010,8 +11078,11 @@ echo Level 1 tar -c -f archive.tar -g db -C dir -v --warning=no-new-dir . ) -121. listed03.at:24: ok -./extrac04.at:26: +112. label02.at:21: skipped (listed05.at:36) + + ok +133. filerem01.at:36: testing file removed as we read it ... +./filerem01.at:39: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -11020,22 +11091,67 @@ export TAR_OPTIONS rm -rf * +mkdir dir +mkdir dir/sub +genfile --file dir/file1 +genfile --file dir/sub/file2 -test -z "`sort < /dev/null 2>&1`" || exit 77 +genfile --run --checkpoint=3 --unlink dir/file1 -- \ + tar --blocking-factor=1 -c -f archive.tar \ + --listed-incremental db -v dir >/dev/null +) +stderr: +89. extrac06.at:34: ok +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/ -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 + +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 gnu" +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 ) + + +109. backup01.at:33: ok ./extrac23.at:32: mkdir ustar (cd ustar @@ -11064,132 +11180,45 @@ chmod 700 dir find dir ) -./exclude02.at:22: -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 -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 - -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 - -) -112. label02.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 -) -./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 -) -./extrac18.at:37: -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 -k -f ../archive -echo status=$? +./incr08.at:41: +DIR=`pwd`/gnu/tartest +sed "s|$DIR|ABSPATH|" stdout -cat a -) -114. label04.at:27: ok -./extrac25.at:21: +./label03.at:30: 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 +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 $? ) -133. filerem01.at:36: testing file removed as we read it ... -./filerem01.at:39: +135. dirrem01.at:38: testing directory removed before reading ... +./dirrem01.at:41: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -11203,12 +11232,19 @@ genfile --file dir/file1 genfile --file dir/sub/file2 -genfile --run --checkpoint=3 --unlink dir/file1 -- \ +case "$TEST_TAR_FORMAT" in +posix) CPT=5;; +gnu) CPT=3;; +*) exit 77 +esac + +genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \ tar --blocking-factor=1 -c -f archive.tar \ - --listed-incremental db -v dir >/dev/null + --listed-incremental db \ + --warning=no-file-changed \ + -v dir >/dev/null ) -134. filerem02.at:26: testing toplevel file removed ... -./filerem02.at:29: +./extrac22.at:29: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -11217,26 +11253,6 @@ 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 -) -./extrac22.at:29: -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 $$ @@ -11275,9 +11291,7 @@ # Previous versions of tar would fail here with the following diagnostics: # tar: ./dir2/data2: Cannot unlink: Permission denied ) - - -102. extrac19.at:21: ./incr01.at:30: +./exclude01.at:22: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -11286,26 +11300,44 @@ export TAR_OPTIONS rm -rf * -ckmtime || exit 77 -mkdir directory -$as_ln_s foo directory/bar +test -z "`sort < /dev/null 2>&1`" || exit 77 -tar -cf archive.0 -g db directory -rm directory/bar - ok -tar -cf archive.1 -g db directory -mv directory orig +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 xvfg archive.0 /dev/null --warning=no-timestamp -echo separator -tar xvfg archive.1 /dev/null --warning=no-timestamp +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 ) -100. extrac17.at:21: ok -135. dirrem01.at:38: testing directory removed before reading ... -./dirrem01.at:41: +137. rename01.at:24: testing renamed dirs in incrementals ... +./rename01.at:27: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -11314,24 +11346,38 @@ export TAR_OPTIONS rm -rf * -mkdir dir -mkdir dir/sub -genfile --file dir/file1 -genfile --file dir/sub/file2 -case "$TEST_TAR_FORMAT" in -posix) CPT=5;; -gnu) CPT=3;; -*) exit 77 -esac +test -z "`sort < /dev/null 2>&1`" || exit 77 -genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \ - tar --blocking-factor=1 -c -f archive.tar \ - --listed-incremental db \ - --warning=no-file-changed \ - -v dir >/dev/null + +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 ) -115. label05.at:24: ok +130. incr09.at:26: ok 136. dirrem02.at:31: testing explicitly named directory removed before reading ... ./dirrem02.at:34: mkdir gnu @@ -11359,10 +11405,7 @@ --warning=no-file-changed \ -v dir dir/sub >/dev/null ) -109. backup01.at:33: ok -stderr: -137. rename01.at:24: testing renamed dirs in incrementals ... -./rename01.at:27: +./extrac25.at:21: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -11371,100 +11414,85 @@ export TAR_OPTIONS rm -rf * +mkdir subdir +touch subdir/a.txt +tar -cf test.tar subdir/a.txt -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 +rm -rf subdir +ln -s does_not_exist subdir +tar -xvf test.tar +) +107. extrac24.at:18: ok -echo "Creating base archive" -tar -g incr -cf arch.1 -v foo -mv foo/bar foo/baz +./append04.at:32: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -echo "Creating incremental archive" -tar -g incr -cf arch.2 -v foo +# Create two empty files: +touch file1 file2 -mv foo old +# Create an archive: +tar cpfW archive.tar file1 file2 -tar xfg arch.1 /dev/null +# Verify created archive by listing its content: +tar -tf archive.tar +echo == +# Create another empty file: +touch file3 -echo "Begin directory listing 1" -find foo | sort -echo "End directory listing 1" +# Append it to the already created archive: +tar rpfW archive.tar file3 -tar xfg arch.2 /dev/null -echo Begin directory listing 2 -find foo | sort -echo End directory listing 2 +# Verify content of the new archive: +tar -tf archive.tar ) - -130. incr09.at:26: 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: - ok -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/ -62. exclude03.at:19: ok -./incr06.at:24: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +63. exclude04.at:19: ok +140. rename04.at:27: testing renamed directory containing subdirectories ... +./rename04.at:30: +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 * -ckmtime || exit 77 -mkdir dir -mkdir dir/sub -mkdir dir/sub/a -mkdir dir/sub/b -genfile --file dir/file1 -genfile --file dir/sub/file2 -genfile --file dir/sub/a/file3 -echo Level 0 . sub -tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub -echo Level 0 sub . -tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . +test -z "`sort < /dev/null 2>&1`" || exit 77 -mkdir dir/c -genfile --file dir/sub/b/file4 -echo Level 1 . sub -tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub -echo Level 1 sub . -tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . -) -./incr08.at:41: -DIR=`pwd`/gnu/tartest -sed "s|$DIR|ABSPATH|" stdout +decho Creating directory structure +mkdir directory +mkdir directory/subdir +genfile --file=directory/file + +decho Creating initial archive +tar -cf archive.1 -g db.1 directory + +decho Renaming +mv directory dir + +decho Creating incremental archive +cp db.1 db.2 +tar -cf archive.2 -g db.2 dir + +mv dir orig -107. extrac24.at:18: 138. rename02.at:24: testing move between hierarchies ... +decho First restore +tar -xf archive.1 -g db.1 +find directory | sort + +decho Second restore +tar -xf archive.2 -g db.2 +find dir | sort +) +138. rename02.at:24: testing move between hierarchies ... ./rename02.at:27: mkdir gnu (cd gnu @@ -11509,33 +11537,6 @@ find foo | sort echo End directory listing 2 ) -./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 . -) - ok - -81. delete04.at:23: ok -77. exclude18.at:30: ok -stdout: 139. rename03.at:23: testing cyclic renames ... ./rename03.at:26: mkdir gnu @@ -11593,54 +11594,50 @@ find foo | sort echo End directory listing 2 ) -101. extrac18.at:34: ./incr07.at:40: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +143. chtype.at:27: testing changed file types in incrementals ... +./chtype.at:30: +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 * -ckmtime || exit 77 -mkdir dirA -echo 'a' > dirA/a -echo 'a' > dirA/b -decho C0 -tar -g test.snar -vcf test.0.tar dirA +test -z "`sort < /dev/null 2>&1`" || exit 77 -echo 'a' > dirA/c -decho C1 -tar -g test.snar -vcf test.1.tar dirA -rm -f dirA/a -decho C2 -tar -g test.snar -vcf test.2.tar dirA +install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77 +mkdir directory/a +genfile --file directory/a/a -mkdir ext -rm -rf dirA +echo First backup +tar --create --file=archive.1 --listed-incremental=db.1 directory -decho E0 -tar -g test.snar -vxf test.0.tar -C ext/ -decho E1 -tar -g test.snar -vxf test.1.tar -C ext/ +sleep 2 -decho E2 -tar -g test.snar -vxf test.2.tar -C ext/ +# 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 -mkdir ext/dirA/dirB -touch ext/dirA/dirB/file +echo Second backup +tar --create --file=archive.2 --listed-incremental=db.2 directory -decho E3 -tar -g test.snar -vxf test.2.tar -C ext/ +# Delete a +rm -r directory -echo FIN -test -d dirA && echo >&2 "toplevel dirA exists" -exit 0 +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 ) - ok -./extrac25.at:21: + +142. rename06.at:19: testing chained renames ... +./rename06.at:29: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -11649,42 +11646,39 @@ 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 -) -./filerem01.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 -mkdir dir -mkdir dir/sub -genfile --file dir/file1 -genfile --file dir/sub/file2 +decho Creating directory structure +mkdir test test/d1 test/d2 +genfile --file test/d1/file1 +genfile --file test/d2/file2 -genfile --run --checkpoint=3 --unlink dir/file1 -- \ - tar --blocking-factor=1 -c -f archive.tar \ - --listed-incremental db -v dir >/dev/null -) +decho First dump +tar -c -g 0.snar -C test -f backup0.tar . -./incr08.at:41: -DIR=`pwd`/gnu/tartest -sed "/tar: Removing leading \`\/*\/' from/d;s|$DIR|ABSPATH|" stderr -89. extrac06.at:34: ok -131. incr10.at:18: - ok -stderr: -140. rename04.at:27: testing renamed directory containing subdirectories ... -./rename04.at:30: +decho Altering directory structure +genfile --file test/d2/file3 +mv test/d1 test/d3 +mv test/d2 test/d1 + +decho Second dump +cp 0.snar 1.snar +tar -vc -g 1.snar -C test -f backup1.tar . + +mkdir test1 + +decho First extract +tar -C test1 -x -g /dev/null -f backup0.tar + +decho Second extract +tar -C test1 -x -g /dev/null -f backup1.tar + +decho Resulting directory +find test1 | sort +) +141. rename05.at:24: testing renamed subdirectories ... +./rename05.at:27: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -11706,6 +11700,7 @@ tar -cf archive.1 -g db.1 directory decho Renaming +mv directory/subdir directory/subdir.0 mv directory dir decho Creating incremental archive @@ -11715,83 +11710,87 @@ 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 ) -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: -87. extrac04.at:23: - ok - -./filerem02.at:29: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./extrac20.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 * -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 -) -./label03.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 -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 $? -) +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 +} -stdout: -./dirrem01.at:41: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -./extrac23.at:32: +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 +) +./filerem01.at:39: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -11800,88 +11799,70 @@ 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 +mkdir dir/sub +genfile --file dir/file1 +genfile --file dir/sub/file2 -# 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 +genfile --run --checkpoint=3 --unlink dir/file1 -- \ + tar --blocking-factor=1 -c -f archive.tar \ + --listed-incremental db -v dir >/dev/null ) -141. rename05.at:24: testing renamed subdirectories ... -./rename05.at:27: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +87. extrac04.at:23: ok +144. ignfail.at:23: testing ignfail ... +./ignfail.at:26: +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 * +# The test is meaningless for super-user. -test -z "`sort < /dev/null 2>&1`" || exit 77 +echo "test" > $$ +chmod 0 $$ +cat $$ > /dev/null 2>&1 +result=$? +rm -f $$ +test $result -eq 0 && exit 77 -decho Creating directory structure +touch file mkdir directory -mkdir directory/subdir -genfile --file=directory/file - -decho Creating initial archive -tar -cf archive.1 -g db.1 directory - -decho Renaming -mv directory/subdir directory/subdir.0 -mv directory dir +touch directory/file -decho Creating incremental archive -cp db.1 db.2 -tar -cf archive.2 -g db.2 dir +echo 1>&2 ----- +chmod 000 file +tar cf archive file +status=$? +chmod 600 file +test $status = 2 || exit 1 -mv dir orig +echo 1>&2 ----- +chmod 000 file +tar cf archive --ignore-failed-read file || exit 1 +status=$? +chmod 600 file +test $status = 0 || exit 1 -decho First restore -tar -xf archive.1 -g db.1 --warning=no-timestamp -find directory | sort +echo 1>&2 ----- +chmod 000 directory +tar cf archive directory +status=$? +chmod 700 directory +test $status = 2 || exit 1 -decho Second restore -tar -xf archive.2 -g db.2 --warning=no-timestamp -find dir | sort +echo 1>&2 ----- +chmod 000 directory +tar cf archive --ignore-failed-read directory || exit 1 +status=$? +chmod 700 directory +test $status = 0 ) -rm -rf * - -mkdir dir -mkdir dir/sub -genfile --file dir/file1 -genfile --file dir/sub/file2 - -case "$TEST_TAR_FORMAT" in -posix) CPT=5;; -gnu) CPT=3;; -*) exit 77 -esac -genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \ - tar --blocking-factor=1 -c -f archive.tar \ - --listed-incremental db \ - --warning=no-file-changed \ - -v dir >/dev/null -stdout: -129. incr08.at:38: ) - ok -142. rename06.at:19: testing chained renames ... -./rename06.at:29: +./extrac18.at:37: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -11890,40 +11871,26 @@ export TAR_OPTIONS rm -rf * +mkdir dir +cd dir +echo 'Old file a' > a +echo 'Old file b' > b -test -z "`sort < /dev/null 2>&1`" || exit 77 - -decho Creating directory structure -mkdir test test/d1 test/d2 -genfile --file test/d1/file1 -genfile --file test/d2/file2 - -decho First dump -tar -c -g 0.snar -C test -f backup0.tar . - -decho Altering directory structure -genfile --file test/d2/file3 -mv test/d1 test/d3 -mv test/d2 test/d1 - -decho Second dump -cp 0.snar 1.snar -tar -vc -g 1.snar -C test -f backup1.tar . - -mkdir test1 +tar cf ../archive . -decho First extract -tar -C test1 -x -g /dev/null -f backup0.tar +rm b +echo 'File a' > a -decho Second extract -tar -C test1 -x -g /dev/null -f backup1.tar +tar -x -k -f ../archive +echo status=$? -decho Resulting directory -find test1 | sort +cat a ) +./incr08.at:41: +DIR=`pwd`/gnu/tartest +sed "/tar: Removing leading \`\/*\/' from/d;s|$DIR|ABSPATH|" stderr -143. chtype.at:27: testing changed file types in incrementals ... -./chtype.at:30: +./extrac19.at:24: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -11932,37 +11899,53 @@ export TAR_OPTIONS rm -rf * +mkdir dir +cd dir +echo 'Old file a' > a +echo 'Old file b' > b -test -z "`sort < /dev/null 2>&1`" || exit 77 - +tar cf ../archive . -install-sh -d directory/b/c >/dev/null && genfile --file directory/b/c/x || exit 77 -mkdir directory/a -genfile --file directory/a/a +rm b +echo 'File a' > a -echo First backup -tar --create --file=archive.1 --listed-incremental=db.1 directory +tar -x --skip-old-files -f ../archive +echo status=$? -sleep 2 +cat a +) +./incr06.at:24: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +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 +ckmtime || exit 77 +mkdir dir +mkdir dir/sub +mkdir dir/sub/a +mkdir dir/sub/b +genfile --file dir/file1 +genfile --file dir/sub/file2 +genfile --file dir/sub/a/file3 -echo Second backup -tar --create --file=archive.2 --listed-incremental=db.2 directory +echo Level 0 . sub +tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub +echo Level 0 sub . +tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . -# Delete a -rm -r directory +mkdir dir/c +genfile --file dir/sub/b/file4 -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 +echo Level 1 . sub +tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub +echo Level 1 sub . +tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . ) +stdout: ./dirrem02.at:34: mkdir posix (cd posix @@ -11989,11 +11972,23 @@ --warning=no-file-changed \ -v dir dir/sub >/dev/null ) +146. link02.at:32: testing preserve hard links with --remove-files ... +./link02.at:35: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * -60. exclude01.at:19: ok - - - +genfile -l 64 -f file1 +ln file1 file2 +ln file2 file3 +ln file3 file4 +tar -c -f archive --remove-files file1 file2 file3 file4 +tar tfv archive | sed -n 's/.*file[2-4] link to //p' +) 145. link01.at:33: testing link count gt 2 ... ./link01.at:36: mkdir v7 @@ -12018,77 +12013,84 @@ ls directory/test1 ) -63. exclude04.at:19: 144. ignfail.at:23: testing ignfail ... -./ignfail.at:26: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 + +./incr01.at:30: +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 * -# The test is meaningless for super-user. +ckmtime || exit 77 -echo "test" > $$ -chmod 0 $$ -cat $$ > /dev/null 2>&1 -result=$? -rm -f $$ -test $result -eq 0 && 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 -touch file -mkdir directory -touch directory/file +mv directory orig -echo 1>&2 ----- -chmod 000 file -tar cf archive file -status=$? -chmod 600 file -test $status = 2 || exit 1 +tar xvfg archive.0 /dev/null --warning=no-timestamp +echo separator +tar xvfg archive.1 /dev/null --warning=no-timestamp +) +stderr: +stdout: +./dirrem01.at:41: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * -echo 1>&2 ----- -chmod 000 file -tar cf archive --ignore-failed-read file || exit 1 -status=$? -chmod 600 file -test $status = 0 || exit 1 +mkdir dir +mkdir dir/sub +genfile --file dir/file1 +genfile --file dir/sub/file2 -echo 1>&2 ----- -chmod 000 directory -tar cf archive directory -status=$? -chmod 700 directory -test $status = 2 || exit 1 +case "$TEST_TAR_FORMAT" in +posix) CPT=5;; +gnu) CPT=3;; +*) exit 77 +esac -echo 1>&2 ----- -chmod 000 directory -tar cf archive --ignore-failed-read directory || exit 1 -status=$? -chmod 700 directory -test $status = 0 +genfile --run --checkpoint=$CPT --unlink dir/sub/file2 --unlink dir/sub -- \ + tar --blocking-factor=1 -c -f archive.tar \ + --listed-incremental db \ + --warning=no-file-changed \ + -v dir >/dev/null ) - ok -146. link02.at:32: testing preserve hard links with --remove-files ... -./link02.at:35: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +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 v7" +TAR_OPTIONS="-H posix" export TAR_OPTIONS rm -rf * -genfile -l 64 -f file1 -ln file1 file2 -ln file2 file3 -ln file3 file4 -tar -c -f archive --remove-files file1 file2 file3 file4 -tar tfv archive | sed -n 's/.*file[2-4] link to //p' +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 ) -117. incr01.at:27: ok +108. extrac25.at:18: ok 147. link03.at:24: testing working -l with --remove-files ... ./link03.at:34: mkdir v7 @@ -12118,58 +12120,100 @@ echo testing archive.2 tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p' ) -./extrac22.at:29: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +129. incr08.at:38: ok +62. exclude03.at:19: ok +./incr07.at:40: +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 * +ckmtime || exit 77 +mkdir dirA +echo 'a' > dirA/a +echo 'a' > dirA/b -echo "test" > $$ -chmod 0 $$ -cat $$ > /dev/null 2>&1 -result=$? -rm -f $$ -test $result -eq 0 && exit 77 +decho C0 +tar -g test.snar -vcf test.0.tar dirA +echo 'a' > dirA/c +decho C1 +tar -g test.snar -vcf test.1.tar dirA -test -z "`sort < /dev/null 2>&1`" || exit 77 +rm -f dirA/a +decho C2 +tar -g test.snar -vcf test.2.tar dirA -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) +mkdir ext +rm -rf dirA -cat >filelist <<'_ATEOF' -./dir2/data2 -./dir2 -./dir1/data1 -./dir1 -./data1 -_ATEOF +decho E0 +tar -g test.snar -vxf test.0.tar -C ext/ +decho E1 +tar -g test.snar -vxf test.1.tar -C ext/ +decho E2 +tar -g test.snar -vxf test.2.tar -C ext/ -tar -C t -c -f a.tar --no-recursion -T filelist +mkdir ext/dirA/dirB +touch ext/dirA/dirB/file -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 +decho E3 +tar -g test.snar -vxf test.2.tar -C ext/ + +echo FIN +test -d dirA && echo >&2 "toplevel dirA exists" +exit 0 +) + +./link02.at:35: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile -l 64 -f file1 +ln file1 file2 +ln file2 file3 +ln file3 file4 +tar -c -f archive --remove-files file1 file2 file3 file4 +tar tfv archive | sed -n 's/.*file[2-4] link to //p' ) +131. incr10.at:18: ok +105. extrac22.at:19: ok -61. exclude02.at:19: stdout: + +113. label03.at:27: stdout: ok -132. incr11.at:25: ok +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 . +) 148. link04.at:29: testing link count is 1 but multiple occurrences ... ./link04.at:32: mkdir v7 @@ -12202,19 +12246,61 @@ s,symlink,FOO,g ' | sort ) -151. lustar01.at:21: testing ustar: unsplittable file name ... -./lustar01.at:27: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +102. extrac19.at:21: ok +136. dirrem02.at:31: ok +133. filerem01.at:36: ok +./link01.at:36: +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 --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 +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 +) +./extrac23.at:32: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +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 ) +stdout: 149. longv7.at:24: testing long names in V7 archives ... ./longv7.at:30: mkdir v7 @@ -12232,6 +12318,55 @@ echo separator tar tf archive ) +./exclude02.at:22: +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 +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 + +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 + +) + 150. long01.at:28: testing long file names divisible by block size ... ./long01.at:36: mkdir gnu @@ -12248,11 +12383,10 @@ tar cf archive 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde endfile tar tf archive) - -133. filerem01.at:36: ok -126. incr05.at:21: 108. extrac25.at:18: ok -152. lustar02.at:21: testing ustar: unsplittable path name ... -./lustar02.at:32: +117. incr01.at:27: ok +101. extrac18.at:34: ok +135. dirrem01.at:38: ok +./link02.at:35: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -12261,31 +12395,54 @@ 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 +genfile -l 64 -f file1 +ln file1 file2 +ln file2 file3 +ln file3 file4 +tar -c -f archive --remove-files file1 file2 file3 file4 +tar tfv archive | sed -n 's/.*file[2-4] link to //p' ) - ok -stderr: - -153. lustar03.at:21: testing ustar: splitting long names ... -./lustar03.at:29: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +132. incr11.at:25: ok +./rename04.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 * -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/file || exit 77 -echo "Create archive" -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) -./extrac20.at:24: +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +decho Creating directory structure +mkdir directory +mkdir directory/subdir +genfile --file=directory/file + +decho Creating initial archive +tar -cf archive.1 -g db.1 directory + +decho Renaming +mv directory dir + +decho Creating incremental archive +cp db.1 db.2 +tar -cf archive.2 -g db.2 dir + +mv dir orig + +decho First restore +tar -xf archive.1 -g db.1 +find directory | sort + +decho Second restore +tar -xf archive.2 -g db.2 +find dir | sort +) +./rename06.at:29: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -12297,185 +12454,118 @@ test -z "`sort < /dev/null 2>&1`" || exit 77 +decho Creating directory structure +mkdir test test/d1 test/d2 +genfile --file test/d1/file1 +genfile --file test/d2/file2 -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 +decho First dump +tar -c -g 0.snar -C test -f backup0.tar . -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 -} +decho Altering directory structure +genfile --file test/d2/file3 +mv test/d1 test/d3 +mv test/d2 test/d1 -clean() -{ - test $round = normal && cd .. >/dev/null - find $dir | sort - mv $dir $backup_dir -} +decho Second dump +cp 0.snar 1.snar +tar -vc -g 1.snar -C test -f backup1.tar . -# 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 -} +mkdir test1 -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 +decho First extract +tar -C test1 -x -g /dev/null -f backup0.tar - # 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 +decho Second extract +tar -C test1 -x -g /dev/null -f backup1.tar - 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 +decho Resulting directory +find test1 | sort ) -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: -154. old.at:23: testing old archives ... -./old.at:27: -mkdir directory -tar cfvo archive directory || exit 1 -tar tf archive - -stdout: -stdout: -134. filerem02.at:26: ok -155. time01.at:20: testing time: tricky time stamps ... -./time01.at:23: -mkdir pax -(cd pax -TEST_TAR_FORMAT=pax +./link03.at:34: +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 * -export TZ=UTC0 -mkdir dir -# Test files with time stamps that are near common sources of error, -# typically near powers of 2 (for seconds) or near 0, 1970, or 9999 (years). -# Use GNU-style @ notation for very large time stamps, since they -# typically don't render into years correctly due to int overflow. -for s in \ - @-9223372036854775809 @-9223372036854775808 @-9223372036854775807 \ - 0000-01-01T00:00:00 0000-01-01T00:00:01 \ - 0000-01-02T00:00:00 \ - 1697-10-17T11:03:27 1697-10-17T11:03:28 1697-10-17T11:03:29 \ - 1833-11-24T17:31:43 1833-11-24T17:31:44 1833-11-24T17:31:45 \ - 1901-12-13T20:45:51 1901-12-13T20:45:52 1901-12-13T20:45:53 \ - 1901-12-14T20:45:51 \ - 1969-12-31T23:59:58 1969-12-31T23:59:59 \ - 1970-01-01T00:00:00 1970-01-01T00:00:01 \ - 2038-01-18T03:14:07 \ - 2038-01-19T03:14:07 2038-01-19T03:14:08 \ - 2106-02-07T06:28:15 2106-02-07T06:28:16 \ - 2242-03-16T12:56:31 2242-03-16T12:56:32 \ - 9999-12-31T23:59:58 9999-12-31T23:59:59 \ - @9223372036854775807 @9223372036854775808 -do - # Skip a time stamp $s if it's out of range for this platform, - # of if it uses a notation that this platform does not recognize. - touch -d $s dir/f$s >/dev/null 2>&1 || continue +genfile -l 64 -f file1 +ln file1 file2 +ln file2 file3 +ln file3 file4 - # Likewise for $s.1. If $s is the most negative time stamp and - # time stamps are signed, then $s.1 is out of range. - touch -d $s.1 dir/f$s.$ns >/dev/null 2>&1 || continue +echo archive.1 +tar -c -f archive.1 -l --remove-files file1 file2 file3 file4 - for frac in 01 001 00001 000001 0000001 00000001 000000001 0000000001 \ - 9 99 999 99999 999999 9999999 99999999 999999999 9999999999 - do - touch -d $s.$frac dir/f$s.$frac - done -done +genfile -l 64 -f file1 +ln file1 file2 +ln file2 file3 +ln file3 file4 -tar -c -f archive.tar dir -tar -d -f archive.tar dir +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' ) -./incr06.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./rename05.at:27: +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 * -ckmtime || exit 77 -mkdir dir -mkdir dir/sub -mkdir dir/sub/a -mkdir dir/sub/b -genfile --file dir/file1 -genfile --file dir/sub/file2 -genfile --file dir/sub/a/file3 -echo Level 0 . sub -tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub -echo Level 0 sub . -tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . +test -z "`sort < /dev/null 2>&1`" || exit 77 -mkdir dir/c -genfile --file dir/sub/b/file4 -echo Level 1 . sub -tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub -echo Level 1 sub . -tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . -) +decho Creating directory structure +mkdir directory +mkdir directory/subdir +genfile --file=directory/file -151. lustar01.at:21: ok +decho Creating initial archive +tar -cf archive.1 -g db.1 directory -136. dirrem02.at:31: - ok +decho Renaming +mv directory/subdir directory/subdir.0 +mv directory dir -135. dirrem01.at:38: ok -./link02.at:35: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +decho Creating incremental archive +cp db.1 db.2 +tar -cf archive.2 -g db.2 dir + +mv dir orig + +decho First restore +tar -xf archive.1 -g db.1 --warning=no-timestamp +find directory | sort + +decho Second restore +tar -xf archive.2 -g db.2 --warning=no-timestamp +find dir | sort +) + +151. lustar01.at:21: testing ustar: unsplittable file name ... +./lustar01.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 * -genfile -l 64 -f file1 -ln file1 file2 -ln file2 file3 -ln file3 file4 -tar -c -f archive --remove-files file1 file2 file3 file4 -tar tfv archive | sed -n 's/.*file[2-4] link to //p' +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 ) + + + ./rename01.at:27: mkdir oldgnu (cd oldgnu @@ -12516,8 +12606,130 @@ find foo | sort echo End directory listing 2 ) -156. time02.at:20: testing time: clamping mtime ... -./time02.at:23: +./ignfail.at:26: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +# The test is meaningless for super-user. + +echo "test" > $$ +chmod 0 $$ +cat $$ > /dev/null 2>&1 +result=$? +rm -f $$ +test $result -eq 0 && exit 77 + + +touch file +mkdir directory +touch directory/file + +echo 1>&2 ----- +chmod 000 file +tar cf archive file +status=$? +chmod 600 file +test $status = 2 || exit 1 + +echo 1>&2 ----- +chmod 000 file +tar cf archive --ignore-failed-read file || exit 1 +status=$? +chmod 600 file +test $status = 0 || exit 1 + +echo 1>&2 ----- +chmod 000 directory +tar cf archive directory +status=$? +chmod 700 directory +test $status = 2 || exit 1 + +echo 1>&2 ----- +chmod 000 directory +tar cf archive --ignore-failed-read directory || exit 1 +status=$? +chmod 700 directory +test $status = 0 +) + +./exclude01.at:22: +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 +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 +) + +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 +) + +53. append04.at:29: ok +149. longv7.at:24: stderr: + ok +154. old.at:23: testing old archives ... +./old.at:27: +mkdir directory +tar cfvo archive directory || exit 1 +tar tf archive + + +155. time01.at:20: testing time: tricky time stamps ... +./time01.at:23: mkdir pax (cd pax TEST_TAR_FORMAT=pax @@ -12526,27 +12738,74 @@ export TAR_OPTIONS rm -rf * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - export TZ=UTC0 mkdir dir -touch -d 2015-12-01T00:00:00 dir/a >/dev/null 2>&1 || exit 77 -touch -d 2016-01-01T00:00:00 dir/b >/dev/null 2>&1 || exit 77 -touch -d 2016-02-01T00:00:00 dir/c >/dev/null 2>&1 || exit 77 -touch -d 2038-01-01T00:00:00 dir/d >/dev/null 2>&1 || exit 77 +# Test files with time stamps that are near common sources of error, +# typically near powers of 2 (for seconds) or near 0, 1970, or 9999 (years). +# Use GNU-style @ notation for very large time stamps, since they +# typically don't render into years correctly due to int overflow. +for s in \ + @-9223372036854775809 @-9223372036854775808 @-9223372036854775807 \ + 0000-01-01T00:00:00 0000-01-01T00:00:01 \ + 0000-01-02T00:00:00 \ + 1697-10-17T11:03:27 1697-10-17T11:03:28 1697-10-17T11:03:29 \ + 1833-11-24T17:31:43 1833-11-24T17:31:44 1833-11-24T17:31:45 \ + 1901-12-13T20:45:51 1901-12-13T20:45:52 1901-12-13T20:45:53 \ + 1901-12-14T20:45:51 \ + 1969-12-31T23:59:58 1969-12-31T23:59:59 \ + 1970-01-01T00:00:00 1970-01-01T00:00:01 \ + 2038-01-18T03:14:07 \ + 2038-01-19T03:14:07 2038-01-19T03:14:08 \ + 2106-02-07T06:28:15 2106-02-07T06:28:16 \ + 2242-03-16T12:56:31 2242-03-16T12:56:32 \ + 9999-12-31T23:59:58 9999-12-31T23:59:59 \ + @9223372036854775807 @9223372036854775808 +do + # Skip a time stamp $s if it's out of range for this platform, + # of if it uses a notation that this platform does not recognize. + touch -d $s dir/f$s >/dev/null 2>&1 || continue -tar -c --mtime 2016-01-15T00:00:00 --clamp-mtime -f archive.tar dir -tar -d -f archive.tar dir|sort + # Likewise for $s.1. If $s is the most negative time stamp and + # time stamps are signed, then $s.1 is out of range. + touch -d $s.1 dir/f$s.$ns >/dev/null 2>&1 || continue + + for frac in 01 001 00001 000001 0000001 00000001 000000001 0000000001 \ + 9 99 999 99999 999999 9999999 99999999 999999999 9999999999 + do + touch -d $s.$frac dir/f$s.$frac + done +done + +tar -c -f archive.tar dir +tar -d -f archive.tar dir ) +153. lustar03.at:21: testing ustar: splitting long names ... +./lustar03.at:29: +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/file || exit 77 +echo "Create archive" +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) +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: ./link01.at:36: -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 * @@ -12564,7 +12823,37 @@ ls directory/test1 ) -149. longv7.at:24: ok +./incr06.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 +mkdir dir/sub/a +mkdir dir/sub/b +genfile --file dir/file1 +genfile --file dir/sub/file2 +genfile --file dir/sub/a/file3 + +echo Level 0 . sub +tar -c -f archive-0.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub +echo Level 0 sub . +tar -c -f archive-0.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . + +mkdir dir/c +genfile --file dir/sub/b/file4 + +echo Level 1 . sub +tar -c -f archive-1.1.tar -g db.1 -C dir -v --warning=no-new-dir . sub +echo Level 1 sub . +tar -c -f archive-1.2.tar -g db.2 -C dir -v --warning=no-new-dir sub . +) 157. multiv01.at:23: testing multivolume dumps from pipes ... ./multiv01.at:30: mkdir gnu @@ -12604,75 +12893,64 @@ cmp file1 extract-dir-pipe/file1 cmp file2 extract-dir-pipe/file2 ) -154. old.at:23: ok - -158. multiv02.at:28: testing skipping a straddling member ... -./multiv02.at:31: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +156. time02.at:20: testing time: clamping mtime ... +./time02.at:23: +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 * -genfile --length 10240 --file en -genfile --length 20000 --file to -genfile --length 20000 --file tre -genfile --length 10240 --file fire -exec <&- +test -z "`sort < /dev/null 2>&1`" || exit 77 -tar -c -f A.tar -f B.tar -f C.tar -M -L 30 en to tre fire || exit 1 -echo separator -tar -v -x -f A.tar -f B.tar -f C.tar -M en --warning=no-timestamp || exit 1 +export TZ=UTC0 +mkdir dir + +touch -d 2015-12-01T00:00:00 dir/a >/dev/null 2>&1 || exit 77 +touch -d 2016-01-01T00:00:00 dir/b >/dev/null 2>&1 || exit 77 +touch -d 2016-02-01T00:00:00 dir/c >/dev/null 2>&1 || exit 77 +touch -d 2038-01-01T00:00:00 dir/d >/dev/null 2>&1 || exit 77 + +tar -c --mtime 2016-01-15T00:00:00 --clamp-mtime -f archive.tar dir +tar -d -f archive.tar dir|sort ) -./incr07.at:40: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +151. lustar01.at:21: ok +134. filerem02.at:26: +./link04.at:32: +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 * -ckmtime || exit 77 -mkdir dirA -echo 'a' > dirA/a -echo 'a' > dirA/b - -decho C0 -tar -g test.snar -vcf test.0.tar dirA - -echo 'a' > dirA/c -decho C1 -tar -g test.snar -vcf test.1.tar dirA - -rm -f dirA/a -decho C2 -tar -g test.snar -vcf test.2.tar dirA - -mkdir ext -rm -rf dirA +mkdir dir +echo TEST > dir/file +ln -s file dir/symlink || exit 77 -decho E0 -tar -g test.snar -vxf test.0.tar -C ext/ -decho E1 -tar -g test.snar -vxf test.1.tar -C ext/ +tar cf archive dir dir +tar tvf archive | sed ' + s,.*[0-9] dir/,dir/, +' | sort -decho E2 -tar -g test.snar -vxf test.2.tar -C ext/ +echo -- -mkdir ext/dirA/dirB -touch ext/dirA/dirB/file +tar cfl archive dir dir -decho E3 -tar -g test.snar -vxf test.2.tar -C ext/ +echo == -echo FIN -test -d dirA && echo >&2 "toplevel dirA exists" -exit 0 +tar chf archive dir +tar tvf archive | sed ' + s,.*[0-9] dir/,dir/, + s,file,FOO,g + s,symlink,FOO,g +' | sort ) + ok 160. multiv04.at:36: testing split directory members in a MV archive ... ./multiv04.at:39: mkdir gnu @@ -12700,6 +12978,27 @@ echo separator tar -MRt -f arc.1 -f arc.2) +158. multiv02.at:28: testing skipping a straddling member ... +./multiv02.at:31: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +genfile --length 10240 --file en +genfile --length 20000 --file to +genfile --length 20000 --file tre +genfile --length 10240 --file fire + +exec <&- + +tar -c -f A.tar -f B.tar -f C.tar -M -L 30 en to tre fire || exit 1 +echo separator +tar -v -x -f A.tar -f B.tar -f C.tar -M en --warning=no-timestamp || exit 1 +) 159. multiv03.at:30: testing MV archive & long filenames ... ./multiv03.at:33: @@ -12742,6 +13041,98 @@ tar -M -x -f arch.1 -f arch.2 --warning=no-timestamp || exit 1 cmp $BFILE bfile ) +154. old.at:23: ok +./link02.at:35: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +genfile -l 64 -f file1 +ln file1 file2 +ln file2 file3 +ln file3 file4 +tar -c -f archive --remove-files file1 file2 file3 file4 +tar tfv archive | sed -n 's/.*file[2-4] link to //p' +) +./long01.at:36: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + + +install-sh -d 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde >/dev/null && genfile --file 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde || exit 77 +echo test > endfile + +tar cf archive 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde endfile +tar tf archive) +162. multiv06.at:27: testing Multivolumes with L=record_size ... +./multiv06.at:30: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +exec <&- +decho Creating file +genfile --length 20139 --file file +decho Creating archive +tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file +decho Testing archive +tar -t -M -farc.1 -farc.2 -farc.3) + + +./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 +) + 161. multiv05.at:26: testing Restoring after an out of sync volume ... ./multiv05.at:30: mkdir gnu @@ -12781,7 +13172,8 @@ echo Diffing szesc cmp bak/szesc szesc || exit 1 ) -./link04.at:32: +152. lustar02.at:21: ok +./multiv01.at:30: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -12790,59 +13182,36 @@ export TAR_OPTIONS rm -rf * -mkdir dir -echo TEST > dir/file -ln -s file dir/symlink || exit 77 - -tar cf archive dir dir -tar tvf archive | sed ' - s,.*[0-9] dir/,dir/, -' | sort - -echo -- +exec <&- +genfile --length 7168 --file file1 -tar cfl archive dir dir +for block in " 1" " 2" " 3" " 4" " 5" " 6" " 7" " 8" \ + " 9" "10" "11" "12" "13" "14" "15" "16" ; do \ + echo "file2 block ${block} bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla" + for count in 2 3 4 5 6 7 8 ; do + echo "bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla" + done +done >file2 -echo == +if test $TEST_TAR_FORMAT = pax; then + TAPE_LENGTH=11 +else + TAPE_LENGTH=10 +fi -tar chf archive dir -tar tvf archive | sed ' - s,.*[0-9] dir/,dir/, - s,file,FOO,g - s,symlink,FOO,g -' | sort -) -113. label03.at:27: ./extrac23.at:32: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * +tar -c --multi-volume --tape-length=$TAPE_LENGTH \ + -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1 -# Test if the directory permissions are restored properly. -mkdir dir -chmod 755 dir -tar cf a.tar dir -chmod 777 dir - ok -tar -xf a.tar --no-overwrite-dir -genfile --stat=mode.777 dir +mkdir extract-dir-pipe +dd bs=4096 count=$TAPE_LENGTH if=t2-pipe.tar 2>/dev/null | +PATH=$PATH ${TRUSS} tar -f t1-pipe.tar -f - \ + -C extract-dir-pipe -x --multi-volume --warning=no-timestamp \ + --tape-length=$TAPE_LENGTH --read-full-records || exit 1 -# 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 +cmp file1 extract-dir-pipe/file1 +cmp file2 extract-dir-pipe/file2 ) - -./rename04.at:30: +./incr04.at:34: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -12851,59 +13220,61 @@ export TAR_OPTIONS rm -rf * +ckmtime || exit 77 -test -z "`sort < /dev/null 2>&1`" || 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 -decho Creating directory structure -mkdir directory -mkdir directory/subdir -genfile --file=directory/file +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 +) +163. multiv07.at:28: testing volumes split at an extended header ... +./multiv07.at:31: -decho Creating initial archive -tar -cf archive.1 -g db.1 directory -decho Renaming -mv directory dir +test -z "$TEST_DATA_DIR" && exit 77 +tarball_prereq xsplit-1.tar 0e008c84c517e48fbf23ca6a7033cde6 $TEST_DATA_DIR $TEST_DATA_URL || exit 77 -decho Creating incremental archive -cp db.1 db.2 -tar -cf archive.2 -g db.2 dir +test -z "$TEST_DATA_DIR" && exit 77 +tarball_prereq xsplit-2.tar 03150b9852d285458f43734e9e0b9a45 $TEST_DATA_DIR $TEST_DATA_URL || exit 77 -mv dir orig +exec <&- -decho First restore -tar -xf archive.1 -g db.1 -find directory | sort +cd $TEST_DATA_DIR +tar -t -M -fxsplit-1.tar -fxsplit-2.tar -decho Second restore -tar -xf archive.2 -g db.2 -find dir | sort -) -162. multiv06.at:27: testing Multivolumes with L=record_size ... -./multiv06.at:30: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +165. multiv09.at:26: testing bad next volume ... +./multiv09.at:33: +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 * -exec <&- -decho Creating file -genfile --length 20139 --file file -decho Creating archive -tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file -decho Testing archive -tar -t -M -farc.1 -farc.2 -farc.3) - +genfile --length 2000000 --file aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +tar --format=gnu -cM --tape-length 1M -f A.tar -f B.tar aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || exit $? +echo "created" +tar --format=gnu -xM -f A.tar 2>/dev/null </dev/null && genfile --file 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde || exit 77 -echo test > endfile - -tar cf archive 0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde/0123456789abcde endfile -tar tf archive) - ok -163. multiv07.at:28: testing volumes split at an extended header ... -./multiv07.at:31: - - -test -z "$TEST_DATA_DIR" && exit 77 -tarball_prereq xsplit-1.tar 0e008c84c517e48fbf23ca6a7033cde6 $TEST_DATA_DIR $TEST_DATA_URL || exit 77 - -test -z "$TEST_DATA_DIR" && exit 77 -tarball_prereq xsplit-2.tar 03150b9852d285458f43734e9e0b9a45 $TEST_DATA_DIR $TEST_DATA_URL || exit 77 +genfile --length 10240 --file en +genfile --length 20000 --file to +genfile --length 20000 --file tre +genfile --length 10240 --file fire exec <&- -cd $TEST_DATA_DIR -tar -t -M -fxsplit-1.tar -fxsplit-2.tar +tar -c -f A.tar -f B.tar -f C.tar -M -L 30 en to tre fire || exit 1 +echo separator +tar -v -x -f A.tar -f B.tar -f C.tar -M en --warning=no-timestamp || exit 1 +) +126. incr05.at:21: ok +--- - 2025-09-01 22:15:28.174019875 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/163/stdout 2025-09-01 22:15:28.162853362 +0000 +@@ -1,4 +1 @@ +-Archive volumes split at an extended header Volume 1 +-foo +-bar + -164. multiv08.at:25: testing multivolume header creation ... -./multiv08.at:28: +153. lustar03.at:21: ok + +./link02.at:35: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -13009,14 +13423,69 @@ export TAR_OPTIONS rm -rf * -genfile --length 9472 --file a -genfile --length 9984 --file b -decho Creating -tar -c -M -L10 -f A.tar -f B.tar -f C.tar a b -decho Testing -tar -tMR -f A.tar -f B.tar -f C.tar +genfile -l 64 -f file1 +ln file1 file2 +ln file2 file3 +ln file3 file4 +tar -c -f archive --remove-files file1 file2 file3 file4 +tar tfv archive | sed -n 's/.*file[2-4] link to //p' ) -./extrac22.at:29: +./rename04.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 + + +decho Creating directory structure +mkdir directory +mkdir directory/subdir +genfile --file=directory/file + +decho Creating initial archive +tar -cf archive.1 -g db.1 directory + +decho Renaming +mv directory dir + +decho Creating incremental archive +cp db.1 db.2 +tar -cf archive.2 -g db.2 dir + +mv dir orig + +decho First restore +tar -xf archive.1 -g db.1 +find directory | sort + +decho Second restore +tar -xf archive.2 -g db.2 +find dir | sort +) +./multiv06.at:30: +mkdir pax +(cd pax +TEST_TAR_FORMAT=pax +export TEST_TAR_FORMAT +TAR_OPTIONS="-H pax" +export TAR_OPTIONS +rm -rf * + +exec <&- +decho Creating file +genfile --length 20139 --file file +decho Creating archive +tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file +decho Testing archive +tar -t -M -farc.1 -farc.2 -farc.3) +167. owner.at:21: testing --owner and --group ... +./owner.at:24: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -13025,50 +13494,71 @@ export TAR_OPTIONS rm -rf * +export TZ=UTC0 -echo "test" > $$ -chmod 0 $$ -cat $$ > /dev/null 2>&1 -result=$? -rm -f $$ -test $result -eq 0 && exit 77 +genfile --file a +tar --owner="Joe the Plumber:1234" \ + --group="Plumber's Union:5678" \ + --mtime='@0' \ + --mode='u=rw,go=r' \ + -cf arc a -test -z "`sort < /dev/null 2>&1`" || exit 77 +tar -tvf arc +tar --numeric-owner -tvf arc +) +./incr07.at:40: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * -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) +ckmtime || exit 77 +mkdir dirA +echo 'a' > dirA/a +echo 'a' > dirA/b -cat >filelist <<'_ATEOF' -./dir2/data2 -./dir2 -./dir1/data1 -./dir1 -./data1 -_ATEOF +decho C0 +tar -g test.snar -vcf test.0.tar dirA +echo 'a' > dirA/c +decho C1 +tar -g test.snar -vcf test.1.tar dirA -tar -C t -c -f a.tar --no-recursion -T filelist +rm -f dirA/a +decho C2 +tar -g test.snar -vcf test.2.tar dirA -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 +mkdir ext +rm -rf dirA + +decho E0 +tar -g test.snar -vxf test.0.tar -C ext/ +decho E1 +tar -g test.snar -vxf test.1.tar -C ext/ + +decho E2 +tar -g test.snar -vxf test.2.tar -C ext/ + +mkdir ext/dirA/dirB +touch ext/dirA/dirB/file + +decho E3 +tar -g test.snar -vxf test.2.tar -C ext/ + +echo FIN +test -d dirA && echo >&2 "toplevel dirA exists" +exit 0 ) -./rename05.at:27: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +163. multiv07.at:28: ./rename05.at:27: +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 * @@ -13102,23 +13592,131 @@ tar -xf archive.2 -g db.2 --warning=no-timestamp find dir | sort ) -./link02.at:35: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +166. multiv10.at:37: testing file start at the beginning of a posix volume ... +./multiv10.at:40: +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 * -genfile -l 64 -f file1 -ln file1 file2 -ln file2 file3 -ln file3 file4 -tar -c -f archive --remove-files file1 file2 file3 file4 -tar tfv archive | sed -n 's/.*file[2-4] link to //p' +set -e +genfile --length=15360 --file data1 +genfile --length=15360 --file data2 +tar -v -c -L 10 -M -f 1.tar -f 2.tar -f 3.tar -f 4.tar -f 5.tar data1 data2 +tar -M -t -f 1.tar -f 2.tar -f 3.tar -f 4.tar -f 5.tar +mkdir out +tar -C out -M -x -f 1.tar -f 2.tar -f 3.tar -f 4.tar -f 5.tar +cmp data1 out/data1 +cmp data2 out/data2 ) -./ignfail.at:26: +164. multiv08.at:25: ok +./multiv03.at:33: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +AFILE=`awk 'BEGIN { for (i = 0; i < 100; i++) printf "a"; exit; }'` +BFILE=`awk 'BEGIN { for (i = 0; i < 101; i++) printf "b"; exit; }'` + +cat > ../experr < ../expout <file2 + +if test $TEST_TAR_FORMAT = pax; then + TAPE_LENGTH=11 +else + TAPE_LENGTH=10 +fi + +tar -c --multi-volume --tape-length=$TAPE_LENGTH \ + -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1 + +mkdir extract-dir-pipe +dd bs=4096 count=$TAPE_LENGTH if=t2-pipe.tar 2>/dev/null | +PATH=$PATH ${TRUSS} tar -f t1-pipe.tar -f - \ + -C extract-dir-pipe -x --multi-volume --warning=no-timestamp \ + --tape-length=$TAPE_LENGTH --read-full-records || exit 1 + +cmp file1 extract-dir-pipe/file1 +cmp file2 extract-dir-pipe/file2 +) + skipped (multiv07.at:31) +./link01.at:36: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +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 +) +./multiv09.at:33: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -13127,6 +13725,27 @@ export TAR_OPTIONS rm -rf * +genfile --length 2000000 --file aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +tar --format=gnu -cM --tape-length 1M -f A.tar -f B.tar aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || exit $? +echo "created" +tar --format=gnu -xM -f A.tar 2>/dev/null < $$ @@ -13169,89 +13788,41 @@ chmod 700 directory test $status = 0 ) -165. multiv09.at:26: testing bad next volume ... -./multiv09.at:33: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * - -genfile --length 2000000 --file aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -tar --format=gnu -cM --tape-length 1M -f A.tar -f B.tar aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || exit $? -echo "created" -tar --format=gnu -xM -f A.tar 2>/dev/null < dir/file +ln -s file dir/symlink || exit 77 -for block in " 1" " 2" " 3" " 4" " 5" " 6" " 7" " 8" \ - " 9" "10" "11" "12" "13" "14" "15" "16" ; do \ - echo "file2 block ${block} bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla" - for count in 2 3 4 5 6 7 8 ; do - echo "bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla!bla" - done -done >file2 +tar cf archive dir dir +tar tvf archive | sed ' + s,.*[0-9] dir/,dir/, +' | sort -if test $TEST_TAR_FORMAT = pax; then - TAPE_LENGTH=11 -else - TAPE_LENGTH=10 -fi +echo -- -tar -c --multi-volume --tape-length=$TAPE_LENGTH \ - -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1 +tar cfl archive dir dir -mkdir extract-dir-pipe -dd bs=4096 count=$TAPE_LENGTH if=t2-pipe.tar 2>/dev/null | -PATH=$PATH ${TRUSS} tar -f t1-pipe.tar -f - \ - -C extract-dir-pipe -x --multi-volume --warning=no-timestamp \ - --tape-length=$TAPE_LENGTH --read-full-records || exit 1 +echo == -cmp file1 extract-dir-pipe/file1 -cmp file2 extract-dir-pipe/file2 +tar chf archive dir +tar tvf archive | sed ' + s,.*[0-9] dir/,dir/, + s,file,FOO,g + s,symlink,FOO,g +' | sort ) -167. owner.at:21: testing --owner and --group ... -./owner.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -export TZ=UTC0 - -genfile --file a +167. owner.at:21: ok -tar --owner="Joe the Plumber:1234" \ - --group="Plumber's Union:5678" \ - --mtime='@0' \ - --mode='u=rw,go=r' \ - -cf arc a -tar -tvf arc -tar --numeric-owner -tvf arc -) -166. multiv10.at:37: testing file start at the beginning of a posix volume ... -./multiv10.at:40: +./link03.at:34: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -13260,15 +13831,24 @@ export TAR_OPTIONS rm -rf * -set -e -genfile --length=15360 --file data1 -genfile --length=15360 --file data2 -tar -v -c -L 10 -M -f 1.tar -f 2.tar -f 3.tar -f 4.tar -f 5.tar data1 data2 -tar -M -t -f 1.tar -f 2.tar -f 3.tar -f 4.tar -f 5.tar -mkdir out -tar -C out -M -x -f 1.tar -f 2.tar -f 3.tar -f 4.tar -f 5.tar -cmp data1 out/data1 -cmp data2 out/data2 + +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' ) 168. map.at:21: testing --owner-map and --group-map ... ./map.at:24: @@ -13318,74 +13898,47 @@ tar -tvf 2.tar tar --numeric-owner -tvf 2.tar ) -156. time02.at:20: ok ---- - 2026-10-05 04:32:19.117883311 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/163/stdout 2026-10-05 04:32:19.113487690 +0000 -@@ -1,4 +1 @@ --Archive volumes split at an extended header Volume 1 --foo --bar - - -./multiv02.at:31: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./rename01.at:27: +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 --length 10240 --file en -genfile --length 20000 --file to -genfile --length 20000 --file tre -genfile --length 10240 --file fire -exec <&- +test -z "`sort < /dev/null 2>&1`" || exit 77 -tar -c -f A.tar -f B.tar -f C.tar -M -L 30 en to tre fire || exit 1 -echo separator -tar -v -x -f A.tar -f B.tar -f C.tar -M en --warning=no-timestamp || exit 1 -) -./multiv06.at:30: -mkdir pax -(cd pax -TEST_TAR_FORMAT=pax -export TEST_TAR_FORMAT -TAR_OPTIONS="-H pax" -export TAR_OPTIONS -rm -rf * -exec <&- -decho Creating file -genfile --length 20139 --file file -decho Creating archive -tar -c -M -L10 -b20 -farc.1 -farc.2 -farc.3 file -decho Testing archive -tar -t -M -farc.1 -farc.2 -farc.3) -163. multiv07.at:28: ./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 foo +genfile --file foo/file1 +genfile --file foo/file2 +mkdir foo/bar +genfile --file foo/bar/file -mkdir directory -mkdir directory/test1 -mkdir directory/test2 +echo "Creating base archive" +tar -g incr -cf arch.1 -v foo -echo TEST > directory/test1/test.txt -ln directory/test1/test.txt directory/test2/test.txt || exit 77 +mv foo/bar foo/baz -tar cf archive directory/test1/test.txt directory/test1/test.txt +echo "Creating incremental archive" +tar -g incr -cf arch.2 -v foo -rm -r directory -tar xf archive --warning=no-timestamp +mv foo old -ls directory/test1 +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 ) +146. link02.at:32: ok 169. sparse01.at:21: testing sparse files ... ./sparse01.at:24: mkdir posix @@ -13409,40 +13962,10 @@ genfile --stat=name,size sparsefile cmp sparsefile directory/sparsefile ) - skipped (multiv07.at:31) - -./link04.at:32: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -mkdir dir -echo TEST > dir/file -ln -s file dir/symlink || exit 77 - -tar cf archive dir dir -tar tvf archive | sed ' - s,.*[0-9] dir/,dir/, -' | sort - -echo -- +60. exclude01.at:19: ok -tar cfl archive dir dir -echo == -tar chf archive dir -tar tvf archive | sed ' - s,.*[0-9] dir/,dir/, - s,file,FOO,g - s,symlink,FOO,g -' | sort -) -127. incr06.at:21: ok 170. sparse02.at:21: testing extracting sparse file over a pipe ... ./sparse02.at:28: mkdir posix @@ -13460,66 +13983,30 @@ tar xfO archive | cat - > sparsecopy || exit 1 cmp sparsefile sparsecopy ) - -164. multiv08.at:25: ok - -./rename01.at:27: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +106. extrac23.at:18: ok +./link01.at:36: +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 * +mkdir directory +mkdir directory/test1 +mkdir directory/test2 -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 TEST > directory/test1/test.txt +ln directory/test1/test.txt directory/test2/test.txt || exit 77 -echo "Begin directory listing 1" -find foo | sort -echo "End directory listing 1" +tar cf archive directory/test1/test.txt directory/test1/test.txt -tar xfg arch.2 /dev/null -echo Begin directory listing 2 -find foo | sort -echo End directory listing 2 -) -./link02.at:35: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * +rm -r directory +tar xf archive --warning=no-timestamp -genfile -l 64 -f file1 -ln file1 file2 -ln file2 file3 -ln file3 file4 -tar -c -f archive --remove-files file1 file2 file3 file4 -tar tfv archive | sed -n 's/.*file[2-4] link to //p' +ls directory/test1 ) -167. owner.at:21: ok 171. sparse03.at:21: testing storing sparse files > 8G ... ./sparse03.at:29: mkdir posix @@ -13544,75 +14031,9 @@ genfile --stat=name,size sparsefile cmp sparsefile directory/sparsefile ) -./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' -) -./multiv03.at:33: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -AFILE=`awk 'BEGIN { for (i = 0; i < 100; i++) printf "a"; exit; }'` -BFILE=`awk 'BEGIN { for (i = 0; i < 101; i++) printf "b"; exit; }'` - -cat > ../experr < ../expout <file2 - -if test $TEST_TAR_FORMAT = pax; then - TAPE_LENGTH=11 -else - TAPE_LENGTH=10 -fi - -tar -c --multi-volume --tape-length=$TAPE_LENGTH \ - -f t1-pipe.tar -f t2-pipe.tar ./file1 ./file2 || exit 1 - -mkdir extract-dir-pipe -dd bs=4096 count=$TAPE_LENGTH if=t2-pipe.tar 2>/dev/null | -PATH=$PATH ${TRUSS} tar -f t1-pipe.tar -f - \ - -C extract-dir-pipe -x --multi-volume --warning=no-timestamp \ - --tape-length=$TAPE_LENGTH --read-full-records || exit 1 - -cmp file1 extract-dir-pipe/file1 -cmp file2 extract-dir-pipe/file2 +genfile --sparse --file 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 --block-size 512 8M A || exit 77 +tar -f - -c --sparse --posix 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 | tar tf - ) -162. multiv06.at:27: ok ./multiv02.at:31: mkdir pax (cd pax @@ -13671,41 +14065,8 @@ echo separator tar -v -x -f A.tar -f B.tar -f C.tar -M en --warning=no-timestamp || exit 1 ) -150. long01.at:28: ok -106. extrac23.at:18: ok -./multiv09.at:33: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -genfile --length 2000000 --file aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -tar --format=gnu -cM --tape-length 1M -f A.tar -f B.tar aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || exit $? -echo "created" -tar --format=gnu -xM -f A.tar 2>/dev/null < 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 -) -105. extrac22.at:19: ok -168. map.at:21: ok -./rename04.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 - - -decho Creating directory structure -mkdir directory -mkdir directory/subdir -genfile --file=directory/file - -decho Creating initial archive -tar -cf archive.1 -g db.1 directory - -decho Renaming -mv directory dir - -decho Creating incremental archive -cp db.1 db.2 -tar -cf archive.2 -g db.2 dir - -mv dir orig - -decho First restore -tar -xf archive.1 -g db.1 -find directory | sort - -decho Second restore -tar -xf archive.2 -g db.2 -find dir | sort -) -stdout: +127. incr06.at:21: ok 174. sparse06.at:21: testing storing sparse file using seek method ... ./sparse06.at:32: mkdir posix @@ -14862,115 +15159,22 @@ ) -175. sparse07.at:21: testing sparse files with unicode names ... -./sparse07.at:24: + +stdout: +161. multiv05.at:26: ok +./link04.at:32: mkdir posix (cd posix TEST_TAR_FORMAT=posix export TEST_TAR_FORMAT TAR_OPTIONS="-H posix" export TAR_OPTIONS -rm -rf * - -genfile --sparse --file žluť --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77 -tar -c -f archive --sparse žluť || exit 1 - -tar tf archive -) separator --rw-r--r-- pbuilder1/pbuilder1 1000 2026-10-05 04:32 begin --rw-r--r-- pbuilder1/pbuilder1 3102720 2026-10-05 04:32 sparsefile --rw-r--r-- pbuilder1/pbuilder1 1000 2026-10-05 04:32 end +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-09-01 22:15 begin +-rw-r--r-- pbuilder2/pbuilder2 3102720 2025-09-01 22:15 sparsefile +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-09-01 22:15 end separator sparsefile 3102720 - -./sparse01.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile --length 1000 -f begin -genfile --length 1000 -f end -genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || 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 --warning=no-timestamp -genfile --stat=name,size sparsefile -cmp sparsefile directory/sparsefile -) - -./link02.at:35: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -genfile -l 64 -f file1 -ln file1 file2 -ln file2 file3 -ln file3 file4 -tar -c -f archive --remove-files file1 file2 file3 file4 -tar tfv archive | sed -n 's/.*file[2-4] link to //p' -) -172. sparse04.at:21: ok -./rename06.at:29: -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 - -decho Creating directory structure -mkdir test test/d1 test/d2 -genfile --file test/d1/file1 -genfile --file test/d2/file2 - -decho First dump -tar -c -g 0.snar -C test -f backup0.tar . - -decho Altering directory structure -genfile --file test/d2/file3 -mv test/d1 test/d3 -mv test/d2 test/d1 - -decho Second dump -cp 0.snar 1.snar -tar -vc -g 1.snar -C test -f backup1.tar . - -mkdir test1 - -decho First extract -tar -C test1 -x -g /dev/null -f backup0.tar - -decho Second extract -tar -C test1 -x -g /dev/null -f backup1.tar - -decho Resulting directory -find test1 | sort -) -./link04.at:32: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS rm -rf * mkdir dir @@ -14979,7 +15183,7 @@ tar cf archive dir dir tar tvf archive | sed ' -161. multiv05.at:26: s,.*[0-9] dir/,dir/, + s,.*[0-9] dir/,dir/, ' | sort echo -- @@ -14995,48 +15199,31 @@ s,symlink,FOO,g ' | sort ) - ok -./rename05.at:27: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +176. sparsemv.at:21: testing sparse files in MV archives ... +177. spmvp00.at:21: testing sparse files in PAX MV archives, v.0.0 ... +./sparse01.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 * +genfile --length 1000 -f begin +genfile --length 1000 -f end +genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77 +tar -c -f archive --sparse begin sparsefile end || exit 1 +echo separator -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -decho Creating directory structure +tar tfv archive +echo separator mkdir directory -mkdir directory/subdir -genfile --file=directory/file - -decho Creating initial archive -tar -cf archive.1 -g db.1 directory - -decho Renaming -mv directory/subdir directory/subdir.0 -mv directory dir - -decho Creating incremental archive -cp db.1 db.2 -tar -cf archive.2 -g db.2 dir - -mv dir orig - -decho First restore -tar -xf archive.1 -g db.1 --warning=no-timestamp -find directory | sort - -decho Second restore -tar -xf archive.2 -g db.2 --warning=no-timestamp -find dir | sort +tar Cxf directory archive --warning=no-timestamp +genfile --stat=name,size sparsefile +cmp sparsefile directory/sparsefile ) - -./ignfail.at:26: +./multiv09.at:33: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -15045,50 +15232,14 @@ export TAR_OPTIONS rm -rf * -# The test is meaningless for super-user. - -echo "test" > $$ -chmod 0 $$ -cat $$ > /dev/null 2>&1 -result=$? -rm -f $$ -test $result -eq 0 && exit 77 - - -touch file -mkdir directory -touch directory/file - -echo 1>&2 ----- -chmod 000 file -tar cf archive file -status=$? -chmod 600 file -test $status = 2 || exit 1 - -echo 1>&2 ----- -chmod 000 file -tar cf archive --ignore-failed-read file || exit 1 -status=$? -chmod 600 file -test $status = 0 || exit 1 - -echo 1>&2 ----- -chmod 000 directory -tar cf archive directory -status=$? -chmod 700 directory -test $status = 2 || exit 1 - -echo 1>&2 ----- -chmod 000 directory -tar cf archive --ignore-failed-read directory || exit 1 -status=$? -chmod 700 directory -test $status = 0 +genfile --length 2000000 --file aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +tar --format=gnu -cM --tape-length 1M -f A.tar -f B.tar aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || exit $? +echo "created" +tar --format=gnu -xM -f A.tar 2>/dev/null < sparsecopy || exit 1 +cmp sparsefile sparsecopy +) + + +168. map.at:21: ok +172. sparse04.at:21: ok +./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 +) +140. rename04.at:27: ok 178. spmvp01.at:21: testing sparse files in PAX MV archives, v.0.1 ... ./spmvp01.at:24: mkdir pax @@ -15181,22 +15437,6 @@ echo "Compare archive" tar -d -M -f arc.1 -f arc.2 -f arc.3 ) -./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 -) 179. spmvp10.at:21: testing sparse files in PAX MV archives, v.1.0 ... ./spmvp10.at:24: mkdir pax @@ -15228,8 +15468,61 @@ tar -d -M -f arc.1 -f arc.2 -f arc.3 ) -180. sptrcreat.at:33: testing sparse file truncated while archiving ... -./sptrcreat.at:36: +145. link01.at:33: ok +./ignfail.at:26: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +# The test is meaningless for super-user. + +echo "test" > $$ +chmod 0 $$ +cat $$ > /dev/null 2>&1 +result=$? +rm -f $$ +test $result -eq 0 && exit 77 + + +touch file +mkdir directory +touch directory/file + +echo 1>&2 ----- +chmod 000 file +tar cf archive file +status=$? +chmod 600 file +test $status = 2 || exit 1 + +echo 1>&2 ----- +chmod 000 file +tar cf archive --ignore-failed-read file || exit 1 +status=$? +chmod 600 file +test $status = 0 || exit 1 + +echo 1>&2 ----- +chmod 000 directory +tar cf archive directory +status=$? +chmod 700 directory +test $status = 2 || exit 1 + +echo 1>&2 ----- +chmod 000 directory +tar cf archive --ignore-failed-read directory || exit 1 +status=$? +chmod 700 directory +test $status = 0 +) + +181. sptrdiff00.at:26: testing file truncated in sparse region while comparing ... +./sptrdiff00.at:30: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -15241,12 +15534,13 @@ 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 -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') + tar --sparse -vdf bar +) +158. multiv02.at:28: ok ./sparse07.at:24: mkdir gnu (cd gnu @@ -15261,25 +15555,10 @@ tar tf archive ) -./multiv09.at:33: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -genfile --length 2000000 --file aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -tar --format=gnu -cM --tape-length 1M -f A.tar -f B.tar aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || exit $? -echo "created" -tar --format=gnu -xM -f A.tar 2>/dev/null <&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 ) +142. rename06.at:19: ok ./link03.at:34: -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 * @@ -15326,31 +15650,49 @@ echo testing archive.2 tar tfv archive.2 | sed -n 's/.*file[2-3] link to //p' ) -./link01.at:36: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu + +183. update.at:28: testing update unchanged directories ... +./update.at:31: +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 * + +test -z "`sort < /dev/null 2>&1`" || exit 77 + mkdir directory -mkdir directory/test1 -mkdir directory/test2 +genfile --length 10240 --pattern zeros --file directory/file1 +genfile --length 10240 --pattern default --file directory/file2 -echo TEST > directory/test1/test.txt -ln directory/test1/test.txt directory/test2/test.txt || exit 77 +tar cf archive directory || exit 1 +echo separator +tar uf archive directory || exit 1 +echo separator +tar tf archive | sort || exit 1 +) -tar cf archive directory/test1/test.txt directory/test1/test.txt -rm -r directory -tar xf archive --warning=no-timestamp +./multiv09.at:33: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * -ls directory/test1 +genfile --length 2000000 --file aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +tar --format=gnu -cM --tape-length 1M -f A.tar -f B.tar aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || exit $? +echo "created" +tar --format=gnu -xM -f A.tar 2>/dev/null <&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 -) -146. link02.at:32: ok - 184. update01.at:29: testing update directories ... ./update01.at:32: mkdir v7 @@ -15423,7 +15739,30 @@ echo "separator" tar tf arc | sort || exit 1 ) -137. rename01.at:24: ok +159. multiv03.at:30: ok + + +./sparse07.at:24: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile --sparse --file žluť --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77 +tar -c -f archive --sparse žluť || exit 1 + +tar tf archive +) +stdout: +separator +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-09-01 22:15 begin +-rw-r--r-- pbuilder2/pbuilder2 3102720 2025-09-01 22:15 sparsefile +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-09-01 22:15 end +separator +sparsefile 3102720 185. update02.at:26: testing update changed files ... ./update02.at:29: mkdir v7 @@ -15451,7 +15790,7 @@ echo "separator" tar tf arc | sort || exit 1 ) -./sparse07.at:24: +./sparse01.at:24: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -15460,49 +15799,19 @@ export TAR_OPTIONS rm -rf * -genfile --sparse --file žluť --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77 -tar -c -f archive --sparse žluť || exit 1 - -tar tf archive -) -stdout: -./link04.at:32: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -mkdir dir -echo TEST > dir/file -ln -s file dir/symlink || exit 77 - -tar cf archive dir dir -tar tvf archive | sed ' - s,.*[0-9] dir/,dir/, -' | sort - -echo -- - -tar cfl archive dir dir - -echo == +genfile --length 1000 -f begin +genfile --length 1000 -f end +genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77 +tar -c -f archive --sparse begin sparsefile end || exit 1 +echo separator -tar chf archive dir -tar tvf archive | sed ' - s,.*[0-9] dir/,dir/, - s,file,FOO,g - s,symlink,FOO,g -' | sort +tar tfv archive +echo separator +mkdir directory +tar Cxf directory archive --warning=no-timestamp +genfile --stat=name,size sparsefile +cmp sparsefile directory/sparsefile ) -separator --rw-r--r-- pbuilder1/pbuilder1 1000 2026-10-05 04:32 begin --rw-r--r-- pbuilder1/pbuilder1 3102720 2026-10-05 04:32 sparsefile --rw-r--r-- pbuilder1/pbuilder1 1000 2026-10-05 04:32 end -separator -sparsefile 3102720 186. update03.at:20: testing update with chdir ... ./update03.at:27: mkdir v7 @@ -15525,7 +15834,7 @@ echo Update tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 ) -./sparse01.at:24: +./sparse02.at:28: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -15534,20 +15843,40 @@ export TAR_OPTIONS rm -rf * -genfile --length 1000 -f begin -genfile --length 1000 -f end genfile --sparse --file sparsefile --block-size 512 0 ABCD 1M EFGH 2000K IJKL || exit 77 -tar -c -f archive --sparse begin sparsefile end || exit 1 +tar --hole-detection=raw -c -f archive --sparse sparsefile || exit 1 echo separator -tar tfv archive -echo separator -mkdir directory -tar Cxf directory archive --warning=no-timestamp -genfile --stat=name,size sparsefile -cmp sparsefile directory/sparsefile +tar xfO archive | cat - > sparsecopy || exit 1 +cmp sparsefile sparsecopy ) +189. volume.at:23: testing volume ... +./volume.at:26: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +tar -cf archive -V label -T /dev/null || exit 1 + +tar xfV archive label || exit 1 +tar xfV archive 'la?el' || exit 1 +tar xfV archive 'l*l' || exit 1 + +echo 1>&2 ----- +tar xfV archive lab +test $? = 2 || exit 1 +echo 1>&2 ----- +tar xfV archive bel +test $? = 2 || exit 1 +echo 1>&2 ----- +tar xfV archive babel +test $? = 2 +) 187. update04.at:20: testing update with wildcards ... ./update04.at:23: mkdir v7 @@ -15576,171 +15905,53 @@ echo $? ) - -140. rename04.at:27: ok -./multiv09.at:33: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -177. spmvp00.at:21: genfile --length 2000000 --file aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -tar --format=gnu -cM --tape-length 1M -f A.tar -f B.tar aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa || exit $? -echo "created" -tar --format=gnu -xM -f A.tar 2>/dev/null < $$ -chmod 0 $$ -cat $$ > /dev/null 2>&1 -result=$? -rm -f $$ -test $result -eq 0 && exit 77 - - -touch file -mkdir directory -touch directory/file - -echo 1>&2 ----- -chmod 000 file -tar cf archive file -status=$? -chmod 600 file -test $status = 2 || exit 1 - -echo 1>&2 ----- -chmod 000 file -tar cf archive --ignore-failed-read file || exit 1 -status=$? -chmod 600 file -test $status = 0 || exit 1 - -echo 1>&2 ----- -chmod 000 directory -tar cf archive directory -status=$? -chmod 700 directory -test $status = 2 || exit 1 +mkdir dir +echo TEST > dir/file +ln -s file dir/symlink || exit 77 -echo 1>&2 ----- -chmod 000 directory -tar cf archive --ignore-failed-read directory || exit 1 -status=$? -chmod 700 directory -test $status = 0 -) -./update.at:31: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * +tar cf archive dir dir +tar tvf archive | sed ' + s,.*[0-9] dir/,dir/, +' | sort +echo -- -test -z "`sort < /dev/null 2>&1`" || exit 77 +tar cfl archive dir dir -mkdir directory -genfile --length 10240 --pattern zeros --file directory/file1 -genfile --length 10240 --pattern default --file directory/file2 +echo == -tar cf archive directory || exit 1 -echo separator -tar uf archive directory || exit 1 -echo separator -tar tf archive | sort || exit 1 +tar chf archive dir +tar tvf archive | sed ' + s,.*[0-9] dir/,dir/, + s,file,FOO,g + s,symlink,FOO,g +' | sort ) -175. sparse07.at:21: 142. rename06.at:19: ok +178. spmvp01.at:21: ok ok -145. link01.at:33: ok -189. volume.at:23: testing volume ... -./volume.at:26: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - -tar -cf archive -V label -T /dev/null || exit 1 - -tar xfV archive label || exit 1 -tar xfV archive 'la?el' || exit 1 -tar xfV archive 'l*l' || exit 1 +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 * -echo 1>&2 ----- -tar xfV archive lab -test $? = 2 || exit 1 -echo 1>&2 ----- -tar xfV archive bel -test $? = 2 || exit 1 -echo 1>&2 ----- -tar xfV archive babel -test $? = 2 +touch foo +tar -cvf archive.tar --verify foo ) -./sparse02.at:28: +./update.at:31: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -15749,41 +15960,42 @@ 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 +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 ) -./link03.at:34: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +191. comprec.at:21: testing compressed format recognition ... +./comprec.at:25: +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 * -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 +cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 -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' +genfile --length 10240 --file file1 +echo "separator" +tar cfz archive file1 +echo "separator" +mv file1 orig +tar xfv archive --warning=no-timestamp +cmp orig file1 ) +137. rename01.at:24: ok +175. sparse07.at:21: ok 190. volsize.at:29: testing volume header size ... ./volsize.at:32: mkdir v7 @@ -15809,10 +16021,7 @@ tar xf $TEST_DATA_DIR/abc.tar find abc|sort ) -141. rename05.at:24: ok -178. spmvp01.at:21: 179. spmvp10.at:21: ok - -./update03.at:27: +./sparsemv.at:31: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -15821,56 +16030,27 @@ export TAR_OPTIONS rm -rf * -mkdir dir1 -mkdir dir2 -mkdir dir1/subdir1 dir2/subdir2 -genfile --file dir1/subdir1/a -genfile --file dir2/subdir2/a -echo Create -tar -vcf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 -genfile --file dir1/subdir1/b -genfile --file dir2/subdir2/c -echo Update -tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 -) - ok -stdout: - -separator --rw-r--r-- pbuilder1/pbuilder1 1000 2026-10-05 04:32 begin --rw-r--r-- pbuilder1/pbuilder1 3102720 2026-10-05 04:32 sparsefile --rw-r--r-- pbuilder1/pbuilder1 1000 2026-10-05 04:32 end -separator -sparsefile 3102720 -148. link04.at:29: ok - ---- - 2026-10-05 04:32:19.230558771 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/190/stdout 2026-10-05 04:32:19.225487690 +0000 -@@ -1,10 +1 @@ --Short Listing --abc/not-a-file.gif --abc/CCC --Verbose Listing --V--------- 0/0 1536 2006-05-08 22:07 abc/not-a-file.gif--Volume Header-- ---rw-r--r-- tom/users 0 2006-04-22 19:52 abc/CCC --Extracted directory --abc --abc/CCC - - -./verify.at:28: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * +exec <&- +TAR_OPTIONS="$TAR_OPTIONS --hole-detection=raw" +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 +echo "Test archive" +tar --record-size=512 -t -M -f arc.1 -f arc.2 +echo "Compare archive" +tar --record-size=512 -d -M -f arc.1 -f arc.2 -touch foo -tar -cvf archive.tar --verify foo +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 +echo "Test archive" +tar --record-size=512 -t -M -f arc.1 -f arc.2 +echo "Compare archive" +tar --record-size=512 -d -M -f arc.1 -f arc.2 ) -190. volsize.at:29: + ./volume.at:26: mkdir oldgnu (cd oldgnu @@ -15896,68 +16076,84 @@ tar xfV archive babel test $? = 2 ) - -./update.at:31: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./rename03.at:26: +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 -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 -) -191. comprec.at:21: testing compressed format recognition ... -./comprec.at:25: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 -export TEST_TAR_FORMAT -TAR_OPTIONS="-H v7" -export TAR_OPTIONS -rm -rf * +mkdir foo +genfile --file foo/file1 +genfile --file foo/file2 +mkdir foo/a +genfile --file foo/a/filea -cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 +mkdir foo/b +genfile --file foo/b/fileb -genfile --length 10240 --file file1 -echo "separator" -tar cfz archive file1 -echo "separator" -mv file1 orig -tar xfv archive --warning=no-timestamp -cmp orig file1 +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 ) - skipped (volsize.at:32) -./extrac20.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./update03.at:27: +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 - - -for i in a b c -do - dir=in$i +mkdir dir1 +mkdir dir2 +mkdir dir1/subdir1 dir2/subdir2 +genfile --file dir1/subdir1/a +genfile --file dir2/subdir2/a +echo Create +tar -vcf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 +genfile --file dir1/subdir1/b +genfile --file dir2/subdir2/c +echo Update +tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 +) ./multiv09.at:33: mkdir gnu (cd gnu @@ -15975,63 +16171,16 @@ q EOF ) - 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 +stdout: - 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 -) +separator +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-09-01 22:15 begin +-rw-r--r-- pbuilder2/pbuilder2 3102720 2025-09-01 22:15 sparsefile +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-09-01 22:15 end +separator +sparsefile 3102720 +147. link03.at:24: ok 192. shortfile.at:26: testing short input files ... ./shortfile.at:29: mkdir gnu @@ -16045,6 +16194,33 @@ genfile --length 511 --file foo || exit 5 tar tf foo ) +--- - 2025-09-01 22:15:29.105043617 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/190/stdout 2025-09-01 22:15:29.094860409 +0000 +@@ -1,10 +1 @@ +-Short Listing +-abc/not-a-file.gif +-abc/CCC +-Verbose Listing +-V--------- 0/0 1536 2006-05-08 22:07 abc/not-a-file.gif--Volume Header-- +--rw-r--r-- tom/users 0 2006-04-22 19:52 abc/CCC +-Extracted directory +-abc +-abc/CCC + +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 +) 193. shortupd.at:31: testing updating short archives ... ./shortupd.at:34: mkdir v7 @@ -16077,21 +16253,30 @@ 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 +190. volsize.at:29: 192. shortfile.at:26: ok +./comprec.at:25: +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 * -genfile --file foo --length 50000k -genfile --file baz -genfile --run=10 --checkpoint 10 --length 1024 --append foo -- tar -vcf bar foo baz -) +cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 + +genfile --length 10240 --file file1 +echo "separator" +tar cfz archive file1 +echo "separator" +mv file1 orig +tar xfv archive --warning=no-timestamp +cmp orig file1 +) +179. spmvp10.at:21: skipped (volsize.at:32) +170. sparse02.at:21: ok + ok 196. sigpipe.at:21: testing sigpipe handling ... ./sigpipe.at:30: @@ -16109,22 +16294,33 @@ # Discard diagnostics that some shells generate about broken pipes. (tar tf archive 2>&3 | :) 3>&2 2>/dev/null -197. comperr.at:18: testing compressor program failure ... -./comperr.at:28: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 +./shortupd.at:34: +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 * -tar --use-compress-program false -cf a.tar . 2>err -rc=$? -sed -n '$p' err -exit $rc +touch foo +tar uf archive foo ) +189. volume.at:23: ok ./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 +) + +./update03.at:27: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -16133,24 +16329,60 @@ export TAR_OPTIONS rm -rf * -touch foo -tar -cvf archive.tar --verify foo +mkdir dir1 +mkdir dir2 +mkdir dir1/subdir1 dir2/subdir2 +genfile --file dir1/subdir1/a +genfile --file dir2/subdir2/a +echo Create +tar -vcf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 +genfile --file dir1/subdir1/b +genfile --file dir2/subdir2/c +echo Update +tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 ) -./shortupd.at:34: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu + + +./update.at:31: +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 * -touch foo -tar uf archive foo + +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 ) -147. link03.at:24: ok -192. shortfile.at:26: 170. sparse02.at:21: ok - ok +197. comperr.at:18: testing compressor program failure ... +./comperr.at:28: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * + +tar --use-compress-program false -cf a.tar . 2>err +rc=$? +sed -n '$p' err +exit $rc +) + + +169. sparse01.at:21: ok 198. remfiles01.at:28: testing remove-files with compression ... ./remfiles01.at:32: @@ -16197,7 +16429,8 @@ find . | sort exit $EC -./update03.at:27: +165. multiv09.at:26: ok +./comprec.at:25: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -16206,18 +16439,88 @@ export TAR_OPTIONS rm -rf * -mkdir dir1 -mkdir dir2 -mkdir dir1/subdir1 dir2/subdir2 -genfile --file dir1/subdir1/a -genfile --file dir2/subdir2/a -echo Create -tar -vcf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 -genfile --file dir1/subdir1/b -genfile --file dir2/subdir2/c -echo Update -tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 + +cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 + +genfile --length 10240 --file file1 +echo "separator" +tar cfz archive file1 +echo "separator" +mv file1 orig +tar xfv archive --warning=no-timestamp +cmp orig file1 +) +201. remfiles04a.at:25: testing remove-files with -C:rel in -c/non-incr. mode ... +./remfiles04a.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 +echo bar > bar +echo foobar > foo/bar +tar -cf foo.tar --remove-files -C foo bar +echo A +find . | sort +) +./shortupd.at:34: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * + +touch foo +tar uf archive foo ) +199. remfiles02.at:28: testing remove-files with compression: grand-child ... +./remfiles02.at:32: + +cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 + + +test -z "`sort < /dev/null 2>&1`" || exit 77 + + +mkdir dir +cd dir +mkdir a +genfile --file b +mkdir c + +tar -c -f a -z --remove-files b c 2>err +EC=$? +sed -n '/(child)/p' err >&2 +rm err +find . | sort +exit $EC + +./truncate.at:32: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * + +genfile --file foo --length 200k +genfile --file baz +genfile --run --checkpoint 10 --length 195k --truncate foo -- \ + tar -vcf bar foo baz +echo Exit status: $? +echo separator +genfile --file foo --seek 195k --length 5k --pattern=zeros +tar dvf bar|sed '/foo: Mod time differs/d') ./ignfail.at:26: mkdir gnu (cd gnu @@ -16269,30 +16572,6 @@ chmod 700 directory test $status = 0 ) -199. remfiles02.at:28: testing remove-files with compression: grand-child ... -./remfiles02.at:32: - -cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 - - -test -z "`sort < /dev/null 2>&1`" || exit 77 - - -mkdir dir -cd dir -mkdir a -genfile --file b -mkdir c - -tar -c -f a -z --remove-files b c 2>err -EC=$? -sed -n '/(child)/p' err >&2 -rm err -find . | sort -exit $EC - -176. sparsemv.at:21: ok -169. sparse01.at:21: ok 200. remfiles03.at:28: testing remove-files with symbolic links ... ./remfiles03.at:31: mkdir a @@ -16301,18 +16580,7 @@ tar --remove-files -cf a.tar a genfile --stat a -./shortupd.at:34: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar -export TEST_TAR_FORMAT -TAR_OPTIONS="-H ustar" -export TAR_OPTIONS -rm -rf * - -touch foo -tar uf archive foo -) +196. sigpipe.at:21: ok ./comperr.at:28: mkdir oldgnu (cd oldgnu @@ -16327,120 +16595,11 @@ sed -n '$p' err exit $rc ) -189. volume.at:23: ok -196. sigpipe.at:21: ok -./comprec.at:25: -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 - -genfile --length 10240 --file file1 -echo "separator" -tar cfz archive file1 -echo "separator" -mv file1 orig -tar xfv archive --warning=no-timestamp -cmp orig file1 -) -./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 -) -./verify.at:28: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -touch foo -tar -cvf archive.tar --verify foo -) - - -./truncate.at:32: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -genfile --file foo --length 200k -genfile --file baz -genfile --run --checkpoint 10 --length 195k --truncate foo -- \ - tar -vcf bar foo baz -echo Exit status: $? -echo separator -genfile --file foo --seek 195k --length 5k --pattern=zeros -tar dvf bar|sed '/foo: Mod time differs/d') +148. link04.at:29: ok -./shortupd.at:34: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * -touch foo -tar uf archive foo -) -165. multiv09.at:26: ok 200. remfiles03.at:28: ok - -201. remfiles04a.at:25: testing remove-files with -C:rel in -c/non-incr. mode ... -./remfiles04a.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 -echo bar > bar -echo foobar > foo/bar -tar -cf foo.tar --remove-files -C foo bar -echo A -find . | sort -) - - 202. remfiles04b.at:33: testing remove-files with -C:rel in -c/incr. mode ... ./remfiles04b.at:36: mkdir gnu @@ -16461,31 +16620,27 @@ echo A find . | sort ) -./comperr.at:28: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./update.at:31: +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 * -tar --use-compress-program false -cf a.tar . 2>err -rc=$? -sed -n '$p' err -exit $rc -) -./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 +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 ) 203. remfiles04c.at:33: testing remove-files with -C:rel in -r mode ... ./remfiles04c.at:36: @@ -16510,18 +16665,7 @@ echo B find . | sort ) -./verify.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * -touch foo -tar -cvf archive.tar --verify foo -) 204. remfiles05a.at:34: testing remove-files with -C:rel,rel in -c/non-incr. mode ... ./remfiles05a.at:37: mkdir gnu @@ -16566,7 +16710,9 @@ echo Update tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 ) -199. remfiles02.at:28: 206. remfiles05c.at:25: testing remove-files with -C:rel,rel in -r mode ... +201. remfiles04a.at:25: ok + +206. remfiles05c.at:25: testing remove-files with -C:rel,rel in -r mode ... ./remfiles05c.at:28: mkdir gnu (cd gnu @@ -16592,6 +16738,48 @@ decho C find . | sort ) +198. remfiles01.at:28: ok + +199. remfiles02.at:28: ok +202. remfiles04b.at:33: ok +203. remfiles04c.at:33: ok +./shortupd.at:34: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +touch foo +tar uf archive foo +) + +207. remfiles06a.at:25: testing remove-files with -C:rel,abs in -c/non-incr. mode ... +./remfiles06a.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 --remove-files -C foo file -C $DIR/bar file +decho B +find . | sort +) 205. remfiles05b.at:25: testing remove-files with -C:rel,rel in -c/incr. mode ... ./remfiles05b.at:28: mkdir gnu @@ -16615,10 +16803,26 @@ decho B find . | sort ) - ok +204. remfiles05a.at:34: ok +./comperr.at:28: +mkdir ustar +(cd ustar +TEST_TAR_FORMAT=ustar +export TEST_TAR_FORMAT +TAR_OPTIONS="-H ustar" +export TAR_OPTIONS +rm -rf * -207. remfiles06a.at:25: testing remove-files with -C:rel,abs in -c/non-incr. mode ... -./remfiles06a.at:28: +tar --use-compress-program false -cf a.tar . 2>err +rc=$? +sed -n '$p' err +exit $rc +) + + + +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 @@ -16637,31 +16841,81 @@ echo bar/file > bar/file DIR=`pwd` decho A -tar -cvf foo.tar --remove-files -C foo file -C $DIR/bar file +tar -cvf foo.tar --incremental --remove-files -C foo file -C $DIR/bar file decho B find . | sort ) -193. shortupd.at:31: - ok -./comprec.at:25: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +./extrac20.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 * -cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 +test -z "`sort < /dev/null 2>&1`" || exit 77 -genfile --length 10240 --file file1 -echo "separator" -tar cfz archive file1 -echo "separator" -mv file1 orig -tar xfv archive --warning=no-timestamp -cmp orig file1 + +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 ) ./update.at:31: mkdir gnu @@ -16685,9 +16939,28 @@ echo separator tar tf archive | sort || exit 1 ) -198. remfiles01.at:28: ok -201. remfiles04a.at:25: ok -./comperr.at:28: +./update03.at:27: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + +mkdir dir1 +mkdir dir2 +mkdir dir1/subdir1 dir2/subdir2 +genfile --file dir1/subdir1/a +genfile --file dir2/subdir2/a +echo Create +tar -vcf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 +genfile --file dir1/subdir1/b +genfile --file dir2/subdir2/c +echo Update +tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 +) +./incr03.at:31: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -16696,54 +16969,84 @@ export TAR_OPTIONS rm -rf * -tar --use-compress-program false -cf a.tar . 2>err -rc=$? -sed -n '$p' err -exit $rc +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 ) -./truncate.at:32: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar + +./comprec.at:25: +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 * -genfile --file foo --length 200k -genfile --file baz -genfile --run --checkpoint 10 --length 195k --truncate foo -- \ - tar -vcf bar foo baz -echo Exit status: $? -echo separator -genfile --file foo --seek 195k --length 5k --pattern=zeros -tar dvf bar|sed '/foo: Mod time differs/d') -202. remfiles04b.at:33: 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 +cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 + +genfile --length 10240 --file file1 +echo "separator" +tar cfz archive file1 +echo "separator" +mv file1 orig +tar xfv archive --warning=no-timestamp +cmp orig file1 +) +206. remfiles05c.at:25: ok +./incr04.at:34: +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 * +ckmtime || exit 77 -test -z "`sort < /dev/null 2>&1`" || 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 - -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 +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 ) - ok 209. remfiles06c.at:25: testing remove-files with -C:rel,abs in -r mode ... ./remfiles06c.at:28: mkdir gnu @@ -16771,14 +17074,60 @@ decho C find . | sort ) -144. ignfail.at:23: ok -188. verify.at:25: ok +./listed01.at:29: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -204. remfiles05a.at:34: - ok +ckmtime || exit 77 -203. remfiles04c.at:33: ok -210. remfiles07a.at:25: testing remove-files with -C:abs,rel in -c/non-incr. mode ... +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 +) +./truncate.at:32: +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 200k +genfile --file baz +genfile --run --checkpoint 10 --length 195k --truncate foo -- \ + tar -vcf bar foo baz +echo Exit status: $? +echo separator +genfile --file foo --seek 195k --length 5k --pattern=zeros +tar dvf bar|sed '/foo: Mod time differs/d') +176. sparsemv.at:21: 210. remfiles07a.at:25: testing remove-files with -C:abs,rel in -c/non-incr. mode ... ./remfiles07a.at:28: mkdir gnu (cd gnu @@ -16802,26 +17151,19 @@ decho B find . | sort ) - - -./comperr.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./verify.at:28: +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 * -tar --use-compress-program false -cf a.tar . 2>err -rc=$? -sed -n '$p' err -exit $rc +touch foo +tar -cvf archive.tar --verify foo ) -207. remfiles06a.at:25: 205. remfiles05b.at:25: ok - ok - -./update03.at:27: +./shortupd.at:34: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -16830,18 +17172,11 @@ export TAR_OPTIONS rm -rf * -mkdir dir1 -mkdir dir2 -mkdir dir1/subdir1 dir2/subdir2 -genfile --file dir1/subdir1/a -genfile --file dir2/subdir2/a -echo Create -tar -vcf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 -genfile --file dir1/subdir1/b -genfile --file dir2/subdir2/c -echo Update -tar -vuf arc.tar -C dir1 subdir1 -C ../dir2 subdir2 +touch foo +tar uf archive foo ) + ok +205. remfiles05b.at:25: ok 211. remfiles07b.at:25: testing remove-files with -C:abs,rel in -c/incr. mode ... ./remfiles07b.at:28: mkdir gnu @@ -16866,8 +17201,147 @@ decho B find . | sort ) -206. remfiles05c.at:25: ok -183. update.at:28: ok +./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 +./comperr.at:28: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +tar --use-compress-program false -cf a.tar . 2>err +rc=$? +sed -n '$p' err +exit $rc +) +207. remfiles06a.at:25: ok +193. shortupd.at:31: ok +./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 +) +./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 oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +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 +) +183. update.at:28: + ok 212. remfiles07c.at:25: testing remove-files with -C:abs,rel in -r mode ... ./remfiles07c.at:28: mkdir gnu @@ -16895,6 +17369,37 @@ decho C find . | sort ) + +144. ignfail.at:23: +./verify.at:28: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +touch foo +tar -cvf archive.tar --verify foo +) +./comperr.at:28: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * + + ok +tar --use-compress-program false -cf a.tar . 2>err +rc=$? +sed -n '$p' err +exit $rc +) +174. sparse06.at:21: ok + 213. remfiles08a.at:28: testing remove-files deleting two subdirs in -c/non-incr. mode ... ./remfiles08a.at:31: mkdir gnu @@ -16914,28 +17419,11 @@ decho B find . ) -./comprec.at:25: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - - -cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 - -genfile --length 10240 --file file1 -echo "separator" -tar cfz archive file1 -echo "separator" -mv file1 orig -tar xfv archive --warning=no-timestamp -cmp orig file1 -) -214. remfiles08b.at:31: testing remove-files deleting two subdirs in -c/incr. mode ... -./remfiles08b.at:34: +210. remfiles07a.at:25: +186. update03.at:20: ok + ok +215. remfiles08c.at:28: testing remove-files deleting two subdirs in -r mode ... +./remfiles08c.at:31: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -16944,35 +17432,21 @@ export TAR_OPTIONS rm -rf * + +test -z "`sort < /dev/null 2>&1`" || exit 77 + mkdir foo mkdir bar echo foo/foo_file > foo/foo_file echo bar/bar_file > bar/bar_file +tar -cf foo.tar -C foo . -C ../bar . decho A -tar -cvf foo.tar --incremental --remove-files -C foo . -C ../bar . +find . | sort decho B +tar -rvf foo.tar --remove-files -C foo . -C ../bar . +decho C find . ) - - -208. remfiles06b.at:25: ./truncate.at:32: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * - -genfile --file foo --length 200k -genfile --file baz -genfile --run --checkpoint 10 --length 195k --truncate foo -- \ - tar -vcf bar foo baz -echo Exit status: $? -echo separator -genfile --file foo --seek 195k --length 5k --pattern=zeros -tar dvf bar|sed '/foo: Mod time differs/d') - ok 216. remfiles09a.at:25: testing remove-files on full directory in -c/non-incr. mode ... ./remfiles09a.at:28: mkdir gnu @@ -16990,8 +17464,8 @@ decho B find . ) -215. remfiles08c.at:28: testing remove-files deleting two subdirs in -r mode ... -./remfiles08c.at:31: +214. remfiles08b.at:31: testing remove-files deleting two subdirs in -c/incr. mode ... +./remfiles08b.at:34: mkdir gnu (cd gnu TEST_TAR_FORMAT=gnu @@ -17000,25 +17474,54 @@ export TAR_OPTIONS rm -rf * - -test -z "`sort < /dev/null 2>&1`" || exit 77 - mkdir foo mkdir bar echo foo/foo_file > foo/foo_file echo bar/bar_file > bar/bar_file -tar -cf foo.tar -C foo . -C ../bar . decho A -find . | sort +tar -cvf foo.tar --incremental --remove-files -C foo . -C ../bar . decho B -tar -rvf foo.tar --remove-files -C foo . -C ../bar . -decho C find . ) +./comprec.at:25: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * +cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 +genfile --length 10240 --file file1 +echo "separator" +tar cfz archive file1 +echo "separator" +mv file1 orig +tar xfv archive --warning=no-timestamp +cmp orig file1 +) +208. remfiles06b.at:25: ok +./sptrcreat.at:36: +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 +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') 217. remfiles09b.at:29: testing remove-files on full directory in -c/incr. mode ... ./remfiles09b.at:32: mkdir gnu @@ -17036,7 +17539,68 @@ decho B find . ) -209. remfiles06c.at:25: ok +./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 +) + +./truncate.at:32: +mkdir posix +(cd posix +TEST_TAR_FORMAT=posix +export TEST_TAR_FORMAT +TAR_OPTIONS="-H posix" +export TAR_OPTIONS +rm -rf * + +genfile --file foo --length 200k +genfile --file baz +genfile --run --checkpoint 10 --length 195k --truncate foo -- \ + tar -vcf bar foo baz +echo Exit status: $? +echo separator +genfile --file foo --seek 195k --length 5k --pattern=zeros +tar dvf bar|sed '/foo: Mod time differs/d') 218. remfiles09c.at:25: testing remove-files on full directory in -r mode ... ./remfiles09c.at:28: mkdir gnu @@ -17060,8 +17624,10 @@ decho C find . | sort ) -197. comperr.at:18: ok -210. remfiles07a.at:25: ok +212. remfiles07c.at:25: 209. remfiles06c.at:25: 197. comperr.at:18: ok + ok + ok +211. remfiles07b.at:25: ok 219. remfiles10.at:20: testing remove-files ... ./remfiles10.at:23: mkdir gnu @@ -17082,58 +17648,28 @@ exit $tar_status ) -214. remfiles08b.at:31: ok -220. xattr01.at:25: testing xattrs: basic functionality ... -./xattr01.at:28: -mkdir v7 -(cd v7 -TEST_TAR_FORMAT=v7 + +./verify.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 * +touch foo +tar -cvf archive.tar --verify foo +) +216. remfiles09a.at:25: ok +213. remfiles08a.at:28: ok - 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) - setfattr -n user.test -v ahoj $file - # check whether tar fails to store xattrs - err=$( tar --xattrs -cf /dev/null $file 2>&1 >/dev/null | wc -l ) - if test "$err" != "0"; then - exit 77 - fi - -mkdir dir -genfile --file dir/file -setfattr -n user.test -v OurDirValue dir -setfattr -n user.test -v OurFileValue dir/file -tar --xattrs -cf archive.tar dir -rm -rf dir -tar --xattrs -xf archive.tar -getfattr -h -d dir | grep -v -e '^#' -e ^$ -getfattr -h -d dir/file | grep -v -e '^#' -e ^$ -) -213. remfiles08a.at:28: ok -186. update03.at:20: ok -211. remfiles07b.at:25: ok +217. remfiles09b.at:29: ok 221. xattr02.at:25: testing xattrs: change directory with -C option ... ./xattr02.at:28: mkdir v7 @@ -17189,7 +17725,6 @@ getfattr -h -d file2 | grep -v -e '^#' -e ^$ getfattr -h -d subsubdir | grep -v -e '^#' -e ^$ ) -216. remfiles09a.at:25: ok 222. xattr03.at:25: testing xattrs: trusted.* attributes ... ./xattr03.at:28: mkdir v7 @@ -17253,11 +17788,88 @@ getfattr -mtrusted. -d file2 | grep -v -e '^#' -e ^$ getfattr -mtrusted. -d subsubdir | grep -v -e '^#' -e ^$ ) +220. xattr01.at:25: testing xattrs: basic functionality ... +./xattr01.at:28: +mkdir v7 +(cd v7 +TEST_TAR_FORMAT=v7 +export TEST_TAR_FORMAT +TAR_OPTIONS="-H v7" +export TAR_OPTIONS +rm -rf * -212. remfiles07c.at:25: 217. remfiles09b.at:29: ok - ok + 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) + setfattr -n user.test -v ahoj $file + # check whether tar fails to store xattrs + err=$( tar --xattrs -cf /dev/null $file 2>&1 >/dev/null | wc -l ) + if test "$err" != "0"; then + exit 77 + fi + +mkdir dir +genfile --file dir/file + +setfattr -n user.test -v OurDirValue dir +setfattr -n user.test -v OurFileValue dir/file + +tar --xattrs -cf archive.tar dir + +rm -rf dir +tar --xattrs -xf archive.tar + +getfattr -h -d dir | grep -v -e '^#' -e ^$ +getfattr -h -d dir/file | grep -v -e '^#' -e ^$ +) + +./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 +) +stderr: +A +tar: .: Cannot rmdir: Invalid argument +tar: Exiting with failure status due to previous errors +B +./remfiles10.at:44: sed '2s/:[^:]*$//' stderr +215. remfiles08c.at:28: ok 223. xattr04.at:26: testing xattrs: s/open/openat/ regression ... ./xattr04.at:29: mkdir v7 @@ -17307,33 +17919,7 @@ getfattr -h -d output/file | grep -v -e '^#' -e ^$ exit $ret ) -./comprec.at:25: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * - - -cat /dev/null | gzip - > /dev/null 2>&1 || exit 77 - -genfile --length 10240 --file file1 -echo "separator" -tar cfz archive file1 -echo "separator" -mv file1 orig -tar xfv archive --warning=no-timestamp -cmp orig file1 -) -stderr: ---- - 2026-10-05 04:32:19.357024131 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/220/stdout 2026-10-05 04:32:19.353487690 +0000 -@@ -1,3 +1 @@ --user.test="OurDirValue" --user.test="OurFileValue" - +214. remfiles08b.at:31: 191. comprec.at:21: ok ./truncate.at:32: mkdir gnu (cd gnu @@ -17351,30 +17937,7 @@ echo separator genfile --file foo --seek 195k --length 5k --pattern=zeros tar dvf bar|sed '/foo: Mod time differs/d') -A -tar: .: Cannot rmdir: Invalid argument -tar: Exiting with failure status due to previous errors -B - - -220. xattr01.at:25: --- - 2026-10-05 04:32:19.360167218 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/221/stdout 2026-10-05 04:32:19.357487690 +0000 -@@ -1,4 +1 @@ --user.test="OurFile1Value" --user.test="OurFile2Value" --user.test="OurDirValue" - ---- - 2026-10-05 04:32:19.360967360 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/222/stdout 2026-10-05 04:32:19.357487690 +0000 -@@ -1,4 +1 @@ --trusted.test="OurFile1Value" --trusted.test="OurFile2Value" --trusted.test="OurDirValue" - -./remfiles10.at:44: sed '2s/:[^:]*$//' stderr - - skipped (xattr01.at:28) -221. xattr02.at:25: + ok 224. xattr05.at:28: testing xattrs: keywords with '=' and '%' ... ./xattr05.at:31: mkdir v7 @@ -17424,21 +17987,8 @@ getfattr -d output/file | grep -v '# ' > after diff before after ) -215. remfiles08c.at:28: ok - ---- - 2026-10-05 04:32:19.363504750 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/223/stdout 2026-10-05 04:32:19.357487690 +0000 -@@ -1,2 +1 @@ --user.test="value" - -222. xattr03.at:25: skipped (xattr02.at:28) -218. remfiles09c.at:25: ok -223. xattr04.at:26: - skipped (xattr03.at:28) - -219. remfiles10.at:20: ok -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 @@ -17471,31 +18021,38 @@ 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 (xattr04.at:29) -225. xattr06.at:27: testing xattrs: exclude xattrs on create ... -./xattr06.at:30: +--- - 2025-09-01 22:15:31.079565906 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/221/stdout 2025-09-01 22:15:31.074875378 +0000 +@@ -1,4 +1 @@ +-user.test="OurFile1Value" +-user.test="OurFile2Value" +-user.test="OurDirValue" + +218. remfiles09c.at:25: ok + +226. xattr07.at:26: testing xattrs: xattrs and --skip-old-files ... +./xattr07.at:29: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -17528,26 +18085,27 @@ 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 ^$ ) 227. xattr08.at:26: testing xattrs: xattrs and read-only files ... @@ -17593,7 +18151,38 @@ tar --xattrs -C dir -cf archive.tar file tar --xattrs -C dir2 -xf archive.tar ) +./update02.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 + +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 +) +--- - 2025-09-01 22:15:31.101514416 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/220/stdout 2025-09-01 22:15:31.094875529 +0000 +@@ -1,3 +1 @@ +-user.test="OurDirValue" +-user.test="OurFileValue" + 228. acls01.at:25: testing acls: basic functionality ... ./acls01.at:28: mkdir v7 @@ -17664,8 +18253,21 @@ diff before after test "$?" = 0 ) -224. xattr05.at:28: -229. acls02.at:25: testing acls: work with -C ... + +--- - 2025-09-01 22:15:31.121441096 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/222/stdout 2025-09-01 22:15:31.114875680 +0000 +@@ -1,4 +1 @@ +-trusted.test="OurFile1Value" +-trusted.test="OurFile2Value" +-trusted.test="OurDirValue" + +--- - 2025-09-01 22:15:31.121971356 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/223/stdout 2025-09-01 22:15:31.110875650 +0000 +@@ -1,2 +1 @@ +-user.test="value" + + +221. xattr02.at:25: 229. acls02.at:25: testing acls: work with -C ... ./acls02.at:28: mkdir v7 (cd v7 @@ -17741,9 +18343,47 @@ diff before after test "$?" = 0 ) +220. xattr01.at:25: skipped (xattr02.at:28) +--- - 2025-09-01 22:15:31.130651030 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/226/stderr 2025-09-01 22:15:31.126875771 +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 + +--- - 2025-09-01 22:15:31.145400580 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/226/stdout 2025-09-01 22:15:31.138875862 +0000 +@@ -1,10 +1 @@ +-dir/ +-dir/file +-dir/file2 +-dir/ +-dir/file +-dir/file2 +-user.test="OurDirValue2" +-user.test="OurFileValue2" +-user.test="OurFileValue2" + +219. remfiles10.at:20: + ok +./grow.at:27: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +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 +) + skipped (xattr01.at:28) - skipped (xattr05.at:31) 231. selnx01.at:25: testing selinux: basic store/restore ... ./selnx01.at:28: mkdir v7 @@ -17853,7 +18493,6 @@ fi ) - 230. acls03.at:30: testing acls: default ACLs ... ./acls03.at:47: mkdir v7 @@ -18072,41 +18711,10 @@ fi ) ---- - 2026-10-05 04:32:19.379861705 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/226/stderr 2026-10-05 04:32:19.377487690 +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 - - -225. xattr06.at:27: 234. onetop01.at:21: testing tar --one-top-level ... -./onetop01.at:24: -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 a -genfile --file a/b -genfile --file c -tar cf a.tar a c -mkdir out -cd out -tar --one-top-level -x -f ../a.tar -find . | sort -) -233. capabs_raw01.at:25: testing capabilities: binary store/restore ... -./capabs_raw01.at:28: +232. selacl01.at:25: testing acls/selinux: special files & fifos ... +./selacl01.at:28: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -18124,7 +18732,6 @@ test $result -eq 0 || exit 77 - file=$(TMPDIR=. mktemp fiXXXXXX) setfattr -n user.test -v test $file &> /dev/null @@ -18139,63 +18746,176 @@ 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) - setfattr -n user.test -v ahoj $file - # check whether tar fails to store xattrs - err=$( tar --xattrs -cf /dev/null $file 2>&1 >/dev/null | wc -l ) + err=$( tar --selinux -cf /dev/null $file 2>&1 >/dev/null | wc -l ) if test "$err" != "0"; then exit 77 fi + file=$(TMPDIR=. mktemp fiXXXXXX) - setcap "= cap_chown=ei" $file &> /dev/null + setfacl -m u:$UID:rwx $file &> /dev/null if test "$?" != 0; then exit 77 fi - getcap $file &> /dev/null + getfacl $file &> /dev/null if test "$?" != 0; then exit 77 fi rm -rf $file + file=$(TMPDIR=. mktemp fiXXXXXX) + setfacl -m u:$UID:rwx $file + err=$( tar --acls -cf /dev/null $file 2>&1 >/dev/null | wc -l ) + if test "$err" != "0"; then + exit 77 + fi + mkdir dir -genfile --file dir/file +mkfifo dir/fifo +MAJOR=$( stat /dev/urandom --printf="%t" ) +MINOR=$( stat /dev/urandom --printf="%T" ) +mknod dir/chartype c $MAJOR $MINOR -setcap "= cap_chown=ei" dir/file +# setup attributes +restorecon -R dir +chcon -h --user=system_u dir/fifo +chcon -h --user=system_u dir/chartype +setfacl -m u:$UID:--- dir/fifo +setfacl -m u:$UID:rwx dir/chartype -# archive whole directory including binary xattrs -tar --xattrs -cf archive.tar dir +getfacl dir/fifo >> before +getfattr -msecurity.selinux dir/chartype >> before -# clear the directory -rm -rf dir +tar --xattrs --selinux --acls -cf archive.tar dir -# restore _all_ xattrs (not just the user.* domain) -tar --xattrs --xattrs-include='*' -xf archive.tar +mv dir olddir -# Newer systems print = instead of + here -getcap dir/file | sed 's/+/=/' +tar --xattrs --selinux --acls -xf archive.tar + +getfacl dir/fifo >> after +getfattr -msecurity.selinux dir/chartype >> after + +diff before after +echo separator ) ---- - 2026-10-05 04:32:19.382433756 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/226/stdout 2026-10-05 04:32:19.377487690 +0000 -@@ -1,10 +1 @@ --dir/ --dir/file --dir/file2 --dir/ --dir/file --dir/file2 --user.test="OurDirValue2" --user.test="OurFileValue2" --user.test="OurFileValue2" +223. xattr04.at:26: 224. xattr05.at:28: 226. xattr07.at:26: 225. xattr06.at:27: --- - 2025-09-01 22:15:31.193099085 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/231/stdout 2025-09-01 22:15:31.182876194 +0000 +@@ -1,4 +1 @@ +-security.selinux="system_u +-security.selinux="unconfined_u +-security.selinux="system_u -227. xattr08.at:26: 232. selacl01.at:25: testing acls/selinux: special files & fifos ... -./selacl01.at:28: +229. acls02.at:25: 228. acls01.at:25: +./sptrdiff01.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 5 --length 221278210 --truncate foo -- \ + tar --sparse -vdf bar +) +227. xattr08.at:26: skipped (acls01.at:28) + skipped (xattr06.at:30) + skipped (xattr04.at:29) + skipped (xattr07.at:29) +./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 +) + skipped (xattr05.at:31) +231. selnx01.at:25: 222. xattr03.at:25: skipped (xattr08.at:29) + + skipped (acls02.at:28) +194. truncate.at:29: ok + skipped (xattr03.at:28) +233. capabs_raw01.at:25: testing capabilities: binary store/restore ... +./capabs_raw01.at:28: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -18213,6 +18933,7 @@ test $result -eq 0 || exit 77 + file=$(TMPDIR=. mktemp fiXXXXXX) setfattr -n user.test -v test $file &> /dev/null @@ -18227,86 +18948,50 @@ 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 ) + setfattr -n user.test -v ahoj $file + # check whether tar fails to store xattrs + err=$( tar --xattrs -cf /dev/null $file 2>&1 >/dev/null | wc -l ) if test "$err" != "0"; then exit 77 fi - file=$(TMPDIR=. mktemp fiXXXXXX) - setfacl -m u:$UID:rwx $file &> /dev/null + setcap "= cap_chown=ei" $file &> /dev/null if test "$?" != 0; then exit 77 fi - getfacl $file &> /dev/null + getcap $file &> /dev/null if test "$?" != 0; then exit 77 fi rm -rf $file - file=$(TMPDIR=. mktemp fiXXXXXX) - setfacl -m u:$UID:rwx $file - err=$( tar --acls -cf /dev/null $file 2>&1 >/dev/null | wc -l ) - if test "$err" != "0"; then - exit 77 - fi - mkdir dir -mkfifo dir/fifo -MAJOR=$( stat /dev/urandom --printf="%t" ) -MINOR=$( stat /dev/urandom --printf="%T" ) -mknod dir/chartype c $MAJOR $MINOR - -# setup attributes -restorecon -R dir -chcon -h --user=system_u dir/fifo -chcon -h --user=system_u dir/chartype -setfacl -m u:$UID:--- dir/fifo -setfacl -m u:$UID:rwx dir/chartype - -getfacl dir/fifo >> before -getfattr -msecurity.selinux dir/chartype >> before +genfile --file dir/file -tar --xattrs --selinux --acls -cf archive.tar dir +setcap "= cap_chown=ei" dir/file -mv dir olddir +# archive whole directory including binary xattrs +tar --xattrs -cf archive.tar dir -tar --xattrs --selinux --acls -xf archive.tar +# clear the directory +rm -rf dir -getfacl dir/fifo >> after -getfattr -msecurity.selinux dir/chartype >> after +# restore _all_ xattrs (not just the user.* domain) +tar --xattrs --xattrs-include='*' -xf archive.tar -diff before after -echo separator +# Newer systems print = instead of + here +getcap dir/file | sed 's/+/=/' ) - skipped (xattr06.at:30) -226. xattr07.at:26: 191. comprec.at:21: ok -229. acls02.at:25: 235. onetop02.at:21: testing tar --one-top-level --show-transformed ... -./onetop02.at:24: +234. onetop01.at:21: testing tar --one-top-level ... +./onetop01.at:24: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -18324,15 +19009,33 @@ 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 ) +./sptrdiff00.at:30: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -228. acls01.at:25: 194. truncate.at:29: ok - skipped (xattr08.at:29) - skipped (xattr07.at:29) -236. onetop03.at:21: testing tar --one-top-level --transform ... -./onetop03.at:24: +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 +) + skipped (selnx01.at:28) + + + +235. onetop02.at:21: testing tar --one-top-level --show-transformed ... +./onetop02.at:24: mkdir v7 (cd v7 TEST_TAR_FORMAT=v7 @@ -18350,18 +19053,10 @@ 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 ) ---- - 2026-10-05 04:32:19.388651255 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/231/stdout 2026-10-05 04:32:19.385487690 +0000 -@@ -1,4 +1 @@ --security.selinux="system_u --security.selinux="unconfined_u --security.selinux="system_u - - skipped (acls02.at:28) - skipped (acls01.at:28) + 237. onetop04.at:21: testing tar --one-top-level --transform ... ./onetop04.at:24: mkdir v7 @@ -18381,7 +19076,36 @@ tar cf a.tar a c tar -tf a.tar --one-top-level --transform 's/c/d/' --show-transformed | sort ) -230. acls03.at:30: 239. gtarfail.at:21: testing gtarfail ... + +--- - 2025-09-01 22:15:31.617478796 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/232/stdout 2025-09-01 22:15:31.610879430 +0000 +@@ -1,2 +1 @@ +-separator + +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 v7" +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 +) + +239. gtarfail.at:21: testing gtarfail ... ./gtarfail.at:26: test -z "$STAR_TESTSCRIPTS" && exit 77 @@ -18390,6 +19114,28 @@ tar --utc -tvf $STAR_TESTSCRIPTS/gtarfail.tar +240. gtarfail2.at:21: testing gtarfail2 ... +./gtarfail2.at:26: + +test -z "$STAR_TESTSCRIPTS" && exit 77 +tarball_prereq gtarfail2.tar 6b607d1faec14b82f69525d9c5b66e53 $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 + +tar --utc -tvf $STAR_TESTSCRIPTS/gtarfail2.tar + +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 <&- + 238. onetop05.at:21: testing tar --one-top-level restoring permissions ... ./onetop05.at:28: mkdir v7 @@ -18438,69 +19184,11 @@ echo "TOP: mode changed: $orig_mode != $mode" fi ) -231. selnx01.at:25: -240. gtarfail2.at:21: testing gtarfail2 ... -./gtarfail2.at:26: - -test -z "$STAR_TESTSCRIPTS" && exit 77 -tarball_prereq gtarfail2.tar 6b607d1faec14b82f69525d9c5b66e53 $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 - -tar --utc -tvf $STAR_TESTSCRIPTS/gtarfail2.tar - - skipped (selnx01.at:28) - - skipped (acls03.at:47) ---- - 2026-10-05 04:32:19.396040190 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/233/stdout 2026-10-05 04:32:19.393487690 +0000 +--- - 2025-09-01 22:15:31.653930202 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/233/stdout 2025-09-01 22:15:31.646879702 +0000 @@ -1,2 +1 @@ -dir/file = cap_chown=ei - ---- - 2026-10-05 04:32:19.396803616 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/232/stdout 2026-10-05 04:32:19.393487690 +0000 -@@ -1,2 +1 @@ --separator - -233. capabs_raw01.at:25: --- - 2026-10-05 04:32:19.398660855 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/239/stdout 2026-10-05 04:32:19.393487690 +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 - -232. selacl01.at:25: 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 <&- - - skipped (capabs_raw01.at:28) ---- - 2026-10-05 04:32:19.400799970 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/240/stdout 2026-10-05 04:32:19.397487690 +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 --drwxr-sr-x jes/glone 0 2001-12-10 00:00 build/ ---rw-r--r-- jes/glone 312019 2001-12-10 00:00 build/smake-1.2.tar.gz --drwxr-sr-x jes/glone 0 2001-11-09 18:20 build/psmake/ ---rwxr-xr-x jes/glone 259 2000-01-09 16:36 build/psmake/MAKE ---rwxr-xr-x jes/glone 4820 2001-02-25 22:45 build/psmake/MAKE.sh ---rw-r--r-- jes/glone 647 2001-02-25 23:50 build/psmake/Makefile --lrwxrwxrwx jes/glone 0 2001-08-29 10:53 build/psmake/archconf.c -> ../archconf.c --lrwxrwxrwx jes/glone 0 2001-08-29 10:54 build/psmake/astoi.c -> ../../lib/astoi.c - -239. gtarfail.at:21: 240. gtarfail2.at:21: skipped (selacl01.at:28) 242. ustar-big-2g.at:21: testing ustar-big-2g ... ./ustar-big-2g.at:26: test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 @@ -18514,82 +19202,21 @@ tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-2g.tar.bz2 - skipped (gtarfail.at:26) -./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 +230. acls03.at:30: 243. ustar-big-8g.at:21: testing ustar-big-8g ... +./ustar-big-8g.at:26: +test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 -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 -} +cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77 -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 -} +test -z "$STAR_TESTSCRIPTS" && exit 77 +tarball_prereq ustar-big-8g.tar.bz2 60ff503fa4b8288bef7ada89e9c91b0f $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 -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 +tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-8g.tar.bz2 - 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 -) - skipped (gtarfail2.at:26) ---- - 2026-10-05 04:32:19.406008438 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/241/stdout 2026-10-05 04:32:19.401487690 +0000 +232. selacl01.at:25: --- - 2025-09-01 22:15:31.662440240 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/241/stdout 2025-09-01 22:15:31.658879793 +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 @@ -18644,7 +19271,45 @@ --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 -./onetop01.at:24: +stderr: +stderr: +241. multi-fail.at:21: 233. capabs_raw01.at:25: --- - 2025-09-01 22:15:31.658663026 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/239/stdout 2025-09-01 22:15:31.654879763 +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 + +--- - 2025-09-01 22:15:32.010114116 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/240/stdout 2025-09-01 22:15:31.670879884 +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 +-drwxr-sr-x jes/glone 0 2001-12-10 00:00 build/ +--rw-r--r-- jes/glone 312019 2001-12-10 00:00 build/smake-1.2.tar.gz +-drwxr-sr-x jes/glone 0 2001-11-09 18:20 build/psmake/ +--rwxr-xr-x jes/glone 259 2000-01-09 16:36 build/psmake/MAKE +--rwxr-xr-x jes/glone 4820 2001-02-25 22:45 build/psmake/MAKE.sh +--rw-r--r-- jes/glone 647 2001-02-25 23:50 build/psmake/Makefile +-lrwxrwxrwx jes/glone 0 2001-08-29 10:53 build/psmake/archconf.c -> ../archconf.c +-lrwxrwxrwx jes/glone 0 2001-08-29 10:54 build/psmake/astoi.c -> ../../lib/astoi.c + + skipped (acls03.at:47) + skipped (selacl01.at:28) + skipped (capabs_raw01.at:28) +240. gtarfail2.at:21: --- - 2025-09-01 22:15:32.069496400 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/242/stdout 2025-09-01 22:15:32.062882848 +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 + +239. gtarfail.at:21: skipped (multi-fail.at:26) + skipped (gtarfail2.at:26) +188. verify.at:25: ok +./incr02.at:35: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -18653,32 +19318,44 @@ export TAR_OPTIONS rm -rf * +ckmtime || exit 77 +# Create directory structure +mkdir dir +mkdir dir/subdir1 +mkdir dir/subdir2 +genfile --length 10 --file dir/subdir1/file -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 -x -f ../a.tar -find . | sort -) -243. ustar-big-8g.at:21: testing ustar-big-8g ... -./ustar-big-8g.at:26: -test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 +# Save mtime for later comparison +genfile --stat=mtime dir/subdir1 > ts -cat /dev/null | bzip2 - > /dev/null 2>&1 || exit 77 +# Create an archive. Using incremental mode makes sure the +# archive will have a directory-first member ordering, +# i.e.: +# dir/ +# dir/subdir1/ +# dir/subdir2/ +# dir/subdir1/foofile +# +# When restoring from this directory structure, 'dir/subdir2/' used to +# trigger apply_nonancestor_delayed_set_stat() which restored stats for +# 'subdir1' prior to restoring 'dir/subdir1/foofile'. Then, restoring the +# latter clobbered the directory timestamp. +tar -cf archive -g db dir -test -z "$STAR_TESTSCRIPTS" && exit 77 -tarball_prereq ustar-big-8g.tar.bz2 60ff503fa4b8288bef7ada89e9c91b0f $STAR_TESTSCRIPTS $STAR_DATA_URL || exit 77 +# Move away the directory +mv dir orig +# Wait enough time for timestamps to differ in case of failure. +sleep 5 -tar --utc -tvjf $STAR_TESTSCRIPTS/ustar-big-8g.tar.bz2 +# Restore the directory +tar -xf archive dir -241. multi-fail.at:21: 244. pax-big-10g.at:21: testing pax-big-10g ... +# Check the timestamp +genfile --stat=mtime dir/subdir1 | diff ts - +) +244. pax-big-10g.at:21: testing pax-big-10g ... ./pax-big-10g.at:26: test "${TARTEST_SKIP_LARGE_FILES:-0}" != 0 && exit 77 @@ -18691,8 +19368,7 @@ tar --utc -tvjf $STAR_TESTSCRIPTS/pax-big-10g.tar.bz2 -stderr: - skipped (multi-fail.at:26) + skipped (gtarfail.at:26) ./onetop02.at:24: mkdir oldgnu (cd oldgnu @@ -18714,69 +19390,13 @@ tar --one-top-level --show-transformed -v -x -f ../a.tar find . | sort ) ---- - 2026-10-05 04:32:19.412867269 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/242/stdout 2026-10-05 04:32:19.409487690 +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 - -./onetop04.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 - -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 -) -stderr: -242. ustar-big-2g.at:21: stderr: -./onetop03.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 - -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 -) - skipped (ustar-big-2g.at:26) ---- - 2026-10-05 04:32:19.417114265 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/243/stdout 2026-10-05 04:32:19.413487690 +0000 +--- - 2025-09-01 22:15:32.086582172 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/243/stdout 2025-09-01 22:15:32.074882938 +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 ---- - 2026-10-05 04:32:19.418436562 +0000 -+++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/244/stdout 2026-10-05 04:32:19.413487690 +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 - -243. ustar-big-8g.at:21: 244. pax-big-10g.at:21: skipped (ustar-big-8g.at:26) - skipped (pax-big-10g.at:26) -./onetop05.at:28: +./onetop01.at:24: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -18785,53 +19405,6 @@ export TAR_OPTIONS rm -rf * -orig_mode=3702 -mkdir d -chmod $orig_mode d - -mode=$(genfile --stat=mode.7777 d) -test $mode = $orig_mode || exit 77 - -genfile --file d/file -tar -cf d.tar -C d . -rm -rf d - -(mkdir d1 -chmod 700 d1 -cd d1 -tar --one-top-level=top -xpf ../d.tar) -mode=$(genfile --stat=mode.777 d1) -if test 700 = $mode; then - echo "CWD: OK" -else - echo "CWD: mode changed: 700 != $mode" -fi - -mkdir d2 -chmod 700 d2 -tar -C d2 --one-top-level=top -xpf d.tar -mode=$(genfile --stat=mode.777 d2) -if test 700 = $mode; then - echo "DIR: OK" -else - echo "DIR: mode changed: 700 != $mode" -fi -mode=$(genfile --stat=mode.7777 d2/top) -if test $mode = $orig_mode; then - echo "TOP: OK" -else - echo "TOP: mode changed: $orig_mode != $mode" -fi -) -./onetop01.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 @@ -18844,7 +19417,7 @@ tar --one-top-level -x -f ../a.tar find . | sort ) -./onetop04.at:24: +./update04.at:23: mkdir ustar (cd ustar TEST_TAR_FORMAT=ustar @@ -18853,21 +19426,30 @@ 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.*' -test -z "`sort < /dev/null 2>&1`" || exit 77 +echo "Second update" +tar ufv archive --wildcards './file.*' -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 +echo "Non-matching pattern" +tar ufv archive --wildcards './file.*' './foo.*' +echo $? ) -./onetop02.at:24: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +stderr: +./onetop04.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 * @@ -18878,17 +19460,20 @@ 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 ) +--- - 2025-09-01 22:15:32.113635663 +0000 ++++ /build/reproducible-path/tar-1.35+dfsg/tests/testsuite.dir/at-groups/244/stdout 2025-09-01 22:15:32.106883180 +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 + ./onetop03.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 * @@ -18904,93 +19489,84 @@ tar --one-top-level --transform 's/c/d/' -x -f ../a.tar find . | sort ) -./onetop04.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +./extrac20.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 * 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 -) -./onetop01.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 -x -f ../a.tar -find . | sort -) -./onetop02.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * +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 +} -test -z "`sort < /dev/null 2>&1`" || exit 77 +clean() +{ + test $round = normal && cd .. >/dev/null + find $dir | sort + mv $dir $backup_dir +} -mkdir a -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 -) -./onetop03.at:24: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix -export TEST_TAR_FORMAT -TAR_OPTIONS="-H posix" -export TAR_OPTIONS -rm -rf * +# 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 -test -z "`sort < /dev/null 2>&1`" || exit 77 + # 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 -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 + 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 ) -./onetop05.at:28: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar +244. pax-big-10g.at:21: 242. ustar-big-2g.at:21: ./onetop05.at:28: +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 * @@ -19032,12 +19608,16 @@ echo "TOP: mode changed: $orig_mode != $mode" fi ) -./onetop04.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu + skipped (pax-big-10g.at:26) + skipped (ustar-big-2g.at:26) +243. ustar-big-8g.at:21: skipped (ustar-big-8g.at:26) +125. incr04.at:29: ok +./onetop03.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 * @@ -19048,14 +19628,17 @@ 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 +mkdir out +cd out +tar --one-top-level --transform 's/c/d/' -x -f ../a.tar +find . | sort ) -./onetop01.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./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 * @@ -19066,17 +19649,15 @@ genfile --file a/b genfile --file c tar cf a.tar a c -mkdir out -cd out -tar --one-top-level -x -f ../a.tar -find . | sort +tar -tf a.tar --one-top-level --transform 's/c/d/' --show-transformed | sort ) +124. incr03.at:28: ok ./onetop02.at:24: -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 * @@ -19092,12 +19673,12 @@ tar --one-top-level --show-transformed -v -x -f ../a.tar find . | sort ) -./onetop03.at:24: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu +./onetop01.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 * @@ -19110,16 +19691,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 -x -f ../a.tar find . | sort ) -237. onetop04.at:21: ok ./onetop05.at:28: -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 * @@ -19161,10 +19741,7 @@ echo "TOP: mode changed: $orig_mode != $mode" fi ) -234. onetop01.at:21: ok -235. onetop02.at:21: ok -236. onetop03.at:21: ok -./grow.at:27: +./multiv04.at:39: mkdir oldgnu (cd oldgnu TEST_TAR_FORMAT=oldgnu @@ -19173,187 +19750,29 @@ 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 -) -./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 -) -./onetop05.at:28: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -export TAR_OPTIONS -rm -rf * -orig_mode=3702 -mkdir d -chmod $orig_mode d +mkdir directory +awk 'BEGIN { for (i = 0; i < 1024; i++) printf("directory/%014x\n", i); }' &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 -) -./incr04.at:34: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -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 -) -./grow.at:27: +./incremental.at:26: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -19441,116 +19794,67 @@ 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 -) -./rename02.at:27: -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 structure +echo x >structure/file -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 +# 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 -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 +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 ) -./rename03.at:26: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./update02.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 * test -z "`sort < /dev/null 2>&1`" || exit 77 +mkdir a +genfile --file a/b -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 cf arc a -tar xfg arch.1 /dev/null --warning=no-timestamp +echo "separator" -echo "Begin directory listing 1" -find foo | sort -echo "End directory listing 1" +sleep 2 +touch a/b -tar xfgv arch.2 /dev/null --warning=no-timestamp -echo Begin directory listing 2 -find foo | sort -echo End directory listing 2 +tar ufv arc a +echo "separator" +tar tf arc | sort || exit 1 ) ./update04.at:23: -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 * @@ -19571,78 +19875,52 @@ tar ufv archive --wildcards './file.*' './foo.*' echo $? ) -./sptrdiff00.at:30: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./update01.at:32: +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 * -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 -) -./grow.at:27: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -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 -) -./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 +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 ) -./sptrcreat.at:36: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./onetop04.at:24: +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 -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') -195. grow.at:24: ok -181. sptrdiff00.at:26: ok -182. sptrdiff01.at:26: ok -180. sptrcreat.at:33: ok -./incr03.at:31: + +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 +) +138. rename02.at:24: ok +./onetop03.at:24: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -19651,38 +19929,19 @@ 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 +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 ) -./incr04.at:34: +./onetop01.at:24: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -19691,28 +19950,24 @@ 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 +test -z "`sort < /dev/null 2>&1`" || exit 77 -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 +mkdir a +genfile --file a/b +genfile --file c +tar cf a.tar a c +mkdir out +cd out +tar --one-top-level -x -f ../a.tar +find . | sort ) ./chtype.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 * @@ -19747,7 +20002,8 @@ tar -xf archive.2 --listed-incremental=/dev/null --warning=no-timestamp find directory | sort ) -./rename02.at:27: +119. listed01.at:26: ok +./onetop02.at:24: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -19759,39 +20015,52 @@ 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 +mkdir a +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 +) +./onetop04.at:24: +mkdir gnu +(cd gnu +TEST_TAR_FORMAT=gnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H gnu" +export TAR_OPTIONS +rm -rf * -mv foo old -tar xfg arch.1 /dev/null --warning=no-timestamp 2>tmperr -sort tmperr >&2 +test -z "`sort < /dev/null 2>&1`" || exit 77 -echo "Begin directory listing 1" -find foo | sort -echo "End directory listing 1" +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 +) +./sptrdiff01.at:30: +mkdir oldgnu +(cd oldgnu +TEST_TAR_FORMAT=oldgnu +export TEST_TAR_FORMAT +TAR_OPTIONS="-H oldgnu" +export TAR_OPTIONS +rm -rf * -tar xfgv arch.2 /dev/null --warning=no-timestamp -echo Begin directory listing 2 -find foo | sort -echo End directory listing 2 +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 ) -./rename03.at:26: +./onetop05.at:28: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -19800,59 +20069,51 @@ export TAR_OPTIONS rm -rf * +orig_mode=3702 +mkdir d +chmod $orig_mode d -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 +mode=$(genfile --stat=mode.7777 d) +test $mode = $orig_mode || exit 77 -tar xfg arch.1 /dev/null --warning=no-timestamp +genfile --file d/file +tar -cf d.tar -C d . +rm -rf d -echo "Begin directory listing 1" -find foo | sort -echo "End directory listing 1" +(mkdir d1 +chmod 700 d1 +cd d1 +tar --one-top-level=top -xpf ../d.tar) +mode=$(genfile --stat=mode.777 d1) +if test 700 = $mode; then + echo "CWD: OK" +else + echo "CWD: mode changed: 700 != $mode" +fi -tar xfgv arch.2 /dev/null --warning=no-timestamp -echo Begin directory listing 2 -find foo | sort -echo End directory listing 2 +mkdir d2 +chmod 700 d2 +tar -C d2 --one-top-level=top -xpf d.tar +mode=$(genfile --stat=mode.777 d2) +if test 700 = $mode; then + echo "DIR: OK" +else + echo "DIR: mode changed: 700 != $mode" +fi +mode=$(genfile --stat=mode.7777 d2/top) +if test $mode = $orig_mode; then + echo "TOP: OK" +else + echo "TOP: mode changed: $orig_mode != $mode" +fi ) -./update02.at:29: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +181. sptrdiff00.at:26: ok +./onetop03.at:24: +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 * @@ -19861,69 +20122,56 @@ 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 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 ) -./update01.at:32: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +./onetop01.at:24: +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 * - +237. onetop04.at:21: 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 +genfile --file c +tar cf a.tar a c +mkdir out +cd out +tar --one-top-level -x -f ../a.tar +find . | sort ) -./update04.at:23: -mkdir ustar -(cd ustar -TEST_TAR_FORMAT=ustar + ok +139. rename03.at:23: ok +./onetop02.at:24: +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 --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.*' +test -z "`sort < /dev/null 2>&1`" || exit 77 -echo "Non-matching pattern" -tar ufv archive --wildcards './file.*' './foo.*' -echo $? +mkdir a +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 ) ./exclude05.at:24: mkdir oldgnu @@ -19960,90 +20208,75 @@ rm -rf testdir exclfile ) -./incremental.at:26: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +234. onetop01.at:21: ok +./onetop05.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 * -ckmtime || exit 77 +orig_mode=3702 +mkdir d +chmod $orig_mode d -mkdir structure -echo x >structure/file +mode=$(genfile --stat=mode.7777 d) +test $mode = $orig_mode || exit 77 -# 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 +genfile --file d/file +tar -cf d.tar -C d . +rm -rf d -# 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 +(mkdir d1 +chmod 700 d1 +cd d1 +tar --one-top-level=top -xpf ../d.tar) +mode=$(genfile --stat=mode.777 d1) +if test 700 = $mode; then + echo "CWD: OK" +else + echo "CWD: mode changed: 700 != $mode" +fi -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 +mkdir d2 +chmod 700 d2 +tar -C d2 --one-top-level=top -xpf d.tar +mode=$(genfile --stat=mode.777 d2) +if test 700 = $mode; then + echo "DIR: OK" +else + echo "DIR: mode changed: 700 != $mode" +fi +mode=$(genfile --stat=mode.7777 d2/top) +if test $mode = $orig_mode; then + echo "TOP: OK" +else + echo "TOP: mode changed: $orig_mode != $mode" +fi ) -./listed01.at:29: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu +236. onetop03.at:21: ok +235. onetop02.at:21: ok +./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 * -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 +genfile --file foo --length 50000k +genfile --file baz +genfile --run=10 --checkpoint 10 --length 1024 --append foo -- tar -vcf bar foo baz ) -124. incr03.at:28: ok -125. incr04.at:29: ok -138. rename02.at:24: ok -139. rename03.at:23: ok ./update04.at:23: -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 * @@ -20064,7 +20297,9 @@ tar ufv archive --wildcards './file.*' './foo.*' echo $? ) -./chtype.at:30: +103. extrac20.at:21: ok +238. onetop05.at:21: ok +./update02.at:29: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -20076,72 +20311,6 @@ 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 -) -./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 - mkdir a genfile --file a/b @@ -20157,11 +20326,11 @@ tar tf arc | sort || exit 1 ) ./update01.at:32: -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 * @@ -20182,155 +20351,9 @@ echo "separator" tar tf arc | sort || exit 1 ) -./update04.at:23: -mkdir gnu -(cd gnu -TEST_TAR_FORMAT=gnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H gnu" -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 $? -) -./incr02.at:35: -mkdir oldgnu -(cd oldgnu -TEST_TAR_FORMAT=oldgnu -export TEST_TAR_FORMAT -TAR_OPTIONS="-H oldgnu" -export TAR_OPTIONS -rm -rf * - -ckmtime || exit 77 -# Create directory structure -mkdir dir -mkdir dir/subdir1 -mkdir dir/subdir2 -genfile --length 10 --file dir/subdir1/file - -# Save mtime for later comparison -genfile --stat=mtime dir/subdir1 > ts - -# Create an archive. Using incremental mode makes sure the -# archive will have a directory-first member ordering, -# i.e.: -# dir/ -# dir/subdir1/ -# dir/subdir2/ -# dir/subdir1/foofile -# -# When restoring from this directory structure, 'dir/subdir2/' used to -# trigger apply_nonancestor_delayed_set_stat() which restored stats for -# 'subdir1' prior to restoring 'dir/subdir1/foofile'. Then, restoring the -# latter clobbered the directory timestamp. - -tar -cf archive -g db dir - -# Move away the directory -mv dir orig - -# Wait enough time for timestamps to differ in case of failure. -sleep 5 - -# Restore the directory -tar -xf archive dir - -# Check the timestamp -genfile --stat=mtime dir/subdir1 | diff ts - -) -187. update04.at:20: ok -./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 - -) -119. listed01.at:26: ok -./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 -) 143. chtype.at:27: ok -./update02.at:29: +182. sptrdiff01.at:26: ok +./grow.at:27: mkdir posix (cd posix TEST_TAR_FORMAT=posix @@ -20339,50 +20362,28 @@ 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 ) -./update01.at:32: -mkdir posix -(cd posix -TEST_TAR_FORMAT=posix +187. update04.at:20: ok +180. sptrcreat.at:33: ok +155. time01.at:20: ok +./grow.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 * - -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 +genfile --file foo --length 50000k +genfile --file baz +genfile --run=10 --checkpoint 10 --length 1024 --append foo -- tar -vcf bar foo baz ) -160. multiv04.at:36: ok +116. incremental.at:23: ok +195. grow.at:24: ok ./update02.at:29: mkdir gnu (cd gnu @@ -20435,42 +20436,7 @@ echo "separator" tar tf arc | sort || exit 1 ) -./exclude05.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 - - -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 - -) -116. incremental.at:23: ok +160. multiv04.at:36: ok ./incr02.at:35: mkdir posix (cd posix @@ -20517,43 +20483,8 @@ # Check the timestamp genfile --stat=mtime dir/subdir1 | diff ts - ) -184. update01.at:29: ok 185. update02.at:26: ok -./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 - -) +184. update01.at:29: ok ./listed02.at:31: mkdir oldgnu (cd oldgnu @@ -20623,17 +20554,122 @@ echo Final files: find tart -print | sort 2>/dev/null ) -64. exclude05.at:21: ok +118. incr02.at:32: ok +./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 + +) +./exclude05.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 + + +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 + +) +120. listed02.at:28: ok +./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 + +) stdout: separator --rw-r--r-- pbuilder1/pbuilder1 1000 2026-10-05 04:32 begin --rw-r--r-- pbuilder1/pbuilder1 8589935104 2026-10-05 04:32 sparsefile --rw-r--r-- pbuilder1/pbuilder1 1000 2026-10-05 04:32 end +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-09-01 22:15 begin +-rw-r--r-- pbuilder2/pbuilder2 8589935104 2025-09-01 22:15 sparsefile +-rw-r--r-- pbuilder2/pbuilder2 1000 2025-09-01 22:15 end separator sparsefile 8589935104 171. sparse03.at:21: ok -118. incr02.at:32: ok -120. listed02.at:28: ok +64. exclude05.at:21: ok 173. sparse05.at:21: ok ## ------------- ## @@ -20651,7 +20687,7 @@ create-stamp debian/debhelper-build-stamp dh_prep dh_auto_install - make -j42 install DESTDIR=/build/reproducible-path/tar-1.35\+dfsg/debian/tmp AM_UPDATE_INFO_DIR=no + make -j40 install DESTDIR=/build/reproducible-path/tar-1.35\+dfsg/debian/tmp AM_UPDATE_INFO_DIR=no make[1]: Entering directory '/build/reproducible-path/tar-1.35+dfsg' Making install in doc make[2]: Entering directory '/build/reproducible-path/tar-1.35+dfsg/doc' @@ -20698,11 +20734,11 @@ 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' +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/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' + /usr/bin/install -c backup.sh dump-remind '/build/reproducible-path/tar-1.35+dfsg/debian/tmp/usr/sbin' make[3]: Leaving directory '/build/reproducible-path/tar-1.35+dfsg/scripts' make[2]: Leaving directory '/build/reproducible-path/tar-1.35+dfsg/scripts' Making install in po @@ -20790,45 +20826,45 @@ dh_perl dh_link dh_strip_nondeterminism - Normalized debian/tar/usr/share/locale/ca/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/ru/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/eu/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/id/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/sr/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/uk/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/sv/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/es/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/ga/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/gl/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/hu/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/ky/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/vi/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/de/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/it/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/zh_TW/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/eo/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/nl/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/ro/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/sr/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/fi/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/et/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/hr/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/ka/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/da/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/ga/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/tr/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/ms/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/it/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/zh_CN/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/vi/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/eu/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/da/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/nl/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/eo/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/ky/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/es/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/fr/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/el/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/zh_CN/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/pt/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/ko/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/bg/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/sk/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/tr/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/pl/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/hu/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/de/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/el/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/pt_BR/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/sl/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/bg/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/ko/LC_MESSAGES/tar.mo Normalized debian/tar/usr/share/locale/ja/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/ms/LC_MESSAGES/tar.mo - Normalized debian/tar/usr/share/locale/pl/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/id/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/ro/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/ka/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/fi/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/sv/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/ca/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/pt/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/zh_TW/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/ru/LC_MESSAGES/tar.mo + Normalized debian/tar/usr/share/locale/nb/LC_MESSAGES/tar.mo dh_compress dh_fixperms dh_missing @@ -20842,8 +20878,8 @@ dh_md5sums dh_builddeb dpkg-deb: building package 'tar' in '../tar_1.35+dfsg-3.1_amd64.deb'. -dpkg-deb: building package 'tar-dbgsym' in '../tar-dbgsym_1.35+dfsg-3.1_amd64.deb'. dpkg-deb: building package 'tar-scripts' in '../tar-scripts_1.35+dfsg-3.1_all.deb'. +dpkg-deb: building package 'tar-dbgsym' in '../tar-dbgsym_1.35+dfsg-3.1_amd64.deb'. dpkg-genbuildinfo --build=binary -O../tar_1.35+dfsg-3.1_amd64.buildinfo dpkg-genchanges --build=binary -O../tar_1.35+dfsg-3.1_amd64.changes dpkg-genchanges: info: binary-only upload (no source code included) @@ -20851,12 +20887,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/3455240/tmp/hooks/B01_cleanup starting +I: user script /srv/workspace/pbuilder/3455240/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/1557811 and its subdirectories -I: Current time: Sun Oct 4 16:33:00 -12 2026 -I: pbuilder-time-stamp: 1791174780 +I: removing directory /srv/workspace/pbuilder/3455240 and its subdirectories +I: Current time: Tue Sep 2 12:18:32 +14 2025 +I: pbuilder-time-stamp: 1756765112