A word about "compatibility" with other jdk tools...

jar is a specific tool. It was initially conceived to be user-friendly with users that are already familiar with tar tool:

"The syntax for the jar command resembles the syntax for the tar command."

Mixing-in behaviors not consistent with tar will make it a strange hybrid. Trying to find common ground with other JDK tools will make it less flexible.


Regards, Peter


On 29/06/2021 09:05, Peter Levart wrote:

Hi,

On 29/03/2021 12:46, Jaikiran Pai wrote:
Given the support of -C/-dir is new and -P is there for backwards compatibility then I see the choices are:

  * Issue an error when -P and -C/-dir are specified together with -x
  * Silently ignore the -P option
  * Ignore -C/-dir and the behavior is if -xfP was specified.


I am leaning towards an error given this is a new feature when -P and -C/-dir are specified with -x

That sounds reasonable to me. I'll update the PR accordingly to take this into account.

-Jaikiran


If we are trying to follow the semantics of tar -C option (gnutar and other Unix tar(s)) then I think -P may be combined with -C when extracting. The manpage for gnutar says:

       -C, --directory=DIR
              Change to DIR before performing any operations. This option is order-sensitive, i.e. it affects all options that follow.

...the meaning is that relative paths from archive get extracted relative to current dir (possibly modified by -C) and that absolute paths get extracted to their absolute positions (i.e. not affected by current dir). The -C option (as implemented by tar) is also useful when gathering files/dirs from different base paths into common archive structure. Say you have the following (relative) directory/file structure:

dir1/subdir1/a.txt
dir1/subdir1/b.txt
dir1/file1.txt
dir2/subdir2/a.txt
dir2/subdir2/b.txt
dir2/file2.txt

The command:

tar -cf archive.tar -C dir1 . -C ../dir2 .

...will create archive.tar with the following content (notice the 2nd -C option is dependent on the 1st: -C literally changes the current directory before executing further options):

./
./subdir1/
./subdir1/a.txt
./subdir1/b.txt
./file1.txt
./
./subdir2/
./subdir2/a.txt
./subdir2/b.txt
./file2.txt


When extracting, -C may be used to scatter different relative archive files/dirs into different base paths. For example, the archive.tar from above can be extracted into original directory structure with the following command (empty dir1 and dir2 have to be already present):

tar -xf archive.tar -C dir1 ./file1.txt ./subdir1 -C ../dir2 ./file2.txt ./subdir2


So here's a hint about the behavior of multiple -C options: if the option is -C, it should follow tar -C behavior.


Regards, Peter


Reply via email to