Ich habe zur besseren Verteilung/Aktualisierung meines HOMEMODE Moduls das ganze nun auf Github zur Verfügung gestellt und eine entsprechende controls_HOMEMODE.txt erstellt.
Das Update klappt soweit in FHEM.
Da mir aber generell einiges an Erfahrung mit Versionierung und Verteilung fehlt, habe ich dazu ein paar Fragen.
- Wie kann ich die controls_HOMEMODE.txt automatisch erstellen lassen? Das kann doch nicht die Lösung sein die manuell erstellen zu müssen!?
- Beim manuellen Erstellen der controls_HOMEMODE.txt habe ich auf meinen beruflichen Windows System das Problem dass die Dateigröße im Explorer (Eigenschaften/Properties) eine andere ist als die wirkliche. Ich muss also jedes Mal mein Modul commiten und pushen, dann dieses per Webseite herunterladen und entpacken um dann die wirkliche Größe im Explorer zu ermitteln. Erst dann kann ich die richtige Größe in die controls_HOMEMODE.txt eintragen, commiten und pushen um das Update bereitzustellen. Zuhause auf dem Mac wird mir im Finder aber immer gleich die richtige Größe der Datei angezeigt. Mache ich was falsch?
- Ist das so üblich einen master (stable) und einen dev Branch zu führen?
Wie gesagt, mir fehlt hierzu einfach die Erfahrung.
Vielen Dank im Voraus.
Gruß
Dan
Zitat von: DeeSPe am 16 März 2017, 16:29:38
Das Update klappt soweit in FHEM.
Aber auch nur für Leute, die den Standard-update-Befehl von FHEM verwenden.
Zitat von: betateilchen am 16 März 2017, 16:56:06
Aber auch nur für Leute, die den Standard-update-Befehl von FHEM verwenden.
Das ist mir klar und habe ich auch darum so formuliert.
Mir geht es aber um die Dinge die ich nicht weiß! 8)
Gruß
Dan
Na dann haben wir doch gleich Mal ein Thema für nachher mein Lieber.
Grüße
Zitat von: CoolTux am 16 März 2017, 17:34:44
Na dann haben wir doch gleich Mal ein Thema für nachher mein Lieber.
Grüße
Sofern Du mich da beraten kann...! Gerne!
Gruß
Dan
Zitat von: DeeSPe am 16 März 2017, 17:35:41
Sofern Du mich da beraten kann...! Gerne!
Gruß
Dan
Ein bisschen bestimmt. Zu mindest was Versionierung an geht. Windows kenne ich nicht.
Hi,
ich bastle am HM485 auch unter Windows rum. Das Ding ist auch im Git.
Ich habe dazu eine Datei fhemupdate.control.hm485:
DIR FHEM/lib
DIR FHEM/lib/HM485
DIR FHEM/lib/HM485/Devices/xml
DIR FHEM/lib/HM485/HM485d
Da stehen also nur die speziellen Verzeichnisse drin.
Mit folgendem Perl-Coding wird die eigentliche controls-Datei gebaut:
#!/usr/bin/perl
# Creates control file for hm485
use IO::File;
use strict;
use warnings;
my @filelist2 = (
"FHEM/.*.pm",
"FHEM/lib/HM485/.*.pm",
"FHEM/lib/HM485/Devices/.*.pm",
"FHEM/lib/HM485/Devices/xml/.*.xml",
"FHEM/lib/HM485/HM485d/.*",
"www/pgm2/.*"
);
# Can't make negative regexp to work, so do it with extra logic
my %skiplist2 = (
# "www/pgm2" => ".pm\$",
);
# Read in the file timestamps
my %filetime2;
my %filesize2;
my %filedir2;
foreach my $fspec (@filelist2) {
$fspec =~ m,^(.+)/([^/]+)$,;
my ($dir,$pattern) = ($1, $2);
my $tdir = $dir;
opendir DH, $dir || die("Can't open $dir: $!\n");
foreach my $file (grep { /$pattern/ && -f "$dir/$_" } readdir(DH)) {
next if($skiplist2{$tdir} && $file =~ m/$skiplist2{$tdir}/);
my @st = stat("$dir/$file");
my @mt = localtime($st[9]);
$filetime2{"$tdir/$file"} = sprintf "%04d-%02d-%02d_%02d:%02d:%02d",
$mt[5]+1900, $mt[4]+1, $mt[3], $mt[2], $mt[1], $mt[0];
open(FH, "$dir/$file");
my $data = join("", <FH>);
close(FH);
$filesize2{"$tdir/$file"} = length($data); # $st[7];
$filedir2{"$tdir/$file"} = $dir;
}
closedir(DH);
}
my %controls = (hm485=>0);
foreach my $k (keys %controls) {
my $fname = "controls_$k.txt";
$controls{$k} = new IO::File ">$fname" || die "Can't open $fname: $!\n";
if(open(ADD, "fhemupdate.control.$k")) {
while(my $l = <ADD>) {
my $fh = $controls{$k};
print $fh $l;
}
close ADD;
}
}
my $cnt;
foreach my $f (sort keys %filetime2) {
my $fn = $f;
$fn =~ s/.txt$// if($fn =~ m/.pl.txt$/);
foreach my $k (keys %controls) {
my $fh = $controls{$k};
print $fh "UPD $filetime2{$f} $filesize2{$f} $fn\n"
}
}
foreach my $k (keys %controls) {
close $controls{$k};
}
Das muss man natürlich nicht so kompliziert machen, aber ich hatte mir das auch irgendwoher kopiert.
Ich glaube, der Teil, der das Windows-Dateilängenproblem löst ist das hier:
open(FH, "$dir/$file");
my $data = join("", <FH>);
close(FH);
$filesize2{"$tdir/$file"} = length($data); # $st[7];
D.h. jede Datei wird komplett eingelesen. Die Länge ist dann die Länge des eingelesenen Strings. Das klappt dann beim update sowohl auf Windows als auch auf Linux.
Gruß,
Thorsten
Danke Thorsten für die Bereitstellung Deines Codes.
So etwas in die Richtung hatte ich mir auch schon im Kopf zurecht gelegt.
Werde mir dann auch was zurecht basteln.
Viel wertvoller für mich an Deinen Informationen ist dass Du das per Skript machst und dass das Dateilängen Problem unter Windows wohl offensichtlich bekannt ist. Habe ich mich wohl zu doof angestellt was Passendes dazu per Google zu finden. :o
Dann warte ich einfach mit dem Check-in bis ich wieder an einem *nix sitze...
Gruß
Dan
Ich hab das für das Signalduino Repo mit einem pre commit hook gelöst.
Ein Perl Modul, welches die Dateigröße ermittelt liegt da auch :)