package devscripts
tags 587523 patch
thanks

Hi,

> In order to test/bisect stuff, it would be convenient to be able to use
> debsnap to download binary packages from snapshot.d.o, e.g.
> $ debsnap -a amd64 xterm 256-1
> to get xterm_256-1_amd64.deb.  Not sure if that should get all debs from
> a given source package, or just the one specified.

here's a patch against git master, please review.

>From 1ddcb8ea8f096037aa716ec5edc9a7804def321b Mon Sep 17 00:00:00 2001
From: Timo Juhani Lindfors <timo.lindf...@iki.fi>
Date: Sun, 17 Apr 2011 15:16:32 +0300
Subject: [PATCH] Implement --binary and --architecture

(closes: #587523).
---
 scripts/debsnap.pl |   52 ++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 50 insertions(+), 2 deletions(-)

diff --git a/scripts/debsnap.pl b/scripts/debsnap.pl
index eb4ee46..6176748 100755
--- a/scripts/debsnap.pl
+++ b/scripts/debsnap.pl
@@ -91,6 +91,11 @@ The following options are supported:
                                         Default is ./source-<package name>
     -f, --force                         Force overwriting an existing
                                         destdir
+    --binary                            Download binary packages instead of
+                                        source packages
+    -a <architecture>,
+    --architecture <architecture>       Specify architecture of binary packages,
+                                        implies --binary
 
 Default settings modified by devscripts configuration files or command-line
 options:
@@ -180,7 +185,7 @@ sub verbose($)
 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') || exit 1;
+GetOptions(\%opt, 'verbose|v', 'destdir|d=s', 'force|f', 'help|h', 'version', 'binary', 'architecture|a=s') || exit 1;
 
 usage(0) if $opt{help};
 usage(1) unless @ARGV;
@@ -193,7 +198,13 @@ if (@ARGV) {
 
 $package eq '' && usage(1);
 
-$opt{destdir} ||= "source-$package";
+$opt{binary} ||= $opt{architecture};
+
+if ($opt{binary}) {
+    $opt{destdir} ||= "binary-$package";
+} else {
+    $opt{destdir} ||= "source-$package";
+}
 
 my $baseurl = "$opt{baseurl}/mr/package/$package/";
 if (-d $opt{destdir}) {
@@ -203,6 +214,43 @@ if (-d $opt{destdir}) {
 }
 make_path($opt{destdir});
 
+if ($opt{binary}) {
+    $baseurl = "$opt{baseurl}/mr/binary/$package/";
+    
+    my $json_text = fetch_json_page($baseurl);
+    unless ($json_text && @{$json_text->{result}}) {
+	fatal "Unable to retrieve information for $package from $baseurl.";
+    }
+
+    foreach my $version (@{$json_text->{result}}) {
+	if ($pkgversion) {
+	    next if ($version->{binary_version} <=> $pkgversion);
+	}
+
+	my $src_json = fetch_json_page("$opt{baseurl}/mr/package/$version->{source}/$version->{version}/binfiles/$version->{name}/$version->{binary_version}?fileinfo=1");
+
+	unless ($src_json) {
+	    warn "$progname: No binary packages found for $package version $version->{binary_version}\n";
+	    $warnings++;
+	}
+
+	foreach my $result (@{$src_json->{result}}) {
+	    if ($opt{architecture}) {
+		next if ($result->{architecture} ne $opt{architecture});
+	    }
+	    my $fileinfo = @{$src_json->{fileinfo}{$result->{hash}}}[0];
+	    my $file_url = "$opt{baseurl}/file/$result->{hash}";
+	    my $file_name = basename($fileinfo->{name});
+	    verbose "Getting file $file_name: $file_url";
+	    LWP::Simple::getstore($file_url, "$opt{destdir}/$file_name");
+	}
+    }
+    if ($warnings) {
+	exit 2;
+    }
+    exit 0;
+}
+
 my $json_text = fetch_json_page($baseurl);
 unless ($json_text && @{$json_text->{result}}) {
     fatal "Unable to retrieve information for $package from $baseurl.";
-- 
1.7.2.5

Some usage examples:

Specific version of a binary package for a specific arch
========================================================

$ debsnap -a amd64 xterm 256-1
$ ls -l binary-xterm/
total 524
-rw-r--r-- 1 lindi kurp 532374 Apr 17 15:22 xterm_256-1_amd64.deb

All versions of a binary package for a specific arch
====================================================

$ debsnap -a armel xterm
$ ls -l binary-xterm/
total 16196
-rw-r--r-- 1 lindi kurp 477906 Apr 17 15:27 xterm_231-1_armel.deb
-rw-r--r-- 1 lindi kurp 478264 Apr 17 15:27 xterm_232-1_armel.deb
-rw-r--r-- 1 lindi kurp 481140 Apr 17 15:26 xterm_234-1_armel.deb
-rw-r--r-- 1 lindi kurp 483878 Apr 17 15:26 xterm_235-1_armel.deb
-rw-r--r-- 1 lindi kurp 484486 Apr 17 15:26 xterm_235-2_armel.deb
-rw-r--r-- 1 lindi kurp 484356 Apr 17 15:26 xterm_236-1_armel.deb
-rw-r--r-- 1 lindi kurp 485618 Apr 17 15:26 xterm_237-1_armel.deb
-rw-r--r-- 1 lindi kurp 492332 Apr 17 15:26 xterm_238-1_armel.deb
-rw-r--r-- 1 lindi kurp 492408 Apr 17 15:26 xterm_238-2_armel.deb
-rw-r--r-- 1 lindi kurp 493862 Apr 17 15:26 xterm_239-1_armel.deb
-rw-r--r-- 1 lindi kurp 495334 Apr 17 15:26 xterm_241-1_armel.deb
-rw-r--r-- 1 lindi kurp 495426 Apr 17 15:26 xterm_242-1_armel.deb
-rw-r--r-- 1 lindi kurp 498354 Apr 17 15:26 xterm_243-1_armel.deb
-rw-r--r-- 1 lindi kurp 512634 Apr 17 15:26 xterm_244-1_armel.deb
-rw-r--r-- 1 lindi kurp 506930 Apr 17 15:26 xterm_244-2_armel.deb
-rw-r--r-- 1 lindi kurp 516226 Apr 17 15:26 xterm_246-1_armel.deb
-rw-r--r-- 1 lindi kurp 512772 Apr 17 15:26 xterm_247-1_armel.deb
-rw-r--r-- 1 lindi kurp 512928 Apr 17 15:26 xterm_248-1_armel.deb
-rw-r--r-- 1 lindi kurp 514432 Apr 17 15:26 xterm_249-1_armel.deb
-rw-r--r-- 1 lindi kurp 509882 Apr 17 15:26 xterm_250-1_armel.deb
-rw-r--r-- 1 lindi kurp 512126 Apr 17 15:26 xterm_251-1_armel.deb
-rw-r--r-- 1 lindi kurp 518056 Apr 17 15:26 xterm_253-1_armel.deb
-rw-r--r-- 1 lindi kurp 521836 Apr 17 15:26 xterm_255-1_armel.deb
-rw-r--r-- 1 lindi kurp 525752 Apr 17 15:26 xterm_256-1_armel.deb
-rw-r--r-- 1 lindi kurp 527862 Apr 17 15:26 xterm_258-1_armel.deb
-rw-r--r-- 1 lindi kurp 541532 Apr 17 15:26 xterm_259-1_armel.deb
-rw-r--r-- 1 lindi kurp 542638 Apr 17 15:25 xterm_260-1_armel.deb
-rw-r--r-- 1 lindi kurp 544224 Apr 17 15:25 xterm_261-1_armel.deb
-rw-r--r-- 1 lindi kurp 548098 Apr 17 15:25 xterm_264-1_armel.deb
-rw-r--r-- 1 lindi kurp 547978 Apr 17 15:25 xterm_266-1_armel.deb
-rw-r--r-- 1 lindi kurp 558528 Apr 17 15:25 xterm_268-1_armel.deb
-rw-r--r-- 1 lindi kurp 566382 Apr 17 15:25 xterm_269-1_armel.deb

Specific version of a binary package for all architectures
==========================================================

$ debsnap --binary xterm 256-1
$ ls -l binary-xterm/
total 9016
-rw-r--r-- 1 lindi kurp 565478 Apr 17 15:28 xterm_256-1_alpha.deb
-rw-r--r-- 1 lindi kurp 532374 Apr 17 15:28 xterm_256-1_amd64.deb
-rw-r--r-- 1 lindi kurp 525752 Apr 17 15:28 xterm_256-1_armel.deb
-rw-r--r-- 1 lindi kurp 506646 Apr 17 15:28 xterm_256-1_avr32.deb
-rw-r--r-- 1 lindi kurp 543952 Apr 17 15:28 xterm_256-1_hppa.deb
-rw-r--r-- 1 lindi kurp 512656 Apr 17 15:28 xterm_256-1_hurd-i386.deb
-rw-r--r-- 1 lindi kurp 512954 Apr 17 15:28 xterm_256-1_i386.deb
-rw-r--r-- 1 lindi kurp 644642 Apr 17 15:28 xterm_256-1_ia64.deb
-rw-r--r-- 1 lindi kurp 532590 Apr 17 15:28 xterm_256-1_kfreebsd-amd64.deb
-rw-r--r-- 1 lindi kurp 512840 Apr 17 15:28 xterm_256-1_kfreebsd-i386.deb
-rw-r--r-- 1 lindi kurp 537378 Apr 17 15:28 xterm_256-1_mips.deb
-rw-r--r-- 1 lindi kurp 534294 Apr 17 15:28 xterm_256-1_mipsel.deb
-rw-r--r-- 1 lindi kurp 523994 Apr 17 15:28 xterm_256-1_powerpc.deb
-rw-r--r-- 1 lindi kurp 540010 Apr 17 15:28 xterm_256-1_s390.deb
-rw-r--r-- 1 lindi kurp 535924 Apr 17 15:28 xterm_256-1_sh4.deb
-rw-r--r-- 1 lindi kurp 528400 Apr 17 15:28 xterm_256-1_sparc.deb
-rw-r--r-- 1 lindi kurp 535114 Apr 17 15:28 xterm_256-1_sparc64.deb

All versionf of a binary package for all architectures
======================================================

$ debsnap --binary xterm
$ ls -l binary-xterm/
<output omited since it is so long>


-Timo

Reply via email to