Package: release.debian.org
Severity: normal
User: release.debian....@packages.debian.org
Usertags: unblock

Please unblock package devscripts

There are a few changes sitting in git right now that would be useful to
make it into Stretch.  The full log is
https://anonscm.debian.org/git/collab-maint/devscripts.git/log/?id=v2.17.5..master

uscan/debdiff: Typos/documentation improvements (7f07b7bc, f447aafb)
chdist: Support running aptitude (f722bf62)
debcheckout: Understand cgit URLs (4e1867dc)
debrepro: Check for and inform user of missing runtime dependencies (ad90af3a)
debsign: Fix regression when signing a dsc file (51e909fd)

Additionally, there are changes to various scripts to make them work
better when $HOME isn't set by using Perl's File::HomeDir, a new
Depends (56e38636, 3ff2f9db).

The $HOME handling is the most disruptive, so I'd be willing to drop
that.

unblock devscripts/2.17.6

-- System Information:
Debian Release: 9.0
  APT prefers unstable-debug
  APT policy: (500, 'unstable-debug'), (500, 'unstable'), (1, 
'experimental-debug'), (1, 'experimental')
Architecture: amd64
 (x86_64)
Foreign Architectures: i386

Kernel: Linux 4.9.0-3-amd64 (SMP w/4 CPU cores)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
 debian/changelog               | 30 ++++++++++++++++++++++++++++++
 debian/control                 |  1 +
 scripts/bts.pl                 |  2 ++
 scripts/chdist.bash_completion |  6 +++---
 scripts/chdist.pl              | 12 ++++++++++--
 scripts/debcheckout.pl         |  5 +++--
 scripts/debcommit.pl           |  3 ++-
 scripts/debdiff.pl             |  2 +-
 scripts/debrepro.pod           |  4 ++++
 scripts/debrepro.sh            | 21 +++++++++++++++++++++
 scripts/debsign.sh             |  2 +-
 scripts/dscverify.pl           |  2 ++
 scripts/grep-excuses.pl        |  3 ++-
 scripts/namecheck.pl           |  8 +++++++-
 scripts/rc-alert.pl            |  2 ++
 scripts/svnpath.pl             |  7 +++++--
 scripts/uscan.pl               | 18 +++++++++++++++---
 scripts/wnpp-alert.sh          |  2 +-
 18 files changed, 112 insertions(+), 18 deletions(-)

diff --git a/debian/changelog b/debian/changelog
index 0c32aaac..e436d4be 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,33 @@
+devscripts (2.17.6) UNRELEASED; urgency=medium
+
+  [ Osamu Aoki ]
+  * uscan:
+    + Update manpage on the github.com behavior and the alternative
+      shorthand form.  (Closes: #836507, #859089)
+
+  [ Adam D. Barratt ]
+  * uscan: fix a typo in the manpage
+  * debdiff: fix a typo
+
+  [ Paul Wise ]
+  * chdist:
+    + add support for running aptitude
+  * debcheckout:
+    + handle cgit URLs too. Thanks to Rhonda for the suggestion.
+  * Make various scripts work when HOME is unset:
+    bts chdist debcommit dscverify grep-excuses
+    namecheck rc-alert svnpath wnpp-alert
+
+  [ Antonio Terceiro ]
+  * debrepro:
+    + check for dependencies before doing any builds (Closes: #862586)
+
+  [ James Clarke ]
+  * debsign:
+    + Fix signing a dsc directly.  (Closes: #863497)
+
+ -- Osamu Aoki <os...@debian.org>  Fri, 31 Mar 2017 02:03:30 +0900
+
 devscripts (2.17.5) unstable; urgency=medium
 
   * Create GNUPGHOME in /tmp to fix CI failures due to long path names.
diff --git a/debian/control b/debian/control
index 52b774e9..3a2994a8 100644
--- a/debian/control
+++ b/debian/control
@@ -46,6 +46,7 @@ Package: devscripts
 Architecture: any
 Multi-Arch: foreign
 Depends: dpkg-dev (>= 1.17.6),
+         libfile-homedir-perl,
          ${misc:Depends},
          ${perl:Depends},
          ${python3:Depends},
diff --git a/scripts/bts.pl b/scripts/bts.pl
index 2a650d10..a2a64c51 100755
--- a/scripts/bts.pl
+++ b/scripts/bts.pl
@@ -47,6 +47,7 @@ use strict;
 use warnings;
 use File::Basename;
 use File::Copy;
+use File::HomeDir;
 use File::Path qw(make_path rmtree);
 use File::Spec;
 use File::Temp qw/tempfile/;
@@ -173,6 +174,7 @@ my @valid_severities=qw(wishlist minor normal important
 
 my $browser;  # Will set if necessary
 
+$ENV{HOME} = File::HomeDir->my_home;
 my $cachedir = $ENV{XDG_CACHE_HOME} || File::Spec->catdir($ENV{HOME}, 
'.cache');
 $cachedir = File::Spec->catdir($cachedir, 'devscripts', 'bts');
 
diff --git a/scripts/chdist.bash_completion b/scripts/chdist.bash_completion
index 89773313..51dbf499 100644
--- a/scripts/chdist.bash_completion
+++ b/scripts/chdist.bash_completion
@@ -6,7 +6,7 @@ _chdist ()
 {
   local cur=$2 prev=$3
   local options='--help -h --data-dir -d --arch -a'
-  local commands='create apt apt-get apt-cache apt-rdepends
+  local commands='create apt apt-get apt-cache apt-rdepends aptitude
            src2bin bin2src
        compare-packages compare-bin-packages
        compare-versions compare-bin-versions
@@ -14,7 +14,7 @@ _chdist ()
        list'
   # Sync'd with buildd.debian.org on 2016-04-02:
   local archs="all alpha amd64 arm64 armel armhf hppa hurd-i386 i386 ia64 
kfreebsd-amd64 kfreebsd-i386 m68k mips mips64el mipsel powerpc powerpcspe ppc64 
ppc64el s390 s390x sh4 sparc sparc64 x32"
-  local dists=$(ls $HOME/.chdist 2>/dev/null)
+  local dists=$(ls ~/.chdist 2>/dev/null)
 
   COMPREPLY=()
 
@@ -31,7 +31,7 @@ _chdist ()
     -@(-help|h)|list)
         return 0
     ;;
-    
create|apt|apt-get|apt-cache|apt-rdepends|src2bin|bin2src|compare-packages|compare-bin-packages|compare-versions|compare-bin-versions|grep-dctrl-packages|grep-dctrl-sources)
+    
create|apt|apt-get|apt-cache|apt-rdepends|aptitude|src2bin|bin2src|compare-packages|compare-bin-packages|compare-versions|compare-bin-versions|grep-dctrl-packages|grep-dctrl-sources)
         COMPREPLY=( $( compgen -W "$dists" -- $cur ) )
     return 0
   esac
diff --git a/scripts/chdist.pl b/scripts/chdist.pl
index f05126cb..832036c9 100755
--- a/scripts/chdist.pl
+++ b/scripts/chdist.pl
@@ -40,7 +40,7 @@ Provide a usage message.
 
 =item B<-d>, B<--data-dir> I<DIR>
 
-Choose data directory (default: F<$HOME/.chdist/>).
+Choose data directory (default: F<~/.chdist/>).
 
 =item B<-a>, B<--arch> I<ARCH>
 
@@ -80,6 +80,10 @@ Run B<apt-file> inside I<DIST>
 
 Run B<apt-rdepends> inside I<DIST>
 
+=item B<aptitude> I<DIST> [...]
+
+Run B<aptitude> inside I<DIST>
+
 =item B<src2bin> I<DIST SRCPKG>
 
 List binary packages for I<SRCPKG> in I<DIST>
@@ -139,6 +143,7 @@ use warnings;
 no if $] >= 5.018, 'warnings', 'experimental::smartmatch';
 use feature 'switch';
 use File::Copy qw(cp);
+use File::HomeDir;
 use File::Path qw(make_path);
 use File::Basename;
 use Getopt::Long qw(:config gnu_compat bundling require_order);
@@ -177,7 +182,7 @@ License, version 2 or (at your option) any later version.
 EOF
 
 my $arch;
-my $datadir = $ENV{'HOME'} . '/.chdist';
+my $datadir = File::HomeDir->my_home . '/.chdist';
 
 GetOptions(
   "h|help"       => \$help,
@@ -725,6 +730,9 @@ given ($command) {
     when ('apt-rdepends') {
        aptcmd('apt-rdepends', @ARGV);
     }
+    when ('aptitude') {
+       aptcmd('aptitude', @ARGV);
+    }
     when ('bin2src') {
        bin2src(@ARGV);
     }
diff --git a/scripts/debcheckout.pl b/scripts/debcheckout.pl
index 81423854..1f61aa28 100755
--- a/scripts/debcheckout.pl
+++ b/scripts/debcheckout.pl
@@ -455,7 +455,7 @@ sub set_auth($$$$) {
     $url =~ 
s@(?:alioth\.debian\.org/(?:anonscm/bzr|scm/loggerhead/bzr)|anonscm\.debian\.org/bzr(?:/bzr)?)@bzr.debian.org/bzr@;
     $url =~ 
s@(?:alioth\.debian\.org/anonscm/darcs|anonscm\.debian\.org/darcs)@darcs.debian.org/darcs@;
     $url =~ s@git://anonscm\.debian\.org@git://git.debian.org@;
-    $url =~ 
s@(?:alioth\.debian\.org/anonscm/git|anonscm\.debian\.org/git)@git.debian.org/git@;
+    $url =~ 
s@(?:alioth\.debian\.org/anonscm/c?git|anonscm\.debian\.org/c?git)@git.debian.org/git@;
     $url =~ 
s@(?:alioth\.debian\.org/anonscm/hg|anonscm\.debian\.org/hg)@hg.debian.org/hg@;
     $url =~ s@svn://(?:scm\.alioth|anonscm)\.debian\.org@svn://svn.debian.org@;
 
@@ -971,8 +971,9 @@ sub guess_repo_type($$) {
        $repo_type = $1;
     } elsif ($repo_url =~ /^https?:\/\/(svn|git|hg|bzr|darcs)\.debian\.org/) {
        $repo_type = $1;
-    } elsif ($repo_url =~ 
m@^https?://anonscm.debian.org/(svn|git|hg|bzr|darcs)/@) {
+    } elsif ($repo_url =~ 
m@^https?://anonscm.debian.org/(svn|c?git|hg|bzr|darcs)/@) {
        $repo_type = $1;
+       $repo_type =~ s/cgit/git/;
     }
     return $repo_type;
 }
diff --git a/scripts/debcommit.pl b/scripts/debcommit.pl
index d899ca19..f1d89634 100755
--- a/scripts/debcommit.pl
+++ b/scripts/debcommit.pl
@@ -185,6 +185,7 @@ use strict;
 use Getopt::Long qw(:config bundling permute no_getopt_compat);
 use Cwd;
 use File::Basename;
+use File::HomeDir;
 use File::Temp;
 my $progname = basename($0);
 
@@ -460,7 +461,7 @@ sub getprog {
     }
 
     # Test for this file to avoid interactive prompting from svk.
-    if (-d "$ENV{HOME}/.svk/local") {
+    if (-d File::HomeDir->my_home."/.svk/local") {
        # svk has no useful directories so try to run it.
        my $svkpath=`svk info . 2>/dev/null| grep -i '^Depot Path:' | cut -d ' 
' -f 3`;
        if (length $svkpath) {
diff --git a/scripts/debdiff.pl b/scripts/debdiff.pl
index ab49633c..544de0fe 100755
--- a/scripts/debdiff.pl
+++ b/scripts/debdiff.pl
@@ -367,7 +367,7 @@ if (! $type) {
 }
 
 # We collect up the individual deb information in the hashes
-# %deb1 and %deb2, each key of which is a .deb name and each value is
+# %debs1 and %debs2, each key of which is a .deb name and each value is
 # a list ref.  Note we need to use our, not my, as we will be symbolically
 # referencing these variables
 my @CommonDebs = ();
diff --git a/scripts/debrepro.pod b/scripts/debrepro.pod
index 398757ad..80fa2a02 100644
--- a/scripts/debrepro.pod
+++ b/scripts/debrepro.pod
@@ -120,6 +120,10 @@ Package is not reproducible.
 
 The given input is not a valid Debian source package.
 
+=item 3Z<>
+
+Required programs are missing.
+
 =back
 
 =head1 SEE ALSO
diff --git a/scripts/debrepro.sh b/scripts/debrepro.sh
index 80757b91..298d25a1 100755
--- a/scripts/debrepro.sh
+++ b/scripts/debrepro.sh
@@ -19,6 +19,25 @@
 
 set -eu
 
+check_dependencies() {
+    for optional in disorderfs diffoscope; do
+        if ! which "$optional" > /dev/null; then
+            echo "W: $optional not installed, there will be missing 
functionality" >&2
+        fi
+    done
+
+    local failed=''
+    for mandatory in faketime; do
+        if ! which "$mandatory" > /dev/null; then
+            echo "E: $mandatory not installed, cannot proceed." >&2
+            failed=yes
+        fi
+    done
+    if [ -n "$failed" ]; then
+        exit 3
+    fi
+}
+
 usage() {
     echo "usage: $0 [OPTIONS] [SOURCEDIR]"
     echo ""
@@ -190,6 +209,8 @@ fi
 tmpdir=$(mktemp --directory --tmpdir debrepro.XXXXXXXXXX)
 trap "echo; echo 'I: artifacts left in $tmpdir'" INT TERM EXIT
 
+check_dependencies
+
 banner "First build"
 build first
 
diff --git a/scripts/debsign.sh b/scripts/debsign.sh
index 0717bead..924b03eb 100755
--- a/scripts/debsign.sh
+++ b/scripts/debsign.sh
@@ -725,7 +725,7 @@ for valid format" >&2;
        report_signed
 
     else
-       ensure_local_copy "$remotehost" "$remotehost" "$remotedsc" dsc
+       ensure_local_copy "$remotehost" "$remotedsc" "$dsc" dsc
        signas="$(guess_signas "$dsc")"
        maybesign_dsc "$signas" "$remotehost" "$dsc"
        report_signed
diff --git a/scripts/dscverify.pl b/scripts/dscverify.pl
index 45f2c605..45fb0eb4 100755
--- a/scripts/dscverify.pl
+++ b/scripts/dscverify.pl
@@ -28,6 +28,7 @@ use Cwd;
 use Fcntl;
 use Digest::MD5;
 use Dpkg::IPC;
+use File::HomeDir;
 use File::Spec;
 use File::Temp;
 use File::Basename;
@@ -94,6 +95,7 @@ sub get_rings {
     my @rings = @_;
     my @keyrings = qw(/usr/share/keyrings/debian-keyring.gpg
            /usr/share/keyrings/debian-maintainers.gpg);
+    $ENV{HOME} = File::HomeDir->my_home;
     if (defined $ENV{HOME} && -r "$ENV{HOME}/.gnupg/trustedkeys.gpg") {
        unshift(@keyrings, "$ENV{HOME}/.gnupg/trustedkeys.gpg");
     }
diff --git a/scripts/grep-excuses.pl b/scripts/grep-excuses.pl
index adeeebd2..8a4308fa 100755
--- a/scripts/grep-excuses.pl
+++ b/scripts/grep-excuses.pl
@@ -22,6 +22,7 @@ use 5.006;
 use strict;
 use warnings;
 use File::Basename;
+use File::HomeDir;
 
 # Needed for --wipnity option
 
@@ -57,7 +58,7 @@ my $rmurl='https://udd.debian.org/cgi-bin/autoremovals.cgi';
 my $rmurl_yaml='https://udd.debian.org/cgi-bin/autoremovals.yaml.cgi';
 
 # No longer use these - see bug#309802
-my $cachedir = $ENV{'HOME'}."/.devscripts_cache/";
+my $cachedir = File::HomeDir->my_home."/.devscripts_cache/";
 my $cachefile = $cachedir . basename($url);
 unlink $cachefile if -f $cachefile;
 
diff --git a/scripts/namecheck.pl b/scripts/namecheck.pl
index e6ac5e6a..a49c9ba6 100755
--- a/scripts/namecheck.pl
+++ b/scripts/namecheck.pl
@@ -53,6 +53,12 @@ use LWP::UserAgent;
 
 
 #
+# A module for finding the user home dir.
+#
+use File::HomeDir;
+
+
+#
 #  Get the name from the command line.
 #
 my $name = shift;
@@ -95,7 +101,7 @@ exit;
 
 sub loadPatterns
 {
-    my $file  = $ENV{ 'HOME' } . "/.namecheckrc";
+    my $file  = File::HomeDir->my_home . "/.namecheckrc";
     my @lines = ();
 
     if ( -e $file )
diff --git a/scripts/rc-alert.pl b/scripts/rc-alert.pl
index 3b316722..5fa4fffc 100755
--- a/scripts/rc-alert.pl
+++ b/scripts/rc-alert.pl
@@ -24,6 +24,7 @@ use warnings;
 use Devscripts::Packages;
 use File::Basename;
 use File::Copy qw(move);
+use File::HomeDir;
 use File::Path qw(make_path);
 use File::Spec;
 use Getopt::Long qw(:config bundling permute no_getopt_compat);
@@ -34,6 +35,7 @@ sub human_flags($);
 sub unhtmlsanit($);
 sub dt_parse_request($);
 
+$ENV{HOME} = File::HomeDir->my_home;
 my $cachedir = $ENV{XDG_CACHE_HOME} || File::Spec->catdir($ENV{HOME}, 
'.cache');
 $cachedir = File::Spec->catdir($cachedir, 'devscripts', 'rc-alert');
 
diff --git a/scripts/svnpath.pl b/scripts/svnpath.pl
index 99148e90..f9b48385 100755
--- a/scripts/svnpath.pl
+++ b/scripts/svnpath.pl
@@ -56,6 +56,8 @@ For example, the author uses this file:
 
 =cut
 
+use File::HomeDir;
+
 $ENV{LANG}="C";
 
 my $wanted=shift;
@@ -79,8 +81,9 @@ if (length $wanted) {
        # Now jut substitute into it.
        $url=~s!/(?:trunk|branches|tags)($|/)!/$wanted$1!;
 
-       if (-e "$ENV{HOME}/.svnpath") {
-               require "$ENV{HOME}/.svnpath";
+       my $svnpath = File::HomeDir->my_home."/.svnpath";
+       if (-e $svnpath) {
+               require $svnpath;
        }
 }
 
diff --git a/scripts/uscan.pl b/scripts/uscan.pl
index 8bd52739..dd1f4231 100755
--- a/scripts/uscan.pl
+++ b/scripts/uscan.pl
@@ -885,7 +885,16 @@ watch file:
       Text-CSV_XS-(.+)\.tar\.gz \
       debian uupdate
 
-can be rewritten in an alternative shorthand form:
+can be rewritten in an alternative shorthand form only with a single string
+covering URL and filename:
+
+  version=4
+  opts="pgpsigurlmangle=s%$%.sig%" \
+      http://www.cpan.org/modules/by-module/Text/Text-CSV_XS-(.+)\.tar\.gz \
+      debian uupdate
+
+In version=4, initial white spaces are dropped.  Thus, this alternative
+shorthand form can also be written as:
 
   version=4
   opts="pgpsigurlmangle=s%$%.sig%" \
@@ -893,8 +902,8 @@ can be rewritten in an alternative shorthand form:
       Text-CSV_XS-(.+)\.tar\.gz \
       debian uupdate
 
-Please note that I<matching-pattern> of the first example doesn't have
-directory and the subtle difference of a space before the tailing B<\>.
+Please note the subtle difference of a space before the tailing B<\>
+between the first and the last examples.
 
 =head2 HTTP site (funny version)
 
@@ -1066,6 +1075,9 @@ B<filenamemangle>:
       https://github.com/<user>/<project>/tags \
       (?:.*?/)?v?(\d[\d.]*)\.tar\.gz debian uupdate
 
+Note that the "tags" downloads do not include Git submodules in the .tar.gz
+whilst the "releases" do.
+
 =head2 PyPI
 
 For PyPI based projects, pypi.debian.net runs a redirector which allows a
diff --git a/scripts/wnpp-alert.sh b/scripts/wnpp-alert.sh
index 6132dd2c..e3a53125 100755
--- a/scripts/wnpp-alert.sh
+++ b/scripts/wnpp-alert.sh
@@ -19,7 +19,7 @@ PROGNAME="${0##*/}"
 # TODO: Remove use of OLDCACHEDDIR post-Stretch
 OLDCACHEDIR=~/.devscripts_cache
 OLDCACHEDDIFF="${OLDCACHEDIR}/wnpp-diff"
-CACHEDIR=${XDG_CACHE_HOME:-$HOME/.cache}
+CACHEDIR=${XDG_CACHE_HOME:-~/.cache}
 CACHEDIR=${CACHEDIR%/}/devscripts
 CACHEDDIFF="${CACHEDIR}/wnpp-diff"
 CURLORWGET=""

Reply via email to