chiark / gitweb /
Infra: dgit-infrastructure has, and uses, its own copies of the perl modules
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Oct 2016 16:50:26 +0000 (17:50 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 15 Oct 2016 18:38:09 +0000 (19:38 +0100)
This avoids introducing a versioned dependency between dgit and
dgit-infrastructure (and also makes it easier to test cross-version
compatibility).

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
Debian/Dgit/Infra.pm
Makefile
debian/changelog
debian/control
debian/rules

index 1f2c702..eff460b 100644 (file)
@@ -5,6 +5,13 @@ package Debian::Dgit::Infra;
 use strict;
 use warnings;
 
 use strict;
 use warnings;
 
-# push @INC, q{usr/share/dgit/infra/perl5}; ###substituted###
+# Scripts and programs which are going to `use Debian::Dgit' but which
+# live in dgit-infrastructure (ie are installed with install-infra)
+# should `use Debian::Dgit::Infra' first.  All this module does is
+# adjust @INC so that the script gets the version of the script from
+# the dgit-infrastructure package (which is installed in a different
+# location and may be a different version).
+
+# unshift @INC, q{/usr/share/dgit/infra/perl5}; ###substituted###
 
 1;
 
 1;
index d3e26b1..6fcc9bd 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -41,7 +41,10 @@ INFRA_PROGRAMS=dgit-repos-server dgit-ssh-dispatch \
        dgit-repos-policy-debian dgit-repos-admin-debian \
        dgit-repos-policy-trusting dgit-mirror-rsync
 INFRA_EXAMPLES=get-dm-txt ssh-wrap drs-cron-wrap get-suites
        dgit-repos-policy-debian dgit-repos-admin-debian \
        dgit-repos-policy-trusting dgit-mirror-rsync
 INFRA_EXAMPLES=get-dm-txt ssh-wrap drs-cron-wrap get-suites
-INFRA_PERLMODULES=Debian/Dgit/Policy/Debian.pm
+INFRA_PERLMODULES= \
+       Debian/Dgit.pm \
+       Debian/Dgit/Infra.pm \
+       Debian/Dgit/Policy/Debian.pm
 
 all:
 
 
 all:
 
index f36dbbd..4992dde 100644 (file)
@@ -56,6 +56,10 @@ dgit (1.5~~) unstable; urgency=medium
   * Better error handling in dgit-repos-policy-debian.
   * dgit-repos-policy-debian.: fix git-cat-file-handling with multiple
     taints in db (!).
   * Better error handling in dgit-repos-policy-debian.
   * dgit-repos-policy-debian.: fix git-cat-file-handling with multiple
     taints in db (!).
+  * dgit-infrastructure has, and uses, its own copies of the perl modules.
+    This avoids introducing a versioned dependency between dgit and
+    dgit-infrastructure (and also makes it easier to test cross-version
+    compatibility).
 
   Documentation:
   * Document the dgit-distro.DISTRO.quilt-mode config setting.
 
   Documentation:
   * Document the dgit-distro.DISTRO.quilt-mode config setting.
index 294b811..edf8c09 100644 (file)
@@ -26,10 +26,12 @@ Description: git interoperability with the Debian archive
  dgit clone and dgit fetch construct git commits from uploads.
 
 Package: dgit-infrastructure
  dgit clone and dgit fetch construct git commits from uploads.
 
 Package: dgit-infrastructure
-Depends: ${misc:Depends}, perl, git-core, dgit, gpgv, chiark-utils-bin,
+Depends: ${misc:Depends}, perl, git-core, gpgv, chiark-utils-bin,
          libjson-perl, libdigest-sha-perl, libdbd-sqlite3-perl, sqlite3
          libjson-perl, libdigest-sha-perl, libdbd-sqlite3-perl, sqlite3
+Recommends: dgit
 Architecture: all
 Priority: extra
 Description: dgit server backend infrastructure
  This package contains tools which are useful for setting up a dgit
 Architecture: all
 Priority: extra
 Description: dgit server backend infrastructure
  This package contains tools which are useful for setting up a dgit
- git repository server.  You probably want dgit, the client package.
+ git repository server.  You probably want dgit, the client package,
+ instead of dgit-infrastructure.
index 6580f96..9249f88 100755 (executable)
@@ -30,9 +30,27 @@ override_dh_gencontrol:
         v=$$(perl -ne 'print if s/^version:\s+//i' DEBIAN/control); \
         perl -i -pe "s/UNRELEASED/$$v/g if m/###substituted###/" usr/bin/dgit
 
         v=$$(perl -ne 'print if s/^version:\s+//i' DEBIAN/control); \
         perl -i -pe "s/UNRELEASED/$$v/g if m/###substituted###/" usr/bin/dgit
 
+globalperl=/usr/share/perl5
+infraperl=/usr/share/dgit/infra/perl5
+
 override_dh_auto_install:
        make install prefix=/usr DESTDIR=debian/dgit
 override_dh_auto_install:
        make install prefix=/usr DESTDIR=debian/dgit
-       make install-infra prefix=/usr DESTDIR=debian/dgit-infrastructure
+       make install-infra prefix=/usr DESTDIR=debian/dgit-infrastructure \
+               perldir=$(infraperl)
+#      # Most of the Perl modules in dgit-infrastructure live in
+#      # $(infraperl).  The exception is Debian::Dgit::Infra, which
+#      # lives in $(globalperl) and adds $(infraperl) to @INC.
+       set -ex; \
+        base=debian/dgit-infrastructure; \
+        mod=Debian/Dgit/Infra.pm; \
+        src=$${base}$(infraperl)/$${mod}; \
+        dst=$${base}$(globalperl)/$${mod}; \
+        mkdir -p $${dst%/*}; \
+        mv -f $$src $$dst; \
+        perl -i -p -e 'next unless m/###substituted###/;' \
+               -e 'next unless s/^# (?=unshift \@INC,)//;' \
+               -e 'die unless s{q\{\S+\}}{q{$(infraperl)}};' \
+                $$dst
 
 debian/tests/control: tests/enumerate-tests debian/tests/control.in
        $< gencontrol >$@.new && mv -f $@.new $@
 
 debian/tests/control: tests/enumerate-tests debian/tests/control.in
        $< gencontrol >$@.new && mv -f $@.new $@