From: Alexey Tourbin <at@altlinux.ru> To: devel@altlinux.ru Subject: [devel] RFC: perl deps versioning Date: Wed, 1 Dec 2004 22:33:08 +0300 Message-ID: <20041201193308.GK7294@solemn.turbinal.org> (raw) [-- 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 --]
next reply other threads:[~2004-12-01 19:33 UTC|newest] Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top 2004-12-01 19:33 Alexey Tourbin [this message] 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
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20041201193308.GK7294@solemn.turbinal.org \ --to=at@altlinux.ru \ --cc=devel@altlinux.ru \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
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