Autor Thema: Best Practices - Git Repo  (Gelesen 408 mal)

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3247
  • Wer anderen eine Bratwurst brät...
Best Practices - Git Repo
« am: 16 März 2017, 16:29:38 »
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
FHEM 5.8, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 13525
  • Das "S" in "IoT" steht für "Security"
Antw:Best Practices - Git Repo
« Antwort #1 am: 16 März 2017, 16:56:06 »
Das Update klappt soweit in FHEM.

Aber auch nur für Leute, die den Standard-update-Befehl von FHEM verwenden.
-----------------------
Nächster Hamburg-Stammtisch: 15.12.2017

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3247
  • Wer anderen eine Bratwurst brät...
Antw:Best Practices - Git Repo
« Antwort #2 am: 16 März 2017, 17:24:13 »
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
FHEM 5.8, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11133
Antw:Best Practices - Git Repo
« Antwort #3 am: 16 März 2017, 17:34:44 »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3247
  • Wer anderen eine Bratwurst brät...
Antw:Best Practices - Git Repo
« Antwort #4 am: 16 März 2017, 17:35:41 »
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
FHEM 5.8, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert

Online CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 11133
Antw:Best Practices - Git Repo
« Antwort #5 am: 16 März 2017, 17:37:56 »
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier

Online Thorsten Pferdekaemper

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3997
  • Finger weg von der fhem.cfg
Antw:Best Practices - Git Repo
« Antwort #6 am: 16 März 2017, 20:40:16 »
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

 

RasPi
Heizkessel-Steuerung per Arduino und HTTPMOD
und einen Haufen Homematic (Wired)

Online DeeSPe

  • Developer
  • Hero Member
  • ****
  • Beiträge: 3247
  • Wer anderen eine Bratwurst brät...
Antw:Best Practices - Git Repo
« Antwort #7 am: 17 März 2017, 00:54:27 »
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
FHEM 5.8, Brix, VIVO mini, RPi3, Debian Jessie, ZME_UZB1
HM-CFG-LAN, HM-MOD-UART-WIFI, HUE, HarmonyHub, JeeLink, CO20
Hyperion auf RPi Zero W, Sonos, viel Z-Wave und HM
alles per HomeKit steuerbar
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert

Offline Sidey

  • Developer
  • Hero Member
  • ****
  • Beiträge: 1773
Antw:Best Practices - Git Repo
« Antwort #8 am: 17 März 2017, 09:01:24 »
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, HMLan, Raspberry Pi, Mysensors, ArduinoSensor

 

decade-submarginal