diff --git a/fhem/CHANGED b/fhem/CHANGED index 6f58a6c04..7801868fb 100644 --- a/fhem/CHANGED +++ b/fhem/CHANGED @@ -1,5 +1,6 @@ # Add changes at the top of the list. Keep it in ASCII, and 80-char wide. # Do not insert empty lines here, update check depends on it. + - feature: version: version command shows latest revision since last update - feature: 02_RSS: new attribute itemtitle - bugfix: 57_Calendar: weekly recurring events on several weekdays, that start around midnight diff --git a/fhem/FHEM/98_version.pm b/fhem/FHEM/98_version.pm index ade687d7c..8b965d7c0 100755 --- a/fhem/FHEM/98_version.pm +++ b/fhem/FHEM/98_version.pm @@ -7,7 +7,7 @@ use warnings; sub version_Initialize($$) { $cmds{version} = { Fn => "CommandVersion", - Hlp=>"[] [noheader],print SVN version of loaded modules"}; + Hlp=>"[|revision] [noheader],print SVN version of loaded modules"}; } ##################################### @@ -27,6 +27,7 @@ CommandVersion($$) my @files = map {$INC{$_}} keys %INC; push @files, $0; # path to fhem.pl push @ret, cfgDB_svnId() if(configDBUsed()); + @files = () if($param && $param eq "revision"); foreach my $fn (@files) { next unless($fn =~ /^(?:$modpath.?)?FHEM/ or $fn =~ /fhem.pl$/); # configDB my $mod_name = ($fn=~ /[\/\\]([^\/\\]+)$/ ? $1 : $fn); @@ -57,10 +58,15 @@ CommandVersion($$) push @ret, $line; } + my $fhem_revision = version_getRevFromControls(); + + $fhem_revision = "Latest Revision: $fhem_revision\n\n" if(defined($fhem_revision) && !$noheader); + @ret = map {/\$Id\: (\S+) (\S+) (.+?) \$/ ? sprintf("%-".$max."s %5d %s",$1,$2,$3) : $_} @ret; - @ret = sort {version_sortModules($a, $b)} grep {($param ne "" ? $_ =~ /$param/ : 1)} @ret; - return "no loaded modules found that match: $param" if($param ne "" && !@ret); - return ($noheader ? "" : sprintf("%-".$max."s %s","File","Rev Last Change\n\n")). + @ret = sort {version_sortModules($a, $b)} grep {($param ne "" ? /$param/ : 1)} @ret; + return "no loaded modules found that match: $param" if($param ne "" && $param ne "revision" && !@ret); + return (((!$param && !$noheader) || $param eq "revision") ? $fhem_revision : ""). + ($noheader || !@ret ? "" : sprintf("%-".$max."s %s","File","Rev Last Change\n\n")). trim(join("\n", grep (($_ =~ /^fhem.pl|\d\d_/), @ret))."\n\n". join("\n", grep (($_ !~ /^fhem.pl|\d\d_/), @ret)) ); @@ -87,6 +93,25 @@ sub version_sortModules($$) return uc($a_vals[0]) cmp uc($b_vals[0]); } +sub version_getRevFromControls(;$) +{ + my ($name) = @_; + $name = "fhem" unless(defined($name)); + my $control_file = AttrVal("global","modpath",".")."/FHEM/controls_$name.txt"; + my $revision; + + if(open(FH, $control_file)) { + while() { + if(/^REV\s+(\S+.*)$/) { + $revision = $1; + last; + } + } + close(FH); + } + return $revision; +} + 1; =pod @@ -96,19 +121,19 @@ sub version_sortModules($$)

version

    - version [<filter>] [noheader] + version [<filter>|revision] [noheader]

    List the version of fhem.pl and all loaded modules. The optional parameter - can be used to filter the ouput.

    - - The optional flag noheader disables the output of the header line (File, Rev, Last Change). - + can be used to filter the ouput. The special filter value "revision" shows + only the latest revision number since the last update.

    + The optional flag noheader disables the output of the header lines (Latest Revision, File, Rev, Last Change).

    Example output of version:

      + Latest Revision: 10814

      File             Rev   Last Change

      - fhem.pl          10397 2016-01-07 08:36:49Z rudolfkoenig
      + fhem.pl          10769 2016-02-08 12:11:51Z rudolfkoenig
      90_at.pm         10048 2015-11-29 14:51:40Z rudolfkoenig
      98_autocreate.pm 10165 2015-12-13 11:14:15Z rudolfkoenig
      00_CUL.pm        10146 2015-12-10 10:17:42Z rudolfkoenig
      @@ -140,18 +165,20 @@ sub version_sortModules($$)

      version

        - version [<filter>] [noheader] + version [<filter>|revision] [noheader]

        Gibt die Versionsinformation von fhem.pl und aller geladenen Module aus. Mit - der optionalen Parameter kann man die Ausgabe filtern. + dem optionalen Parameter kann man die Ausgabe filtern. Der spezielle Filterwert "revision" + zeigt nur die aktuellste Revisions-Nummer seit dem letzten Update an.

        - Der optionale Parameter noheader unterdrückt die Ausgabe des Listenkopf (File, Rev, Last Change). + Der optionale Parameter noheader unterdrückt die Ausgabe des Listenkopfs (Latest Revision, File, Rev, Last Change).

        Beispiel der Ausgabe von version:

          + Latest Revision: 10814

          File             Rev   Last Change

          - fhem.pl          10397 2016-01-07 08:36:49Z rudolfkoenig
          + fhem.pl          10769 2016-02-08 12:11:51Z rudolfkoenig
          90_at.pm         10048 2015-11-29 14:51:40Z rudolfkoenig
          98_autocreate.pm 10165 2015-12-13 11:14:15Z rudolfkoenig
          00_CUL.pm        10146 2015-12-10 10:17:42Z rudolfkoenig
          @@ -164,14 +191,14 @@ sub version_sortModules($$)

            File             Rev   Last Change

            - fhem.pl          10397 2016-01-07 08:36:49Z rudolfkoenig
            + fhem.pl          10769 2016-02-08 12:11:51Z rudolfkoenig

          Beispiel der Ausgabe von version fhem.pl noheader:

            - fhem.pl 10397 2016-01-07 08:36:49Z rudolfkoenig
            + fhem.pl 10769 2016-02-08 12:11:51Z rudolfkoenig