]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
tar: demote -xa from error to a warning 1626/head
authorEmil Velikov <emil.l.velikov@gmail.com>
Sun, 21 Nov 2021 18:05:19 +0000 (18:05 +0000)
committerEmil Velikov <emil.l.velikov@gmail.com>
Sun, 21 Nov 2021 18:40:47 +0000 (18:40 +0000)
It's fairly common for people to use caf and xaf on Linux. The former in
itself being GNU tar specific - libarchive tar does not allow xa.

While it makes little sense to use xaf with libarchive tar, that is
implementation detail which gets in the way when trying to write trivial
tooling/scripts.

For the sake of compatibility, reduce the error to a warning and augment
the message itself. Making it clear that the option makes little sense.

Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
tar/bsdtar.c

index df0930ae09c2aeb01915f871881fbfe1a0949452..8a88f882d78776a9ee29de0ce973a1c7ee354aa7 100644 (file)
@@ -804,8 +804,14 @@ main(int argc, char **argv)
                    "Must specify one of -c, -r, -t, -u, -x");
 
        /* Check boolean options only permitted in certain modes. */
-       if (bsdtar->flags & OPTFLAG_AUTO_COMPRESS)
-               only_mode(bsdtar, "-a", "c");
+       if (bsdtar->flags & OPTFLAG_AUTO_COMPRESS) {
+               only_mode(bsdtar, "-a", "cx");
+               if (bsdtar->mode == 'x') {
+                       bsdtar->flags &= ~OPTFLAG_AUTO_COMPRESS;
+                       lafe_warnc(0,
+                           "Ignoring option -a in mode -x");
+               }
+       }
        if (bsdtar->readdisk_flags & ARCHIVE_READDISK_NO_TRAVERSE_MOUNTS)
                only_mode(bsdtar, "--one-file-system", "cru");
        if (bsdtar->flags & OPTFLAG_FAST_READ)