[Dresden-pm] Frage wegen Versionsangaben

Aristoteles Pagaltzis pagaltzis at gmx.de
So Nov 8 21:57:41 PST 2009


Sorry, daß ich auf einen so alten Thread antworte. :-) Ich bin
lange nicht dazu gekommen, meine Perlmongers-Abos zu lesen. Aber
ich wollte dieses Thema nicht unkommentiert verstreichen lassen.

* Steffen Winkler <steffen.winkler at gmx.net> [2009-10-07 07:35]:
> use version; our $VERSION = qv('0.4');

Das ist nicht notwendigerweise die beste Idee. Siehe
http://www.dagolden.com/index.php/369/version-numbers-should-be-boring/


* Steffen Schwigon <ss5 at renormalist.net> [2009-10-07 23:20]:
> Wenn Du ein Paket hast und dieses eine Versionsnummer hat, dann
> brauchen die darin enthaltenen Skripte und Module IMHO *keine*
> eigene Version.
>
> Falls sie nun aber mal eine haben, dann zaehl diese einzeln nur
> dort hoch, wo sich wirklich was aendert, denn nur dann erfuellt
> die Version auch einen Zweck, Du kannst ein oft angefasstes
> Skript von einem selten geaenderten unterscheiden.

Beidem würde ich entschieden wiedersprechen. Das klingt zwar
»richtig«, auf Basis dessen, was logisch gesehen der Fall ist.
Früher hätte auch ich genauso argumentiert, denn das ist doch,
was hier wirklich vorgeht.

Aber du vermischt hier, wie mein früheres Ich und sehr viele
andere Leute auch, zwei Konzepte miteinander, die orthogonal
sind: die Revisionsnummer einer Datei und die Herausgabenummer
eines Pakets.

        Die Herausgabenummer des Pakets sollte immer
        in ALLEN DATEIEN des Pakets enthalten sein.

Warum?

Stell dir vor, daß aus irgend einem Grunde ein Upgrade beim
Benutzer schiefgeht. Oder mal in tiefer Vergangenheit
schiefgegangen ist. Oder vielleicht hat er ein Backup partiell
zurückgespielt. Oder was auch immer.

Ergebnis: irgendwie, man weiß nicht wie, ist ein Mischmasch aus
Dateien von verschiedenen Versionen des Pakets zustandgekommen.
Und möglicherweise still und leise, ohne daß der Benutzer es
gemerkt hat.

Jetzt hat er plötzlich einen merkwürdigen Bug, der letztlich auf
diese Vermischung zurückgeht.

Stell dir vor, wie die Debugging-Session jetzt aussehen würde.
Wenn die alle Dateien des Pakets die Herausgabenummer des Pakets
nennen, zu der sie gehören, dann bestünde immerhin eine Chance,
ohne *zu* viel Zeitverlust festzustellen, wo das Problem
tatsächlich herkommt. Wenn die Dateien dagegen *keinen* solchen
Stempel tragen, dann wird es sehr viel schwieriger, auch nur
darauf zu kommen, daß das Problem durch so eine Mischung von
inkompatiblen Dateirevisionen hervorgerufen worden sein könnte.

Die Dateirevision ist natürlich ein von der Releasenummer des
Pakets unabhängiges Konzept. Es ist völlig sinnvoll, so wie du
schreibst, *diese* Nummer nur hochzuzählen, wenn die jeweilige
Datei sich auch tatsächlich geändert hat.

Aber es sollte immer explizit aufgeführt sein, welche Release und
Dateirevision zusammengehören.

Man muss dazu nun nicht unbedingt die Paketherausgabenummer in
allen einzelnen Dateien festhalten – man könnte zB im Hauptmodul
des Pakets die zu seiner Releasenummer gehörigen Revisionsnummern
aller einzelnen Dateien auflisten. Wichtig ist eben nur, daß die
klare Verbindung zwischen Release und Revision hergestellt ist.

Aber alle Ansätze, die das in irgendeiner Form durch Indirektion
erzielen, statt die Releasenummer direkt in die einzelnen Dateien
einzutragen, ist letztlich komplizierter und fehleranfälliger als
der »simplest thing that can possibly work«-Ansatz.

Und darum würde ich das so machen.

Gruß,
-- 
Aristoteles Pagaltzis // <http://plasmasturm.org/>


Mehr Informationen über die Mailingliste Dresden-pm