Package: devscripts
Version: 2.13.0
Severity: wishlist
Tags: patch

Hi,

Following my previous patch, I also added a new uscan option, uselinktext,
that makes uscan to also search the version in the text contained in the
<a>...</a>, instead only checking the href value.

A bit of a complex example would be:
version=3
opts=uselinktext,filenamemangle=s!.*/([^/]*)$!xawtv-$1\.tar\.gz!,downloadurlmangle=s!commit/([^/]*)!snapshot/$1\.tar\.gz!
 \
    http://git.linuxtv.org/xawtv3.git/tags xawtv-([\d.]+)

Thanks and happy hacking,
commit 113554c68392dfd80351968c2088b3648ba46b7c
Author: Maximiliano Curia <m...@gnuservers.com.ar>
Date:   Tue Apr 23 10:36:46 2013 +0200

    Basic use link text support

diff --git a/scripts/uscan.pl b/scripts/uscan.pl
index 03f2ea4..c782db7 100755
--- a/scripts/uscan.pl
+++ b/scripts/uscan.pl
@@ -1,4 +1,5 @@
 #! /usr/bin/perl -w
+# vi:sw=4 ts=8 noet
 
 # uscan: This program looks for watchfiles and checks upstream ftp sites
 # for later versions of the software.
@@ -749,6 +750,9 @@ sub process_watchline ($$$$$$)
 		       or $opt eq 'nopassive') {
 		    $options{'pasv'}=0;
 		}
+		elsif ($opt eq 'uselinktext') {
+		    $options{'uselinktext'}=1;
+		}
 		elsif ($opt =~ /^uversionmangle\s*=\s*(.+)/) {
 		    @{$options{'uversionmangle'}} = split /;/, $1;
 		}
@@ -944,11 +948,11 @@ sub process_watchline ($$$$$$)
 			# which may match but then return undef values
 			my $mangled_version =
 			    join(".", map { $_ if defined($_) }
-			 	$href =~ m&^$_pattern$&);
+				$href =~ m&^$_pattern$&);
 			foreach my $pat (@{$options{'uversionmangle'}}) {
 			    if (! safe_replace(\$mangled_version, $pat)) {
 				warn "$progname: In $watchfile, potentially"
-			 	 . " unsafe or malformed uversionmangle"
+				 . " unsafe or malformed uversionmangle"
 				  . " pattern:\n  '$pat'"
 				  . " found. Skipping watchline\n"
 				  . "  $line\n";
@@ -960,6 +964,34 @@ sub process_watchline ($$$$$$)
 		}
 	    }
 	}
+	if (exists $options{'uselinktext'}) {
+	    while ($content =~
+		    m/<\s*a\s+[^>]*href\s*=\s*([\"\'])(.*?)\1[^>]*>([^<]*)<\/a>/sgi) {
+		my $href = $2;
+		my $atext = $3;
+		$href =~ s/\n//g;
+		$atext =~ s/\n//g;
+		foreach my $_pattern (@patterns) {
+		    if ($atext =~ m&^$_pattern$&) {
+			my $mangled_version =
+			    join(".", map { $_ if defined($_) }
+				$atext =~ m&^$_pattern$&);
+			foreach my $pat (@{$options{'uversionmangle'}}) {
+			    if (! safe_replace(\$mangled_version, $pat)) {
+				warn "$progname: In $watchfile, potentially"
+				 . " unsafe or malformed uversionmangle"
+				 . " pattern:\n  '$pat'"
+				 . " found. Skipping watchline\n"
+				 . "  $line\n";
+				return 1;
+			    }
+			}
+			push @hrefs, [$mangled_version, $href];
+		    }
+		}
+
+	    }
+	}
 	if (@hrefs) {
 	    if ($verbose) {
 		print "-- Found the following matching hrefs:\n";

Reply via email to