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) {