[devscripts] 02/02: grep-excuses: Pull data from excuses.yaml

James McCoy jamessan at debian.org
Sat Feb 25 11:27:06 UTC 2017


This is an automated email from the git hooks/post-receive script.

jamessan pushed a commit to branch pu/yaml-excuses
in repository devscripts.

commit 048b30bafdb87685cd443c79a195aab948fc3c56
Author: James McCoy <jamessan at debian.org>
Date:   Sat Feb 25 00:52:26 2017 -0500

    grep-excuses: Pull data from excuses.yaml
---
 scripts/grep-excuses.pl | 117 +++++++++++++++++++++++++++---------------------
 1 file changed, 67 insertions(+), 50 deletions(-)

diff --git a/scripts/grep-excuses.pl b/scripts/grep-excuses.pl
index cc4d60f..6f00103 100755
--- a/scripts/grep-excuses.pl
+++ b/scripts/grep-excuses.pl
@@ -23,6 +23,27 @@ use strict;
 use warnings;
 use File::Basename;
 
+my $yaml_broken;
+sub have_yaml()
+{
+    return ($yaml_broken ? 0 : 1) if defined $yaml_broken;
+
+    eval {
+	require YAML::Syck;
+    };
+
+    if ($@) {
+	if ($@ =~ m/^Can't locate YAML/) {
+	    $yaml_broken = 'the libyaml-syck-perl package is not installed';
+	} else {
+	    $yaml_broken = "couldn't load YAML::Syck $@";
+	}
+    } else {
+	$yaml_broken = '';
+    }
+    return $yaml_broken ? 0 : 1;
+}
+
 # Needed for --wipnity option
 
 open DEBUG, ">/dev/null" or die $!;
@@ -51,7 +72,7 @@ sub have_term_size {
 my $progname = basename($0);
 my $modified_conf_msg;
 
-my $url='https://release.debian.org/britney/update_excuses.html.gz';
+my $url='https://release.debian.org/britney/excuses.yaml';
 
 my $rmurl='https://udd.debian.org/cgi-bin/autoremovals.cgi';
 my $rmurl_yaml='https://udd.debian.org/cgi-bin/autoremovals.yaml.cgi';
@@ -277,59 +298,55 @@ sub grep_autoremovals () {
 
 grep_autoremovals() if $do_autoremovals;
 
+if (!have_yaml()) {
+    die "$progname: Unable to parse excuses: $yaml_broken\n";
+}
+
 print DEBUG "Fetching $url\n";
 
-open EXCUSES, "wget -q -O - $url | zcat |" or
-    die "$progname: wget | zcat failed: $!\n";
-
-my $item='';
-my $mainlist=0;
-my $sublist=0;
-while (<EXCUSES>) {
-    if (! $mainlist) {
-	# Have we found the start of the actual content?
-	next unless /^\s*<ul>\s*$/;
-	$mainlist=1;
-	next;
-    }
-    # Have we reached the end?
-    if (! $sublist and m%</ul>%) {
-	$mainlist=0;
-	next;
-    }
-    next unless $mainlist;
-    # Strip hyperlinks
-    my $saveline=$_;
-    s%<a\s[^>]*>%%g;
-    s%</a>%%g;
-    s%>%>%g;
-    s%<%<%g;
-    # New item?
-    if (! $sublist and /^\s*<li>/) {
-	s%<li>%%;
-	s%<li>%\n%g;
-	$item = $_;
-    }
-    elsif (! $sublist and /^\s*<ul>/) {
-	$sublist=1;
-    }
-    elsif ($sublist and m%</ul>%) {
-	$sublist=0;
-	# Did the last item match?
-	if ($item=~/^-?\Q$string\E\s/ or
-	    $item=~/^\s*Maintainer:\s[^\n]*\b\Q$string\E\b[^\n]*$/m) {
-	    print $item;
+my $yaml = `wget -q -O - $url`;
+if ($? == -1) {
+    die "$progname: unable to run wget: $!\n";
+} elsif ($? >> 8) {
+    die "$progname: wget exited $?\n";
+}
+
+my $excuses = YAML::Syck::Load($yaml);
+for my $source (@{$excuses->{sources}})
+{
+    next if $source->{source} =~ m/_pu$/;
+    if ($source->{source} =~ m/\Q$string\E/
+	|| (exists $source->{maintainer}
+	    && $source->{maintainer} =~ m/\Q$string\E/))
+    {
+	printf("%s (%s to %s)\n", $source->{source},
+	    $source->{'old-version'}, $source->{'new-version'});
+	if (exists $source->{maintainer})
+	{
+	    printf("    Maintainer: $source->{maintainer}\n");
+	}
+	my %age = %{$source->{policy_info}{age}};
+	if ($age{'current-age'} >= $age{'age-requirement'})
+	{
+	    printf("    %d days old (needed %d days)\n",
+		$age{'current-age'},
+		$age{'age-requirement'});
+	}
+	else
+	{
+	    printf("    Too young, only %d of %d days old\n",
+		$age{'current-age'},
+		$age{'age-requirement'});
+	}
+	for my $excuse (@{$source->{excuses}})
+	{
+	    $excuse =~ s@<a\s[^>]+>@@g;
+	    $excuse =~ s@</a>@@g;
+	    $excuse =~ s@<@<@g;
+	    $excuse =~ s@>@>@g;
+	    print "    $excuse\n";
 	}
-    }
-    elsif ($sublist and /^\s*<li>/) {
-	s%<li>%    %;
-	s%<li>%\n    %g;
-	$item .= $_;
-    }
-    else {
-	warn "$progname: unrecognised line in update_excuses (line $.):\n$saveline";
     }
 }
-close EXCUSES or die "$progname: read/zcat failed: $!\n";
 
 exit 0;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/collab-maint/devscripts.git



More information about the devscripts-devel mailing list