Best Practices - Git Repo

Begonnen von DeeSPe, 16 März 2017, 16:29:38

Vorheriges Thema - Nächstes Thema

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

CoolTux

Na dann haben wir doch gleich Mal ein Thema für nachher mein Lieber.



Grüße
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

CoolTux

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.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Thorsten Pferdekaemper

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

 

FUIP

DeeSPe

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
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Sidey

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 :)
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker