[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: [APT] A way to produce a by-repository listing of packages



Sebastian Kapfer wrote:
Hello,

On Fri, 04 Mar 2005 18:50:12 +0100, Travis Crump wrote:


You can easily hack apt-show-versions to do this, example patch[for
apt-show-versions] attached[just do 'apt-show-versions | grep -v Debian'
to get all non-(official)-Debian packages].


Great idea, but I can't get it to work.  Applied your patch, but
apt-show-versions spits lines line this one:

	rsync/unstable uptodate 2.6.3-2

i.e. there's no Debian there which I could grep for.  What's the magic
switch to make it print the Origin: field?  Unfortunately, my Perl sucks.


a) make sure you are running the modified version and not the version in your path

b) run '/path/to/modified/apt-show-versions -i' and try again

c) it is a lazy patch and won't work on non-i386 and/or package/release pair formats other than the ones on my computer. Attached patch should fix the arch issue[and has other cosmetic changes].

Travis
--- /usr/bin/apt-show-versions	2004-02-24 10:06:24.000000000 -0500
+++ /home/pretzalz/bin/asv	2005-03-04 16:28:07.000000000 -0500
@@ -34,9 +34,14 @@
 use Getopt::Long;
 use Storable qw(store retrieve);
 
-my $apackagescachefile="/var/cache/apt-show-versions/apackages";
-my $ipackagescachefile="/var/cache/apt-show-versions/ipackages";
-my $filescachefile="/var/cache/apt-show-versions/files";
+my $cachedir = "/var/cache/apt-show-versions";
+unless ( -w "$cachedir") {
+	$cachedir="$ENV{HOME}/.apt-show-versions";
+	mkdir $cachedir unless -e $cachedir;
+}
+my $apackagescachefile="${cachedir}/apackages";
+my $ipackagescachefile="${cachedir}/ipackages";
+my $filescachefile="${cachedir}/files";
 
 use AptPkg::Config '$_config';
 use AptPkg::System '$_system';
@@ -127,7 +132,7 @@
 if (!-e $filescachefile or -M $list_dir < -M $filescachefile or !ref($filesref)) {
     opendir(DIR, $list_dir) or die "Can't opendir $list_dir: $!";
     @files = map { $list_dir . $_} grep /Packages$/, readdir(DIR);
-    ($< == 0) and (store(\@files, $filescachefile) or
+    (store(\@files, $filescachefile) or
 		   warn "Can't write $filescachefile");
 }
 unless (scalar @files > 0) {die "Error: No information about packages! (Maybe no deb entries?)\n"};
@@ -142,7 +147,7 @@
 }
 if (!-e $ipackagescachefile or -M $status_file < -M $ipackagescachefile or !ref($ipackages)) {
     $ipackages = parse_file ($status_file, 1);
-    ($< == 0) and (store($ipackages, $ipackagescachefile) or
+    (store($ipackages, $ipackagescachefile) or
 		   warn "Can't write $ipackagescachefile");
 }
 
@@ -161,17 +166,24 @@
 # Get available package information out of all Packages files
 foreach (@files) {
     my $release = $_;
+    $release =~ s/[-a-z]*_binary-[a-z0-9]+_Packages/Release/;
     $release =~ s/Packages/Release/;
-    $release = quotemeta $release;
-    my $archiv;
-    $archiv = `fgrep -s Archive $release` or
-	$archiv = `fgrep -s Suite $release` or
-	($release =~ /(potato|woody|sarge|sid|stable|testing|unstable)/ and $archiv = $1) or
-	$archiv = "unknown";
-#	next;
-    $archiv =~ s/Archive: //;
-    $archiv =~ s/Suite: //;
-    $archiv =~ s/\n//;
+    my $archiv="unknown";
+    my $codename;
+    if (-f "$release" and -r "$release") {
+	open (RELEASE, $release) or die "bad error";
+    	while (my $release_line = <RELEASE>) {
+		$archiv = $1 if $release_line =~ "Origin: +(.+)"; 
+		$codename = $1 if $release_line =~ "Archive: +(.+)"; 
+		$codename = $1 if $release_line =~ "Suite: +(.+)"; 
+        }
+	close RELEASE;
+    }
+    else {
+	($release =~ /(potato|woody|sarge|sid|stable|testing|unstable)/ and $codename = $1) or
+	$codename = "unknown";
+    }	
+    $archiv .= "-$codename";
     $releases{$archiv} = 1;
 
     # Parse Packages file if newer than packages cache
@@ -210,10 +222,10 @@
     }
 }
 # Store if we are root
-($< == 0) and (store($apackages, $apackagescachefile) or
+(store($apackages, $apackagescachefile) or
 	       die "Warning: Can't write to $apackagescachefile!\n");
 # Exit if we are root and using the -i option
-($< == 0) and (exists $opts{'initialize'}) and exit;
+(exists $opts{'initialize'}) and exit;
 
 # print info for selected package
 if (exists $opts{'package'} &&

Attachment: signature.asc
Description: OpenPGP digital signature


Reply to: