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

Please provide an option to debsnap to specify the first and last version to
be downloaded.

A patch to implement this feature is attached.

Cheers,

Ivo De Decker


--- /usr/bin/debsnap	2012-05-31 17:55:22.000000000 +0200
+++ debsnap	2012-06-03 20:47:25.000000000 +0200
@@ -57,6 +57,8 @@
 my %opt;
 my $package = '';
 my $pkgversion = '';
+my $firstversion = '';
+my $lastversion = '';
 my $warnings = 0;
 
 sub fatal($);
@@ -196,13 +198,34 @@
     print "$msg" if $opt{verbose};
 }
 
+sub check_version($) {
+    my $version = shift;
+    if ($pkgversion) {
+	return 1 if ($version <=> $pkgversion);
+    }
+    if ($firstversion) {
+	if (($version <=> $firstversion) < 0) {
+	    verbose "skip version ".$version.": older than first";
+	    return 1;
+	}
+    }
+
+    if ($lastversion) {
+	if (($version <=> $lastversion) > 0) {
+	    verbose "skip version ".$version.": newer than last";
+	    return 1;
+	}
+    }
+    return 0;
+}
+
 ###
 # Main program
 ###
 read_conf(@ARGV);
 Getopt::Long::Configure('gnu_compat');
 Getopt::Long::Configure('no_ignore_case');
-GetOptions(\%opt, 'verbose|v', 'destdir|d=s', 'force|f', 'help|h', 'version', 'binary', 'architecture|a=s@') || exit 1;
+GetOptions(\%opt, 'verbose|v', 'destdir|d=s', 'force|f', 'help|h', 'version', 'first=s', 'last=s', 'binary', 'architecture|a=s@') || exit 1;
 
 usage(0) if $opt{help};
 usage(1) unless @ARGV;
@@ -213,6 +236,16 @@
     fatal "Invalid version '$version'" unless $pkgversion;
 }
 
+if ($opt{first}) {
+    $firstversion = Dpkg::Version->new($opt{first}, check => 1);
+    fatal "Invalid version '".$opt{first}."'" unless $firstversion;
+}
+
+if ($opt{last}) {
+    $lastversion = Dpkg::Version->new($opt{last}, check => 1);
+    fatal "Invalid version '".$opt{last}."'" unless $lastversion;
+}
+
 $package eq '' && usage(1);
 
 $opt{binary} ||= $opt{architecture};
@@ -240,9 +273,7 @@
 
 if ($opt{binary}) {
     foreach my $version (@{$json_text->{result}}) {
-	if ($pkgversion) {
-	    next if ($version->{binary_version} <=> $pkgversion);
-	}
+    	next if check_version($version->{binary_version});
 
 	my $src_json = fetch_json_page("$opt{baseurl}/mr/package/$version->{source}/$version->{version}/binfiles/$version->{name}/$version->{binary_version}?fileinfo=1");
 
@@ -268,9 +299,7 @@
 }
 else {
     foreach my $version (@{$json_text->{result}}) {
-	if ($pkgversion) {
-	    next if ($version->{version} <=> $pkgversion);
-	}
+    	next if check_version($version->{version});
 
 	my $src_json = fetch_json_page("$baseurl/$version->{version}/srcfiles?fileinfo=1");
 	unless ($src_json) {

Reply via email to