* [devel] RFC: perl deps versioning @ 2004-12-01 19:33 Alexey Tourbin 2004-12-01 23:15 ` [devel] " Michael Shigorin ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Alexey Tourbin @ 2004-12-01 19:33 UTC (permalink / raw) To: devel [-- Attachment #1: Type: text/plain, Size: 3343 bytes --] Здравствуйте, Напомню суть проблемы: для проверки версии требуемого модуля в перле используются числа с десятичной точкой (напр. `use Data::Dumper 2.121', в данном случае это текущая версия Data::Dumper). При этом точность требуемой версии (число знаков после точки) может не совпадать с точностью версии, указанной в самом этом модуле (напр. новая версия Data::Dumper может иметь версию 2.20 (хм... колбасная версия:))). RPM использует другой алгоритм сравнения версий: разбивает версию как строку на цифровые и буквенные сегменты, после чего цифровые сегменты сравниваются как целые числа, а буквенные -- как строки. В результате без корректировки точности версий возможны следующие казусы: 1) перебор в смысле Requires, в результате которого получается unmet dependency: Requires: perl(Data/Dumper) >= 0:2.121 Provides: perl(Data/Dumper) = 0:2.20 2) перебор в смысле Provides, в результате которого необходимая зависимость фактически теряется: Requires: perl(Data/Dumper) >= 0:2.12 Provides: perl(Data/Dumper) = 0:2.100 Простым и действенным решением этой проблемы мне представляется ограничение как Requires, так и Provides с точностью до двух знаков после точки. Обоснование: статистика текущего использования такого рода зависимостей. $ rpm -qa --requires --provides |grep 'perl(' |grep = >perl_ver_deps (У меня на машине установлены далеко не все пакеты, но большинство перловых всё же установлено.) Зависимости Requires с одним знаками после точки: $ perl -ne 'print if />= 0:\d+\.\d$/' perl_ver_deps perl(Chart/Base.pm) >= 0:2.0 perl(Socket.pm) >= 0:1.3 perl(HTTP/Request.pm) >= 0:1.3 perl(File/Spec.pm) >= 0:0.8 perl(Socket.pm) >= 0:1.3 perl(File/Spec.pm) >= 0:0.8 $ Зависимости Requires с двумя знаками после точки: $ perl -ne 'print if />= 0:\d+\.\d\d$/' perl_ver_deps perl(HTML/Element.pm) >= 0:3.15 perl(Config/General.pm) >= 0:1.18 perl(IO/Pty.pm) >= 0:0.97 perl(Pod/Escapes.pm) >= 0:1.03 perl(HTML/Element.pm) >= 0:3.05 perl(HTML/TreeBuilder.pm) >= 0:3.01 perl(Getopt/Long.pm) >= 0:2.17 perl(HTML/Parser.pm) >= 0:2.19 perl(HTML/Tagset.pm) >= 0:3.02 perl(Convert/ASN1.pm) >= 0:0.07 perl(HTML/Parser.pm) >= 0:3.24 perl(Convert/ASN1.pm) >= 0:0.07 perl(LWP.pm) >= 0:5.76 perl(Net/SSLeay.pm) >= 0:1.08 perl(Search/Dict.pm) >= 0:1.02 perl(Tie/IxHash.pm) >= 0:1.21 perl(Pod/Usage.pm) >= 0:1.12 perl(XML/Stream.pm) >= 0:1.18 perl(MIME/Base64.pm) >= 0:2.04 perl(MIME/QuotedPrint.pm) >= 0:2.03 perl(Mail/Field.pm) >= 0:1.05 perl(Mail/Header.pm) >= 0:1.09 perl(Mail/Internet.pm) >= 0:1.28 perl(XML/LibXML.pm) >= 0:1.57 perl(Crypt/DES.pm) >= 0:2.03 perl(Digest/HMAC.pm) >= 0:1.00 perl(Digest/MD5.pm) >= 0:2.11 perl(Digest/SHA1.pm) >= 0:1.02 $ Зависимости Requires с тремя и более знаками после точки: $ perl -ne 'print if />= 0:\d+\.\d\d\d+$/' perl_ver_deps perl(Text/Wrap.pm) >= 0:98.112902 perl(LWP/UserAgent.pm) >= 0:2.003 perl(IO/Lines.pm) >= 0:1.108 perl(IO/Scalar.pm) >= 0:1.117 perl(IO/ScalarArray.pm) >= 0:1.114 $ Т.е. наиболее востребованный формат указания зависимостей -- с двумя знаками после точки. PS: зависимость может быть также указана с помощью v-string (такие зависимости имеют Serial:1), в этом случае проблем не возникает. Однако появляется проблема сопоставления версии v-string и десятичной версии. [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] Re: RFC: perl deps versioning 2004-12-01 19:33 [devel] RFC: perl deps versioning Alexey Tourbin @ 2004-12-01 23:15 ` Michael Shigorin 2004-12-02 0:57 ` Alexey Tourbin 2004-12-01 23:49 ` [devel] " Mikhail Zabaluev 2004-12-02 15:29 ` Alexey Tourbin 2 siblings, 1 reply; 9+ messages in thread From: Michael Shigorin @ 2004-12-01 23:15 UTC (permalink / raw) To: devel [-- Attachment #1: Type: text/plain, Size: 467 bytes --] On Wed, Dec 01, 2004 at 10:33:08PM +0300, Alexey Tourbin wrote: > Простым и действенным решением этой проблемы мне представляется > ограничение как Requires, так и Provides с точностью до двух > знаков после точки. Обоснование: статистика текущего > использования такого рода зависимостей. В конце концов, _необходимо_ более точные можно и руками сказать. -- ---- WBR, Michael Shigorin <mike@altlinux.ru> ------ Linux.Kiev http://www.linux.kiev.ua/ [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] Re: RFC: perl deps versioning 2004-12-01 23:15 ` [devel] " Michael Shigorin @ 2004-12-02 0:57 ` Alexey Tourbin 0 siblings, 0 replies; 9+ messages in thread From: Alexey Tourbin @ 2004-12-02 0:57 UTC (permalink / raw) To: devel [-- Attachment #1: Type: text/plain, Size: 658 bytes --] On Thu, Dec 02, 2004 at 01:15:42AM +0200, Michael Shigorin wrote: > On Wed, Dec 01, 2004 at 10:33:08PM +0300, Alexey Tourbin wrote: > > Простым и действенным решением этой проблемы мне представляется > > ограничение как Requires, так и Provides с точностью до двух > > знаков после точки. Обоснование: статистика текущего > > использования такого рода зависимостей. > > В конце концов, _необходимо_ более точные можно и руками сказать. Только на основной пакет, а не на виртуаальный, т.к. Requires и Provides будут одинаково урезаться. > -- > ---- WBR, Michael Shigorin <mike@altlinux.ru> > ------ Linux.Kiev http://www.linux.kiev.ua/ [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] RFC: perl deps versioning 2004-12-01 19:33 [devel] RFC: perl deps versioning Alexey Tourbin 2004-12-01 23:15 ` [devel] " Michael Shigorin @ 2004-12-01 23:49 ` Mikhail Zabaluev 2004-12-02 1:33 ` [devel] " Alexey Tourbin 2004-12-02 15:29 ` Alexey Tourbin 2 siblings, 1 reply; 9+ messages in thread From: Mikhail Zabaluev @ 2004-12-01 23:49 UTC (permalink / raw) To: ALT Devel discussion list В Срд, 01/12/2004 в 22:33 +0300, Alexey Tourbin пишет: > Напомню суть проблемы: для проверки версии требуемого модуля в перле > используются числа с десятичной точкой (напр. `use Data::Dumper 2.121', > в данном случае это текущая версия Data::Dumper). При этом точность > требуемой версии (число знаков после точки) может не совпадать > с точностью версии, указанной в самом этом модуле (напр. новая версия > Data::Dumper может иметь версию 2.20 (хм... колбасная версия:))). > > RPM использует другой алгоритм сравнения версий: разбивает версию как > строку на цифровые и буквенные сегменты, после чего цифровые сегменты > сравниваются как целые числа, а буквенные -- как строки. > > В результате без корректировки точности версий возможны следующие > казусы: > > 1) перебор в смысле Requires, в результате которого получается unmet > dependency: > Requires: perl(Data/Dumper) >= 0:2.121 > Provides: perl(Data/Dumper) = 0:2.20 > > 2) перебор в смысле Provides, в результате которого необходимая > зависимость фактически теряется: > Requires: perl(Data/Dumper) >= 0:2.12 > Provides: perl(Data/Dumper) = 0:2.100 По-моему, правильнее будет унифицировать все числа до трех знаков после точки, дополняя нулями. Решим проблему почти для всех случаев без потери точности. ^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] Re: RFC: perl deps versioning 2004-12-01 23:49 ` [devel] " Mikhail Zabaluev @ 2004-12-02 1:33 ` Alexey Tourbin 2004-12-02 1:54 ` Alexey Tourbin 2004-12-03 3:36 ` Alexey Tourbin 0 siblings, 2 replies; 9+ messages in thread From: Alexey Tourbin @ 2004-12-02 1:33 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 1394 bytes --] On Thu, Dec 02, 2004 at 02:49:23AM +0300, Mikhail Zabaluev wrote: > > 1) перебор в смысле Requires, в результате которого получается unmet > > dependency: > > Requires: perl(Data/Dumper) >= 0:2.121 > > Provides: perl(Data/Dumper) = 0:2.20 > > > > 2) перебор в смысле Provides, в результате которого необходимая > > зависимость фактически теряется: > > Requires: perl(Data/Dumper) >= 0:2.12 > > Provides: perl(Data/Dumper) = 0:2.100 > > По-моему, правильнее будет унифицировать все числа до трех знаков после > точки, дополняя нулями. Решим проблему почти для всех случаев без потери > точности. Без потери точности нужно унифицировать до шести цифр, тогда можно будет отказаться от версий типа 1:x.y.z и конвертировать их в 0:x.00y.00z. На уровне перла это автоматически так и происходит: $ grep 'VERSION =' /usr/lib/perl5/vendor_perl/Net/SNMP.pm our $VERSION = v4.1.2; $ perl -e 'use Net::SNMP 4.1' Net::SNMP version 4.1 required--this is only version 4.001002 at -e line 1 BEGIN failed--compilation aborted at -e line 1. $ Тем более что зависимости 1: в общем-то harmful, т.к. Serial перекрывает любую версию. Так что здесь тоже возможны казусы. Однако же v-strings deprecated. Правда, будут какие-то version objects. Да, наверное три знака -- тоже неплохо (тогда для v-strings сохранится один знак после точки, если отказаться от 1: зависимостей). [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] Re: RFC: perl deps versioning 2004-12-02 1:33 ` [devel] " Alexey Tourbin @ 2004-12-02 1:54 ` Alexey Tourbin 2004-12-02 12:16 ` Dmitry V. Levin 2004-12-03 3:36 ` Alexey Tourbin 1 sibling, 1 reply; 9+ messages in thread From: Alexey Tourbin @ 2004-12-02 1:54 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 394 bytes --] On Thu, Dec 02, 2004 at 04:33:49AM +0300, Alexey Tourbin wrote: > Тем более что зависимости 1: в общем-то harmful, т.к. Serial перекрывает > любую версию. Так что здесь тоже возможны казусы. Однако же v-strings > deprecated. Правда, будут какие-то version objects. Хм... а rpmvercmp Serial умеет понимать? $ rpmvercmp 3.1 3:2 -1 $ rpmvercmp 3.2 3:2 0 $ rpmvercmp 3.3 3:2 1 $ [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] Re: RFC: perl deps versioning 2004-12-02 1:54 ` Alexey Tourbin @ 2004-12-02 12:16 ` Dmitry V. Levin 0 siblings, 0 replies; 9+ messages in thread From: Dmitry V. Levin @ 2004-12-02 12:16 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 680 bytes --] On Thu, Dec 02, 2004 at 04:54:16AM +0300, Alexey Tourbin wrote: > On Thu, Dec 02, 2004 at 04:33:49AM +0300, Alexey Tourbin wrote: > > Тем более что зависимости 1: в общем-то harmful, т.к. Serial перекрывает > > любую версию. Так что здесь тоже возможны казусы. Однако же v-strings > > deprecated. Правда, будут какие-то version objects. > > Хм... а rpmvercmp Serial умеет понимать? > > $ rpmvercmp 3.1 3:2 > -1 > $ rpmvercmp 3.2 3:2 > 0 > $ rpmvercmp 3.3 3:2 > 1 > $ Нет, он сравнивает элементы. Для того, чтобы сравнивать [serial:]version-release, есть rpmevrcmp: $ rpmevrcmp 3.1 3:2 -1 $ rpmevrcmp 3.2 3:2 -1 $ rpmevrcmp 3.3 3:2 -1 -- ldv [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] Re: RFC: perl deps versioning 2004-12-02 1:33 ` [devel] " Alexey Tourbin 2004-12-02 1:54 ` Alexey Tourbin @ 2004-12-03 3:36 ` Alexey Tourbin 1 sibling, 0 replies; 9+ messages in thread From: Alexey Tourbin @ 2004-12-03 3:36 UTC (permalink / raw) To: ALT Devel discussion list [-- Attachment #1: Type: text/plain, Size: 2299 bytes --] On Thu, Dec 02, 2004 at 04:33:49AM +0300, Alexey Tourbin wrote: > Тем более что зависимости 1: в общем-то harmful, т.к. Serial перекрывает > любую версию. Так что здесь тоже возможны казусы. Однако же v-strings > deprecated. Правда, будут какие-то version objects. > > Да, наверное три знака -- тоже неплохо (тогда для v-strings сохранится > один знак после точки, если отказаться от 1: зависимостей). Думаю остановиться на 3 цифрах и отказаться от Serial. Т.е. сейчас выполняются следующие тесты: cmp_ok "$d >= 2.0", 'eq', grok qq(use $m 2;); cmp_ok "$d >= 2.0", 'eq', grok qq(use $m 2.0;); cmp_ok "$d >= 2.0", 'eq', grok qq(use $m 2.00;); cmp_ok "$d >= 2.0", 'eq', grok qq(use $m 2.000998;); cmp_ok "$d >= 2.001", 'eq', grok qq(use $m 2.000999;); cmp_ok "$d >= 2.010", 'eq', grok qq(use $m 2.01;); cmp_ok "$d >= 2.012", 'eq', grok qq(use $m 2.012;); cmp_ok "$d >= 2.019", 'eq', grok qq(use $m 2.0199;); cmp_ok "$d >= 2.0", 'eq', grok qq(use $m v2;); cmp_ok "$d >= 2.0", 'eq', grok qq(use $m v2.0;); cmp_ok "$d >= 2.0", 'eq', grok qq(use $m v2.0.998;); cmp_ok "$d >= 2.001", 'eq', grok qq(use $m v2.0.999;); cmp_ok "$d >= 2.001", 'eq', grok qq(use $m 2.1.1;); cmp_ok "$d >= 2.001", 'eq', grok qq(use $m v2.1.1;); При этом для геренации версии отрабатывает следующий код: sub version ($) { my $sv = shift; my $class = class($sv); if ($class eq "IV" or $class eq "PVIV") { return verf($sv->int_value); } if ($class eq "NV" or $class eq "PVNV") { return verf($sv->NV); } if ($class eq "PVMG") { my @v; for (my $mg = $sv->MAGIC; $mg; $mg = $mg->MOREMAGIC) { next if $mg->TYPE ne "V"; @v = $mg->PTR =~ /(\d+)/g; last; } @v = map ord, split //, $sv->PV unless @v; return verf($v[0] + $v[1] / 1000 + $v[2] / 1000 / 1000); } return undef; } sub verf($) { my $v = shift; $v = sprintf("%.3f", int($v * 1000 + 1e-3) / 1000 + 1e-6); $v =~ s/\.000$/.0/g; return $v; } Подробности: sprintf "%.3f" может округлить в верхнюю сторону, а это не очень хорошо. Казалось бы, отрубить цифры после заданной -- нет проблем, однако же возникает казус: $ perl -le 'print 2.01 * 1000' 2010 $ perl -le 'print int(2.01 * 1000)' 2009 $ Поэтому в ход пошли 1e-3 и 1e-6. [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] Re: RFC: perl deps versioning 2004-12-01 19:33 [devel] RFC: perl deps versioning Alexey Tourbin 2004-12-01 23:15 ` [devel] " Michael Shigorin 2004-12-01 23:49 ` [devel] " Mikhail Zabaluev @ 2004-12-02 15:29 ` Alexey Tourbin 2 siblings, 0 replies; 9+ messages in thread From: Alexey Tourbin @ 2004-12-02 15:29 UTC (permalink / raw) To: devel [-- Attachment #1: Type: text/plain, Size: 227 bytes --] On Wed, Dec 01, 2004 at 10:33:08PM +0300, Alexey Tourbin wrote: > Здравствуйте, Вот оно -- зацените: http://www.nntp.perl.org/group/perl.perl5.porters/96442 Любое благое намерение очень быстро оборачивается segfault'ами. [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2004-12-03 3:36 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2004-12-01 19:33 [devel] RFC: perl deps versioning Alexey Tourbin 2004-12-01 23:15 ` [devel] " Michael Shigorin 2004-12-02 0:57 ` Alexey Tourbin 2004-12-01 23:49 ` [devel] " Mikhail Zabaluev 2004-12-02 1:33 ` [devel] " Alexey Tourbin 2004-12-02 1:54 ` Alexey Tourbin 2004-12-02 12:16 ` Dmitry V. Levin 2004-12-03 3:36 ` Alexey Tourbin 2004-12-02 15:29 ` Alexey Tourbin
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git