Package: apt-utils Version: 1.8.0~alpha2 Severity: wishlist Tags: patch Dear Maintainer,
apt-sortpkgs currently sorts the various versions of a package in lexicographical order. It would be helpful if it could sort them according to the policy (e.g. to use in mini-dak) The patch below implements a new option '--compare-version'. Regards, JH Chatenet diff -Naur apt-1.8.0~alpha2.orig/apt-private/private-cmndline.cc apt-1.8.0~alpha2/apt-private/private-cmndline.cc --- apt-1.8.0~alpha2.orig/apt-private/private-cmndline.cc 2018-11-13 10:31:49.000000000 +0100 +++ apt-1.8.0~alpha2/apt-private/private-cmndline.cc 2018-12-02 15:53:36.802358735 +0100 @@ -319,6 +319,7 @@ static bool addArgumentsAPTSortPkgs(std::vector<CommandLine::Args> &Args, char const * const)/*{{{*/ { addArg('s',"source","APT::SortPkgs::Source",0); + addArg('n',"compare-versions","APT::SortPkgs::CompareVersions",0); return true; } /*}}}*/ diff -Naur apt-1.8.0~alpha2.orig/cmdline/apt-sortpkgs.cc apt-1.8.0~alpha2/cmdline/apt-sortpkgs.cc --- apt-1.8.0~alpha2.orig/cmdline/apt-sortpkgs.cc 2018-11-13 10:31:49.000000000 +0100 +++ apt-1.8.0~alpha2/cmdline/apt-sortpkgs.cc 2018-12-05 09:57:01.043949197 +0100 @@ -15,6 +15,7 @@ #include <apt-pkg/cmndline.h> #include <apt-pkg/configuration.h> +#include <apt-pkg/debversion.h> #include <apt-pkg/error.h> #include <apt-pkg/fileutl.h> #include <apt-pkg/init.h> @@ -38,6 +39,21 @@ using namespace std; +// Purely lexical comparison of version strings +static int CompareVersions_as_string(string A, string B) +{ + return stringcasecmp(A,B); +} + +// Comparison of version strings as dpkg does +static int CompareVersions_as_number(string A, string B) +{ + return debVS.CmpVersion(A, B); +} + +// Defaults to a simple lexical comparison +int (*CompareVersions)(string A, string B) = CompareVersions_as_string; + struct PkgName /*{{{*/ { string Name; @@ -51,7 +67,7 @@ int A = stringcasecmp(Name,x.Name); if (A == 0) { - A = stringcasecmp(Ver,x.Ver); + A = (*CompareVersions)(Ver,x.Ver); if (A == 0) A = stringcasecmp(Arch,x.Arch); } @@ -155,6 +171,13 @@ CommandLine CmdL; ParseCommandLine(CmdL, APT_CMD::APT_SORTPKG, &_config, &_system, argc, argv, &ShowHelp, &GetCommands); + // Sort by ascending version number if option --compare-versions was given + + bool WithVersionNumbers = _config->FindB("APT::SortPkgs::CompareVersions",false); + + if (WithVersionNumbers == true) + CompareVersions = &CompareVersions_as_number; + // Match the operation for (unsigned int I = 0; I != CmdL.FileSize(); I++) if (DoIt(CmdL.FileList[I]) == false) diff -Naur apt-1.8.0~alpha2.orig/doc/apt-sortpkgs.1.xml apt-1.8.0~alpha2/doc/apt-sortpkgs.1.xml --- apt-1.8.0~alpha2.orig/doc/apt-sortpkgs.1.xml 2018-11-13 10:31:49.000000000 +0100 +++ apt-1.8.0~alpha2/doc/apt-sortpkgs.1.xml 2018-12-03 19:55:29.482936399 +0100 @@ -50,6 +50,12 @@ Use source index field ordering. Configuration Item: <literal>APT::SortPkgs::Source</literal>.</para></listitem> </varlistentry> + + <varlistentry><term><option>-n</option></term><term><option>--compare-versions</option></term> + <listitem><para> + Sort the different versions of a package by ascending version number. + Configuration Item: <literal>APT::SortPkgs::CompareVersions</literal>.</para></listitem> + </varlistentry> &apt-commonoptions;