mate-desktop / engrampa

A file archiver for MATE
http://www.mate-desktop.org
GNU General Public License v2.0
106 stars 52 forks source link

Cannot create zip archives with 7-Zip 23.01 installed #502

Open NinjaCowboy opened 7 months ago

NinjaCowboy commented 7 months ago

Expected behaviour

Engrampa should be able to create zip files from Caja's context menu or the command-line.

Actual behaviour

Attempting to do so results in an error popup saying "An error occurred while adding files to the archive.".

Steps to reproduce the behaviour

  1. Install engrampa and 7-Zip 23.01 (other versions of 7-Zip may be affected, but this is the one I have installed).
  2. Create a simple text file called hello.txt
  3. Open a terminal in the same directory as hello.txt and run the following command: engrampa -a test.zip hello.txt
  4. Engrampa will be unable to create the archive and show an error.

MATE general version

1.26.1

Package version

engrampa-1.26.1_1

Linux Distribution

Void Linux

Link to bugreport of your Distribution (requirement)

Additional Information

This appears to be caused by engrampa passing an invalid -l switch to 7z. Running strace (strace -f -e trace=execve -s 200 engrampa -a test.zip hello.txt) reveals that engrampa passes the -l switch to 7z, which doesn't seem to be available (at least not in this version).

[pid  5736] execve("/usr/bin/7z", ["7z", "a", "-tzip", "-mem=AES128", "-bd", "-y", "-l", "-mx=7", "--", "/home/ninja/.fr-Y9V8HS/test.zip", "hello.txt"], 0x55e008297560 /* 45 vars */) = 0
[pid  5736] +++ exited with 7 +++

Running /usr/bin/7z a -tzip -mem=AES128 -bd -y -l -mx=7 -- /home/ninja/test.zip hello.txt gives an error.

Command Line Error:
Unknown switch:
-l

The output of 7z --help on my system does not mention the -l switch at all, but it is mentioned in some online manpages.

7-Zip (z) 23.01 (x64) : Copyright (c) 1999-2023 Igor Pavlov : 2023-06-20
 64-bit locale=en_US.UTF-8 Threads:4 OPEN_MAX:1024

Usage: 7zz <command> [<switches>...] <archive_name> [<file_names>...] [@listfile]

<Commands>
  a : Add files to archive
  b : Benchmark
  d : Delete files from archive
  e : Extract files from archive (without using directory names)
  h : Calculate hash values for files
  i : Show information about supported formats
  l : List contents of archive
  rn : Rename files in archive
  t : Test integrity of archive
  u : Update files to archive
  x : eXtract files with full paths

<Switches>
  -- : Stop switches and @listfile parsing
  -ai[r[-|0]]{@listfile|!wildcard} : Include archives
  -ax[r[-|0]]{@listfile|!wildcard} : eXclude archives
  -ao{a|s|t|u} : set Overwrite mode
  -an : disable archive_name field
  -bb[0-3] : set output log level
  -bd : disable progress indicator
  -bs{o|e|p}{0|1|2} : set output stream for output/error/progress line
  -bt : show execution time statistics
  -i[r[-|0]]{@listfile|!wildcard} : Include filenames
  -m{Parameters} : set compression Method
    -mmt[N] : set number of CPU threads
    -mx[N] : set compression level: -mx1 (fastest) ... -mx9 (ultra)
  -o{Directory} : set Output directory
  -p{Password} : set Password
  -r[-|0] : Recurse subdirectories for name search
  -sa{a|e|s} : set Archive name mode
  -scc{UTF-8|WIN|DOS} : set charset for console input/output
  -scs{UTF-8|UTF-16LE|UTF-16BE|WIN|DOS|{id}} : set charset for list files
  -scrc[CRC32|CRC64|SHA1|SHA256|*] : set hash function for x, e, h commands
  -sdel : delete files after compression
  -seml[.] : send archive by email
  -sfx[{name}] : Create SFX archive
  -si[{name}] : read data from stdin
  -slp : set Large Pages mode
  -slt : show technical information for l (List) command
  -snh : store hard links as links
  -snl : store symbolic links as links
  -sni : store NT security information
  -sns[-] : store NTFS alternate streams
  -so : write data to stdout
  -spd : disable wildcard matching for file names
  -spe : eliminate duplication of root folder for extract command
  -spf[2] : use fully qualified file paths
  -ssc[-] : set sensitive case mode
  -sse : stop archive creating, if it can't open some input file
  -ssp : do not change Last Access Time of source files while archiving
  -ssw : compress shared files
  -stl : set archive timestamp from the most recently modified file
  -stm{HexMask} : set CPU thread affinity mask (hexadecimal number)
  -stx{Type} : exclude archive type
  -t{Type} : Set type of archive
  -u[-][p#][q#][r#][x#][y#][z#][!newArchiveName] : Update options
  -v{Size}[b|k|m|g] : Create volumes
  -w[{path}] : assign Work directory. Empty path means a temporary directory
  -x[r[-|0]]{@listfile|!wildcard} : eXclude filenames
  -y : assume Yes on all queries
xuzhen commented 7 months ago

The -l option only exists in p7zip 4.20+, 7-zip has never had it.

yangfl commented 6 months ago

Also affects Debian, engrampa 1.26.1-2 and 7zip 23.01+dfsg-7

zhuyaliang commented 5 months ago

The name of the 7zip binary program has been changed in Debian debian-7zip 7zip-org

    7zz  (7-Zip) - standalone full version of 7-Zip that supports all formats. 

    7zzs (7-Zip) - standalone full version of 7-Zip that supports all formats (static library linking).

    7z  (p7zip) - 7-Zip that requires 7z.so shared library, and it supports all formats via 7z.so.

    7zr (p7zip) - standalone reduced version of 7-Zip that supports some 7-Zip's formats:
                  7z, xz, lzma and split.

    7za (p7zip) - standalone version of 7-Zip that supports some main formats: 
                  7z, xz, lzma, zip, bzip2, gzip, tar, cab, ppmd and split.
zhuyaliang commented 5 months ago

@NinjaCowboy Why does the -l parameter appear.

       if (recursive)
               fr_process_add_arg (comm->process, "-l");

recursive has always been FALSE

zhuyaliang commented 2 months ago

@NinjaCowboy Can we close this issue