Package: devscripts
Version: 2.21.3+deb11u1
Severity: wishlist
Tags: patch

Dear Maintainer,

I'm maintaining a package for which things are bit unusual. I would like that 
on tracker.debian.org & qa.debian.org which rely on 
https://qa.debian.org/cgi-bin/watch report if there is a new upstream version 
available.

In my case, I need to get the latest version from an XML file.
This files contains a date/time which is used to determine the version of the 
package in debian in the format of a timestamp.

In the usptream XML there is:
<!--Generated on 2023-06-08 14:28:41.521115 with ADRT.-->

The debian package version would be
1686227321

Now concerning uscan, I would need the ability to convert 
from "2023-06-08 14:28:41.521115" to "1686227321"

I tried with `uversionmangle="s///e"` (ie with 'e' flag), something like this 
`'s/(.*)/({ eval "date --date$1 +%s"})/ee'` but this returns: 'flags must 
consist of "gix"'.
And maybe this would be some security issue to support that "e" flag.

Maybe it would be safer to support a "date" operation in mangle formulas.

You can find attached a patch which would add support for:
`uversionmangle=date//%s/`

It converts the input to the format given in parameter (here %s) and run date 
--date='input' +%d

You may update/fix/improve that patch, perl is rather foreign to me. I just 
wanted to check if that would be possible.

That feature may also be useful for those having to convert date/time between 
upstream format & debian format. For example like:

YYYY-MM-DD → YYYYMMDD
DD-MM-YYYY → YYYYMMDD
DDMMYYYY → YYYYMMDD
YYYY-MM-DD → TIMESTAMP
TIMESTAMP → YYYYMMDD
...

Regards
Fab

-- Package-specific info:

--- /etc/devscripts.conf ---
Empty.

--- ~/.devscripts ---
Empty.

-- System Information:
Debian Release: 11.7
  APT prefers oldstable-updates
  APT policy: (991, 'oldstable-updates'), (991, 'oldstable-security'), (991, 
'oldstable'), (990, 'oldstable-proposed-updates'), (380, 'oldoldstable'), 
(379, 'oldoldstable-updates'), (370, 'oldoldstable'), (95, 'testing'), (93, 
'experimental')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 5.10.0-23-amd64 (SMP w/4 CPU threads)
Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=fr_FR.UTF-8, LC_CTYPE=fr_FR.UTF-8 (charmap=UTF-8), 
LANGUAGE=fr:en_US
Shell: /bin/sh linked to /usr/bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages devscripts depends on:
ii  dpkg-dev              1.20.12
ii  fakeroot              1.25.3-1.1
ii  file                  1:5.39-3
ii  gnupg                 2.2.27-2+deb11u2
ii  gpgv                  2.2.27-2+deb11u2
ii  libc6                 2.31-13+deb11u6
ii  libfile-dirlist-perl  0.05-2
ii  libfile-homedir-perl  1.006-1
ii  libfile-touch-perl    0.11-1
ii  libfile-which-perl    1.23-1
ii  libipc-run-perl       20200505.0-1
ii  libmoo-perl           2.004004-1
ii  libwww-perl           6.52-1
ii  patchutils            0.4.2-1
ii  perl                  5.32.1-4+deb11u2
ii  python3               3.9.2-3
ii  sensible-utils        0.0.14
ii  wdiff                 1.2.2-2+b1

Versions of packages devscripts recommends:
ii  apt                         2.2.4
ii  curl                        7.74.0-1.3+deb11u7
ii  dctrl-tools                 2.24-3+b1
ii  debian-keyring              2021.07.26
ii  dput                        1.1.0
ii  equivs                      2.3.1
ii  libdistro-info-perl         1.0
ii  libdpkg-perl                1.20.12
ii  libencode-locale-perl       1.05-1.1
ii  libgit-wrapper-perl         0.048-1
ii  libgitlab-api-v4-perl       0.26-1
ii  liblist-compare-perl        0.55-1
ii  liblwp-protocol-https-perl  6.10-1
ii  libsoap-lite-perl           1.27-1
ii  libstring-shellquote-perl   1.04-1
ii  libtry-tiny-perl            0.30-1
ii  liburi-perl                 5.08-1
ii  licensecheck                3.1.1-2
ii  lintian                     2.104.0
ii  man-db                      2.9.4-2
ii  patch                       2.7.6-7
ii  pristine-tar                1.49
ii  python3-apt                 2.2.1
ii  python3-debian              0.1.39
ii  python3-magic               2:0.4.20-3
ii  python3-requests            2.25.1+dfsg-2
ii  python3-unidiff             0.5.5-2
ii  python3-xdg                 0.27-2
ii  strace                      5.10-1
ii  unzip                       6.0-26+deb11u1
ii  wget                        1.21-1+deb11u1
ii  xz-utils                    5.2.5-2.1~deb11u1

Versions of packages devscripts suggests:
pn  adequate                                  <none>
pn  at                                        <none>
ii  autopkgtest                               5.16
pn  bls-standalone                            <none>
ii  build-essential                           12.9
pn  check-all-the-things                      <none>
pn  cvs-buildpackage                          <none>
ii  debhelper                                 13.3.4
pn  devscripts-el                             <none>
pn  diffoscope                                <none>
pn  disorderfs                                <none>
pn  dose-extra                                <none>
pn  duck                                      <none>
pn  faketime                                  <none>
pn  gnuplot                                   <none>
pn  how-can-i-help                            <none>
ii  libauthen-sasl-perl                       2.1600-1.1
pn  libdbd-pg-perl                            <none>
ii  libfile-desktopentry-perl                 0.22-2
pn  libnet-smtps-perl                         <none>
pn  libterm-size-perl                         <none>
ii  libtimedate-perl                          2.3300-2
pn  libyaml-syck-perl                         <none>
ii  mailutils [mailx]                         1:3.10-3+b1
pn  mmdebstrap                                <none>
pn  mozilla-devscripts                        <none>
pn  mutt                                      <none>
ii  openssh-client [ssh-client]               1:8.4p1-5+deb11u1
pn  piuparts                                  <none>
ii  postgresql-client-13 [postgresql-client]  13.11-0+deb11u1
pn  pristine-lfs                              <none>
ii  quilt                                     0.66-2.1
pn  ratt                                      <none>
pn  reprotest                                 <none>
pn  svn-buildpackage                          <none>
pn  w3m                                       <none>

-- no debconf information
--- a/lib/Devscripts/Uscan/Utils.pm
+++ b/lib/Devscripts/Uscan/Utils.pm
@@ -259,7 +259,7 @@
     eval "uscan_debug \"safe_replace input=\\\"\$\$in\\\"\\n\"";
     $pat =~ s/^\s*(.*?)\s*$/$1/;
 
-    $pat =~ /^(s|tr|y)(.)/;
+    $pat =~ /^(s|tr|y|date)(.)/;
     my ($op, $sep) = ($1, $2 || '');
     my $esc = "\Q$sep\E";
     my ($parsed_ok, $regexp, $replacement, $flags);
@@ -273,7 +273,7 @@
             return 0;
         }
     } elsif ($pat
-        !~ /^(?:s|tr|y)$esc((?:\\.|[^\\$esc])*)$esc((?:\\.|[^\\$esc])*)$esc([a-z]*)$/
+        !~ /^(?:s|tr|y|date)$esc((?:\\.|[^\\$esc])*)$esc((?:\\.|[^\\$esc])*)$esc([a-z]*)$/
     ) {
         $sep = "/" if $sep eq '';
         uscan_warn "stop mangling: rule=\"$pat\"\n"
@@ -309,6 +309,20 @@
         } else {
             return 1;
         }
+    } elsif ($op eq 'date') {
+        uscan_debug "Converting date '$$in' to format: '$replacement'";
+        my $formatted_date = `date --date='$$in' +$replacement`;
+
+        if ($formatted_date == "") {
+            uscan_warn "error getting formatted date. Check input or format";
+            return 0;
+        }
+
+        $formatted_date =~ s/\n//;
+        uscan_debug "Formatted date $formatted_date.";
+
+        $$in = $formatted_date;
+        return 1;
     } else {
         $safeflags =~ tr/gix//cd;
         if ($safeflags ne $flags) {

Reply via email to