On Wed, 07 Sep 2022 16:59:17 -0700, Nye Liu wrote:

> munin-graph does not seem to use Date::Manip at all, unless there is a
> hidden dependency that isn't obvious.

This also causes munin's autopkgtests to fail which blocks
libdate-manip-perl from migrating to testing.

Now it can be argued that Date::Manip sending warnings to STDERR is
not so clever but the old v5 interface _will_ be removed [0] so
munin has to do something at some point.

Originally I shared the impression that munin doesn't actively use
Date::Manip in the end:

  % grep -ri Date::Manip
  master/_bin/munin-cgi-graph.in:    $Date::Manip::Backend = 'DM5';
  master/_bin/munin-cgi-graph.in:use Date::Manip;
  master/_bin/munin-graph.in:    # This is needed because Date::Manip has 
deprecated the functional
  master/_bin/munin-graph.in:    $Date::Manip::Backend = 'DM5';
  master/_bin/munin-graph.in:    $Date::Manip::Backend = 'DM5';
  master/_bin/munin-graph.in:use Date::Manip;
  ChangeLog:      Force usage of the DM5 Date::Manip backend

Looking at Date::Manip::Migration5to6(3pm): This document talks about
Date_Init(), Date_ConvTZ(), etc., and I don't find these two
functions anywhere in munin.

But, reading Date::Manip::DM5(3pm) and grepping a bit there's e.g.:

  % grep -r ParseDateString
  master/_bin/munin-cgi-graph.in:    my $ifmodsec = &UnixDate (&ParseDateString 
($since_string), "%s");
  master/_bin/munin-graph.in:    my $ifmodsec = &UnixDate (&ParseDateString 
($since_string), "%s");

Not sure if other functions than ParseDateString and UnixDate are
used somewhere … At least those 2 should work the same with the
Date::Manip::DM6 backend.

Contrary to the comment in the code, v6 _has_ a functional
interface; cf. Date::Manip::Interfaces(3pm)). Which is not
deprecated. And:

From Date::Manip::Interfaces(3pm):

  Use the default functional interface
       By including:

          use Date::Manip;

       in your script, one of the functional interfaces will be
       loaded. If you are running a version of perl older than 5.10,
       it will automatically be the version 5 interface. If you are
       running a newer version of perl, it will automatically load
       the version 6 interface.


So something like

#v+
--- a/master/_bin/munin-cgi-graph.in
+++ b/master/_bin/munin-cgi-graph.in
@@ -25,10 +25,6 @@
 use strict;
 use warnings;
 use IO::Handle;
-BEGIN {
-    no warnings;
-    $Date::Manip::Backend = 'DM5';
-}
 use Date::Manip;
 use POSIX qw(strftime locale_h);
 use CGI::Fast qw(:cgi);
--- a/master/_bin/munin-graph.in
+++ b/master/_bin/munin-graph.in
@@ -32,15 +32,6 @@
 use warnings;
 use IO::Handle;
 
-BEGIN {
-    # This is needed because Date::Manip has deprecated the functional
-    # interface in >= 6.x. So, we force the use of the 5.x API.
-    $Date::Manip::Backend = 'DM5';
-
-    # Double line here to avoid spurious warnings about D::M::Backend being
-    # used only once.
-    $Date::Manip::Backend = 'DM5';
-}
 use Date::Manip;
 use POSIX qw(strftime);
 use Time::HiRes qw(gettimeofday tv_interval);
#v-

might be enough.



Cheers,
gregor

[0] from Changes6.pod:
#=head1 VERSION 7.00 (expected 2024-12-01)
#    Remove DM5

-- 
 .''`.  https://info.comodo.priv.at -- Debian Developer https://www.debian.org
 : :' : OpenPGP fingerprint D1E1 316E 93A7 60A8 104D  85FA BB3A 6801 8649 AA06
 `. `'  Member VIBE!AT & SPI Inc. -- Supporter Free Software Foundation Europe
   `-   

Attachment: signature.asc
Description: Digital Signature

Reply via email to