python / python/cpython

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

Aberta
#133,667 2 comentários 0 reações 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

stdlib type-feature
Linguagem predominante
Python
Estrelas
77.2k
Forks
35.9k
Métricas de merge de PRs
Métricas de PR pendentes

Descrição

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

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Direção de pesquisa

Comece pelos pontos de entrada zipfile.ZipFile e ZipFile.write mencionados na proposta e, em seguida, rastreie como os metadados do sistema de arquivos são atribuídos quando arquivos compactados são criados no Windows, Mac e Linux. Está concluído quando a API consegue impor os metadados de arquivo FAT ou Unix solicitados independentemente do sistema operacional host, com o comportamento coberto por testes relevantes.

Escrita pelo modelo de indexação a partir do texto da issue.

Avaliação

Stack de tecnologia
python
Domínio
operating-systems, tooling
Tipo de issue
Funcionalidade
Dificuldade
4/5
Tempo estimado
3-5 dias
Status de atividade
Estagnada
Clareza
Razoavelmente clara
Facilidade para iniciantes
35/100

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.