-=| Joel Roth, Wed, Dec 22, 2010 at 12:31:56AM -1000 |=-
> On Tue, Dec 21, 2010 at 11:22:52AM +0200, Damyan Ivanov wrote:
> > Another way is to query apt's local database perhaps via
> > AptPkg::PkgRecords.
>
> Thanks for the pointer. I'm playing with that right now.
>
> use feature ':5.10';
> use AptPkg::Cache;
> my $apt = AptPkg::Cache->new();
> my $record = $apt->packages; # AptPkg::PkgRecords object
> my $h = $record->lookup($package_name);
> say "$package_name $h->{VerStr}"
>
> To integrate with cpan clients, it would help to have a reliable
> way to get the corresponding upstream version. Here are some
> samples:
>
> Package Debian version Probable CPAN version
> -----------------------------------------------------
> padre 0.76.ds1-1 0.76
> nama 1.064-6 1.064
> libdancer-perl 1.2000+dfsg-1 1.2000
>
> Any references? I could whip up a regex, of course...
This is a can of worms :)
The only certain thing is that you should drop everything after the
last dash. What remains is what is called "upstream version" of the
Debian package. Unfortunately, there is *no guarantee* that this will
match the version under which upstream has released their
distribution.
There are many reasons for the "upstream" part of a Debian package
version to differ from the actual version string used by upstream.
Some times, the upstream sources were repackaged and the resulting
tarball used as a substitute of the upstream source. These are most
commonly noted as "+dfsg" or ".dsX".
Some other time, upstream had changed the way they increment versions
in a way that is not compatible with dpkg's understanding of versions.
For example Module::Build 0.36 is to be found in Debian as
libmodule-build-perl 0.360000. The main difference between versions
found on CPAN and Debian versions is that CPAN ones are compared as
fractional numbers. Debian versions are compared as a sequence of
(integer) numbers and non-digit text strings. So for dpkg 0.3401 is
larger than 0.36 (because 3401 is larger than 36), whereas for CPAN
the opposite is true. In order to cope with upstream releasing 0.36
after 0.3401, we "mangle" the upstream version, forcing the part after
the dot to be right-padded with zeroes and be at least 4 digits.
These manglings are described (as a Perl substitutions) in a file
named 'debian/watch' in the *source* debian package. These source
packages are not normally available on users' systems, but you can
fetch them via http://packages.qa.debian.org/$package -- in the left
pane, in the "versions" box, there are icons for downloading the .dsc
file of each availabel version. "dsc" stands for Debian source control
file and the link to it can be given to the 'dget' program which will
download the .dsc and the associated files that comprise the "source
package" and then unpack the source package into a folder so that you
can inspect the debian/watch file.
Armed with the knowledge of the version manglings, you can apply them
to the version required by the META and look for the corresponding
Debian package versions on the local system.
As you can see, quite a complicated task.
Attachment:
signature.asc
Description: Digital signature