python / python/cpython

Enable for ZipFile to specify to create archives of arbitrary windows FAT or Unix filesystem

Offen
#133,667 2 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

stdlib type-feature
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Feature or enhancement

Proposal:

Hi, as dev working with app designed for both Windows, Mac and Linux systems, I had recently automating with ZipFile task of repacking some internal ZIP archives. To automate the task even more, I created formulas for each of systems to be available on single script, on single call (and so on one machine) to create packages easier.

Unfortunately generated tasks were faulty,
I noticed, that same script performed on Linux or Windows created archives of different types - FAT or UNX, therefore output files were seen as invalid on opposite system.

To make the picture, my flow was:
start on particular OS (either Windows or Linux) ==> download archive from web (fixed format, UNX or FAT) ==> unpacking archive ==> creating new archive from files from previous ==> resulting archive has format from OS, overriding input archive (while I need the exact opposite)

Could I ask You to add possibility from code to enforce archiving files by chosen system , for instance like a compression method (like I chose LZMA), like I suggest below ? Or maybe if it is dependent on the format of the not yet archived input , could a similar flag enforce unpacking file in chosen filesystem , not being dependent on the used machine and OS?
I also provide some output from zipinfo console utility.

I attach some links that hopefully might present the issue,
https://en.wikipedia.org/wiki/FAT_filesystem_and_Linux
https://forensics.wiki/zip/#external-file-attributes

Best regards and have a good day, also feel free to contact me for more info, Wiktor

class zipfile.ZipFile(file, filesystem='FAT/UNX', ...
ZipFile.write(filename, filesystem='FAT/UNX', ...

class zipfile.ZipFile(file, filesystem='FAT/UNX', ... 
ZipFile.write(filename, filesystem='FAT/UNX', ...

packed on Windows

zipinfo ~/Downloads/win7.1.5_sandbox.zip
Archive: win7.1.5_sandbox.zip
Zip file size: 47379022 bytes, number of entries: 92
drwx--- 6.3 fat 0 bx stor 25-Mar-12 11:41 Debug/
....
-rwx--- 6.3 fat 20554528 bx lzma 25-Mar-11 16:17 someWinApp.exe
....
-rwx--- 6.3 fat 422168 bx lzma 25-Mar-11 16:18 someWinApp2.exe
92 files, 205285623 bytes uncompressed, 47362726 bytes compressed: 76.9%

packed on Mac

zipinfo ~/Downloads/mac7.1.4_sandbox.zip
Archive: mac7.1.4_sandbox.zip
Zip file size: 93026056 bytes, number of entries: 160
drwxr-xr-x 6.3 unx 0 bx stor 25-Feb-14 01:00 .package/
drwxr-xr-x 6.3 unx 0 bx stor 25-Feb-14 00:59 RuntimeRoots/
-rwxr-xr-x 6.3 unx 25375808 bx lzma 25-Feb-14 01:00 someApp
...
-rwxr-xr-x 6.3 unx 11167424 bx lzma 25-Feb-14 01:00 someApp2
....
-rwxr-xr-x 6.3 unx 2053072 bx someApp3
-rw-r--r-- 6.3 unx 4315 bx lzma 25-Feb-10 09:30 headerfile.h
160 files, 409689641 bytes uncompressed, 92994544 bytes compressed: 77.3%

Has this already been discussed elsewhere?

No response given

Links to previous discussion of this feature:

No response

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginnen Sie mit den im Vorschlag genannten Einstiegspunkten zipfile.ZipFile und ZipFile.write und verfolgen Sie anschließend nach, wie Dateisystemmetadaten zugewiesen werden, wenn Archive unter Windows, Mac und Linux erstellt werden. Die Aufgabe ist abgeschlossen, wenn die API die angeforderten FAT- oder Unix-Archivmetadaten unabhängig vom Host-Betriebssystem erzwingen kann und das Verhalten durch relevante Tests abgedeckt ist.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
python
Bereich
operating-systems, tooling
Issue-Typ
Feature
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Größtenteils klar
Anfängerfreundlichkeit
35/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.