I think I've found the issue. If I add a "print" in the loop that
builds $apackagescachefile:

# Get available package information out of all Packages files
foreach (@files) {
print "file $_\n";
    # Parse Packages file if creation time is newer than packages cache
    if (! -e $apackagescachefile or -C $_ < -M $apackagescachefile
        or $cache_file_corrupt) {
        my ($href, $release) = &parse_file ($_);
        foreach my $pkg (keys %$href) {
            foreach my $arch (keys %{$href->{$pkg}}) {
                $apackages->{$pkg}{$arch}{$release} = $href->{$pkg}{$arch};
            }
        }
    }
}

I get:

# ./apt-show-versions -i
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_stable_main_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_stable_main_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_stable_contrib_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_stable_contrib_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_stable_non-free_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_stable_non-free_binary-i386_Packages
file 
/var/lib/apt/lists/security.debian.org_debian-security_dists_stable-security_main_binary-amd64_Packages
file 
/var/lib/apt/lists/security.debian.org_debian-security_dists_stable-security_main_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_testing_main_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_testing_main_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_testing_contrib_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_testing_contrib_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_testing_non-free_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_testing_non-free_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_testing_non-free-firmware_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_testing_non-free-firmware_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_unstable_main_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_unstable_contrib_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_unstable_contrib_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_unstable_non-free_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_unstable_non-free_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_unstable_non-free-firmware_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_unstable_non-free-firmware_binary-i386_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_experimental_main_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_experimental_main_binary-i386_Packages
file 
/var/lib/apt/lists/debug.mirrors.debian.org_debian-debug_dists_unstable-debug_main_binary-amd64_Packages
file 
/var/lib/apt/lists/debug.mirrors.debian.org_debian-debug_dists_unstable-debug_main_binary-i386_Packages
file /var/lib/apt/lists/_var_local_apt_._Packages
file /var/lib/apt/lists/_var_local_apt-i386_._Packages

in particular:

file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_unstable_main_binary-amd64_Packages
file 
/var/lib/apt/lists/ftp.debian.org_debian_dists_unstable_main_binary-i386_Packages

As for architecture "all", apt-show-versions uses a single entry
in the cache file, the i386 data will override the amd64 data,
as ...-i386_Packages is read after ...-amd64_Packages.

Since ...-i386_Packages still has 4:7.4.5-3, this will give 4:7.4.5-3
as the unstable version instead of 4:7.5.4-4, which is in
...-amd64_Packages.

IMHO, for architecture "all", either only the Packages file that
corresponds to the main architecture of the machine should be
considered, or the latest version between the various packages
should be chosen. In the current case, these two strategies are
equivalent, but there may be cases where a foreign architecture
may have a more recent version.

Ideally, the same rule as apt should be chosen. I think that it
chooses the latest version, as in the past, IIRC, I was offered the
choice to upgrade the "Architecture: all" packages when available
for the foreign architecture only.

-- 
Vincent Lefèvre <vinc...@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)

Reply via email to