donderdag 18 oktober 2012

Schrödinger's tarball (or ZIP file)

Ever so often I download a piece of software or source code packaged in a .tar.gz, .tgz or .zip file and unwittingly unpackage it inside a directory that already has a lot of other stuff in it. What I expect if I untar a file called CoolSourceCode.tgz, is that it will contain a directory CoolSourceCode with everything else inside it, for instance:

CoolSourceCode.tgz contents:
CoolSourceCode/
CoolSourceCode/Makefile
CoolSourceCode/cool.h
CoolSourceCode/main.cpp
CoolSourceCode/stuff.cpp

What I often get however, is a load of loose files at the root of the archive, like this:

CoolSourceCode.tgz contents:
Makefile
cool.h
main.cpp
stuff.cpp

The result is that all these files are then spewed and littered across the other files in my directory, with a risk of overwriting existing files that happen to have identical names.

Of course I can avoid this by first looking at the contents of the archive or always unpacking it in a new empty directory. Now, it seems to me that every time I take those precautions, the archive has been properly packaged with a main directory. If I am too lazy to do it however, boom! I am mercilessly punished. I therefore believe the contents of each tarball I download are in a quantum state of having both a top-level directory, and not having it. When I observe the contents or prepare for the worst, it collapses to the first state, if I fail to observe it, it collapses to the second state.

The bottom line is: before tarring, zipping or whatever-ing an archive, please avoid tampering with quantum mechanics. Put your files in a single main directory and compress that directory as a whole.

Schrödingers tarball (of ZIP-archief)

Regelmatig download ik een softwareprogramma of broncode die verpakt zit in een .tar.gz, .tgz, .zip of een ander gecomprimeerd bestand. Zonder nadenken pak ik dit ding dan uit in een folder waar al een hoop andere bestanden inzitten. Wat ik verwacht als ik een archief getiteld CoolSourceCode.tgz uitpak, is dat het een folder CoolSourceCode bevat waar al de rest in zit, bijvoorbeeld:

Inhoud van CoolSourceCode.tgz:
CoolSourceCode/
CoolSourceCode/Makefile
CoolSourceCode/cool.h
CoolSourceCode/main.cpp
CoolSourceCode/stuff.cpp

Wat ik vaak krijg echter is een hoop losse bestanden in de ‘root’ van het archief, zoals:

Inhoud van CoolSourceCode.tgz:
Makefile
cool.h
main.cpp
stuff.cpp

Het gevolg is dat al die bestanden dan uitgespuwd en rondgeslingerd worden tussen de bestaande bestanden in mijn folder, met een risico op overschrijven van bestaande bestanden die toevallig dezelfde naam hadden.

Natuurlijk kan ik dit vermijden door eerst de inhoud van het archief te inspecteren of het altijd uit te pakken in een nieuwe lege folder. Nu, het lijkt mij dat telkens ik zulke voorzorgen neem, het archief mooi verpakt is met een hoofdfolder. Als ik echter te lui ben om dit te doen, boem! Ik word meedogenloos afgestraft. Daarom geloof ik dat de inhoud van elke ‘tarball’ die ik download in een kwantumtoestand verkeert van zowel een top-level folder te hebben, en ze niet te hebben. Als ik de inhoud observeer of mij voorbereid op het erste, vervalt de toestand naar zijn eerste mogelijkheid, bij het onvoorbereid uitpakken vervalt ze naar de tweede mogelijkheid.

Wat ik natuurlijk gewoon wil zeggen is: alvorens u een hoop bestanden samenpakt in een ZIP, TAR of ander archief, vermijd a.u.b. deze kwantummechanische problemen. Maak eerst een hoofdfolder, steek al de rest daarin, en comprimeer de hoofdfolder als één geheel.