Hauptmenü

$VERSION

Begonnen von RichardCZ, 29 April 2020, 10:01:06

Vorheriges Thema - Nächstes Thema

RichardCZ

In der guten alten Zeit - als wir hier noch Subversion verwendet haben - wurde folgender Code verwendet um sich automatisch vom SVN die Version "hochziehen zu lassen":

our Readonly::Scalar $VERSION = (qw($Rev: 123456 $))[1];

Ansonsten gerne auch /1000 oder /10000 wenn einem die Zahlen zu groß werden. Der Tipp ist also für diejenigen, die sich nicht immer eine 4.0.1 o.ä. aus dem Knie schnitzen wollen.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Christoph Morrison

Hast du auch eine Idee für Git?

RichardCZ

Zitat von: Christoph Morrison am 29 April 2020, 15:05:40
Hast du auch eine Idee für Git?

Alle modernen Versionsverwaltungen haben keine fortlaufende Revisionsnummer mehr. Mercurial hatte noch eine "virtuelle", aber das war auch knickbar.

Git - im Gegensatz zu SVN - ist ja dezentral. Jeder hat lokal nicht nur die Sandbox, sondern auch das Repository.
Wessen Revision ist dann die "höchste"? Da sind die verwendeten hashes schon am nächsten bei der Wahrheit.

Um das aber auch für Menschen beherrschbar zu machen, würde ich vorschlagen eine datumsbasierte Version + Hash (präfix vom commit) zu verwenden:

200430-05bc2a

zum Bleistift. Das Datum gibt dem eine Ordnung/Sortierbarkeit, der Hash die Differenzierbarkeit bei gleichem Datum, bzw.
schnellem Lookup in der commit Historie.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Wzut

Bitte nochmal langsam Stück für Stück und zum mitschreiben :
a. wo soll die Zeile hin ? Irgendwo an den Anfang ?
wenn ja mault dann perlcritic :
Zitat$VERSION value should not come from outside module at line 85, column 22. 
If the version comes from outside the module, you can get everything from unexpected version changes to denial-of-service attacks
b. warum our und nicht my ?
c. die 123456 ist der default Wert ?
d. warum $Rev , schaut da der SVN Server genau da rauf wie heute beim $Id $ ?
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

RichardCZ

#4
Zitat von: Wzut am 30 April 2020, 08:33:59
Bitte nochmal langsam Stück für Stück und zum mitschreiben :
a. wo soll die Zeile hin ? Irgendwo an den Anfang ?
wenn ja mault dann perlcritic :b. warum our und nicht my ?
c. die 123456 ist der default Wert ?
d. warum $Rev , schaut da der SVN Server genau da rauf wie heute beim $Id $ ?

https://metacpan.org/pod/Perl::Critic::Policy::Modules::RequireVersionVar

a. Da wo man normalerweise die Zeile hat - meist am Anfang
Es wäre schon cool den Code zu sehen, den percritic anmeckert.

Die Meldung kommt von
https://metacpan.org/pod/Perl::Critic::Policy::ValuesAndExpressions::ProhibitComplexVersion
und ich würde jetzt meinen Du hast da irgendwo ein "use version;" Das ist in meinem Codebeispiel nicht drin.

b. siehe Link. Die Variable muss package scope und nicht lexically scope sein

c. wurst, wird nach dem ersten svn commit von SVN überschrieben

d. http://svnbook.red-bean.com/de/1.7/svn.advanced.props.special.keywords.html

svn pe svn:keywords .

-> dann Rev eintragen

Hmm. Ich sehe gerade das wird in FHEM überhaupt nicht verwendet. Dann wird's aber Zeit.
Wenn man schon archaische Technologie verwendet sollte man zumindest die Features nutzen,
die diese bietet.  Sonst ist das doch fürn Popo. ;)

edit: Holy Sh!t - jetzt sehe ich gerade man verwendet das für Id pro Datei. Ja ne is klar.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

betateilchen

c) man kann da auch überhaupt keinen Wert angeben und es wird funktionieren :)

Zitat von: RichardCZ am 30 April 2020, 10:21:47
edit: Holy Sh!t - jetzt sehe ich gerade man verwendet das für Id pro Datei. Ja ne is klar.

Ja, und die Existenz des keywords $Id im Modul wird sogar im pre-commit hook geprüft, der das Einchecken ablehnt, wenn es fehlt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

RichardCZ

#6
Theoretisch könnte man sich dann Rev sparen und

(qw($Id: 10_MAX.pm 21446 2020-03-18 18:07:50Z Wzut $))[3] # oder doch eher 2 ... ausprobieren

nehmen. Wobei ich jetzt den krassen pre-commit nicht untersucht habe ob der mit $Id an beliebiger Stelle im Source klarkommt.




Für gewöhnlich macht man die Property ja zumindest für das Quelltext Verzeichnis, aber was heißt schon "für gewöhnlich".

@Christoph Morrison: Die von mir vorgeschlagene datumsbasierte Versionierung kann man in Git mit smudge/clean Filtern
realisieren. Siehe:  https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes (Abschnitt "Keyword Expansion")
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.

Wzut

eher die [2] und mehr als einmal $Id $ klappt auch wenn die zweite mitten im Code steht :
$hash->{svn} = (qw($Id: 98_readingsWatcher.pm 21814 2020-04-30 11:15:34Z Wzut $))[2];
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

herrmannj

so mache ich (und andere) das. Nicht im Hinblick auf pbp - aber so sieht man die Rev im list eines device. In Kürze werde ich lernen dass das schöner geht ;) - aber 'you got the idea'

        my $cvsid = '$Id: 98_JsonMod.pm 21711 2020-04-17 23:29:22Z herrmannj $';
        $cvsid =~ s/^.*pm\s//;
        $cvsid =~ s/Z\s\S+\s\$$/ UTC/;
        $hash->{'SVN'} = $cvsid;

RichardCZ

Zitat von: herrmannj am 30 April 2020, 17:57:07
Nicht im Hinblick auf pbp - aber so sieht man die Rev im list eines device. In Kürze werde ich lernen dass das schöner geht ;)

Ne, das ist schon am schönsten so wie Du das hast.

Jetzt bin ich nur traurig, dass man in Deutschland heutzutage nicht den Unterschied zwischen Superlativ und Elativ zu schätzen weiß.
Witty House Infrastructure Processor (WHIP) is a modern and
comprehensive full-stack smart home framework for the 21st century.