chiark / gitweb /
dgit: Use distro-info-data to resolve unknown suites to distros
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 5 Sep 2019 11:59:16 +0000 (12:59 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 5 Sep 2019 12:07:45 +0000 (13:07 +0100)
Closes: #931212
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
debian/control
dgit
dgit.1

index 3e82d8d866126bf7ae91b7c0b337a0c710b08203..3edda13d8c1a75dd11074e66b686b7a68bc8cdf4 100644 (file)
@@ -15,8 +15,9 @@ Depends: perl, libdpkg-perl, git-core, devscripts, dpkg-dev,
          coreutils (>= 8.23-1~),
          libdigest-sha-perl, dput, curl, apt,
          libjson-perl, ca-certificates,
-         libtext-iconv-perl, libtext-glob-perl, libwww-curl-perl
-Recommends: ssh-client
+         libtext-iconv-perl, libtext-glob-perl, libwww-curl-perl,
+         libtext-csv-perl
+Recommends: ssh-client, distro-info-data
 Suggests: sbuild | pbuilder | cowbuilder
 Architecture: all
 Description: git interoperability with the Debian archive
diff --git a/dgit b/dgit
index fde8d6153dad5a92ef4d3c4c161066f76441f744..962bca1a67409ff5aca00f1b5005df4cb77831a3 100755 (executable)
--- a/dgit
+++ b/dgit
@@ -46,6 +46,7 @@ use Digest::SHA;
 use Digest::MD5;
 use List::MoreUtils qw(pairwise);
 use Text::Glob qw(match_glob);
+use Text::CSV;
 use Fcntl qw(:DEFAULT :flock);
 use Carp;
 
@@ -867,6 +868,22 @@ sub access_basedistro__noalias () {
                return $kl->{$k};
            }
        }
+       foreach my $csvf (</usr/share/distro-info/*.csv>) {
+           my $csv_distro =
+               $csvf =~ m{/(\w+)\.csv$} ? $1 : do {
+                   printdebug "skipping $csvf\n";
+                   next;
+               };
+           my $csv = Text::CSV->new({ binary => 1, auto_diag => 2 }) or die;
+           my $fh = new IO::File $csvf, "<:encoding(utf8)"
+               or die "open $csvf: $!";
+           while (my $cols = $csv->getline($fh)) {
+               next unless $cols->[2] eq $isuite;
+               return $csv_distro;
+           }
+           die "$csvf $!" if $fh->error;
+           close $fh;
+       }
        return cfg("dgit.default.distro");
     }
 }
diff --git a/dgit.1 b/dgit.1
index 29825c2c1c8d253a87cc31bd044de536f129b72d..93b8ed688f3df70b449f371da36152c626504050 100644 (file)
--- a/dgit.1
+++ b/dgit.1
@@ -1359,6 +1359,10 @@ may be a glob pattern.
 .TP
 .BI dgit.default.distro " distro"
 The default distro for an unknown suite.
+
+This is only used if no
+.BI /usr/share/distro-info/ somedistro .csv
+mentions the specified suite.
 .TP
 .BI dgit.default.default-suite " suite"
 The default suite (eg for clone).