From: Alexey Tourbin <at@altlinux.ru> To: ALT Linux Team development discussions <devel@lists.altlinux.org> Subject: [devel] сравнение версий в rpm Date: Sat, 20 Dec 2008 12:00:53 +0300 Message-ID: <20081220090053.GY21286@altlinux.org> (raw) In-Reply-To: <20081218075801.GB12732@odnako> [-- Attachment #1: Type: text/plain, Size: 3138 bytes --] On Thu, Dec 18, 2008 at 10:58:02AM +0300, Kirill Maslinsky wrote: > On Thu, Dec 18, 2008 at 01:06:09AM +0600, Mikhail Gusarov wrote: > > > > Twas brillig at 01:05:21 18.12.2008 UTC+06 when dottedmag@altlinux.org did gyre and gimble: > > > > PS>> А нельзя не язвить, а подсказать человек ссылочку, объяснить :) > > > > MG> http://www.altlinux.org/Spec#Epoch > > > > Ну и вообще предполагается, что майнтайнер документацию по RPM прочёл, > > преждем чем начал спеки писать :-P > > Думаю, нам не хватает отдельного HOWTO по RPM-версионированию. > > С примерно такими разделами: > - общие принципы rpm-версий > + разъяснение принципа версий ("целочисленные сегменты", а не десятичные > числа, как в соседнем треде разъяснил at@), Это нужно понимать так. Версия есть строка; так что мы сравниваем версии, имя две строки: str1 и str2. Строки разбиваются на сегменты. Далее сравнение версий происходит по сегментам, до первого неодинакового результата. версия := сегмент сегмент* При исчерпании сегментов сравнение происходит как в strcmp(3), если букву считать за сегмент (то есть подстрока меньше строки). Сегмент может быть целочисленным или нецелочисленным. целочисленный_сегмент := [0-9][0-9]* (жадно) нецелочисленный_сегемент := [^0-9][^0-9]* (жадно) Сравнение двух целочисленных сегментов определено естественным образом. Сравнение целочисленного и нецелочисленного сегментов не определено (не надо спрашивать, какая версия больше, "RC" или "33"). Сравнение двух нецелочисленных семгенов либо определено, либо не определено. Сравнение двух нецелочисленных сегментов по умолчанию не определено. Тем не менее, литеральное совпадение означает равенсто нецелочисленных сегментов. Это позволяет считать, что "1.0" = "1.0", потому что точки литерально совпадают (и оба целочисленных сегмента также совпадют: 1==1 и 0==0). Равно и "alt1" = "alt1". Но не следует, например, ставить вопрос о сравнении версий 1.0 и 1_0 (то есть не следует надеяться, что одна из этих версий больше другой, или же что они равны). Сравнение нецелочисленных сегментов в некоторых случаях также доопределяется лексикографически, но только в пределах регистра. Так, "1a" < 1b", потому что 1==1 и 'a'<'b'. Вместе с тем, не следует сравнивать версии "1a" и "1.0", а также "1a" и "1B" (здесь разный регистр букв). > + структура rpm-версии (Epoch-версия-релиз) Epoch влияет следующим образом. Нужно иметь в ввиду два обстоятельства: 1) эпоха может быть только целочисленной, так что результат сравнения эпох всегда определён; 2) эпоха либо есть, либо её нет. Если есть обе эпохи, то сравниваются сначала эпохи, а потом версии. Если обеих эпох эпох нет, то сравниваются только версии. В остальных случаях большей считается та версия, которая имеет эпоху. Если одна из версий имеет эпоху 0, а другая версия эпохи не имеет, то результат сравнения не определён. > + утилиты для сравнения версий (rpmvercmp) rpmvercmp сравнивает только версии, без эпох. Результат сравнений версий с эпохами при помощи rpmvercpm не определён. rpmevrcmp использовать не следует. [-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
next prev parent reply other threads:[~2008-12-20 9:00 UTC|newest] Thread overview: 80+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-12-17 10:13 [devel] remove package Pavel Solntsev 2008-12-17 10:30 ` Andrey Rahmatullin 2008-12-17 10:31 ` Mikhail Gusarov 2008-12-17 19:02 ` Pavel Solntsev 2008-12-17 19:05 ` Mikhail Gusarov 2008-12-17 19:06 ` Mikhail Gusarov 2008-12-17 20:30 ` Pavel Solntsev 2008-12-17 21:05 ` Afanasov Dmitry 2008-12-29 9:38 ` [devel] [JT] RTFM Michael Shigorin 2008-12-29 9:42 ` Mikhail Gusarov 2008-12-17 22:01 ` [devel] remove package Grigory Batalov 2008-12-18 7:58 ` Kirill Maslinsky 2008-12-18 8:31 ` Andrey Rahmatullin 2008-12-18 9:24 ` Alexey Morozov 2008-12-18 9:33 ` Kirill Maslinsky 2008-12-19 7:03 ` Andrey Rahmatullin 2008-12-19 20:08 ` Kirill Maslinsky 2008-12-19 20:19 ` Damir Shayhutdinov 2008-12-19 20:38 ` Kirill Maslinsky 2008-12-19 21:00 ` Vitaly Lipatov 2008-12-19 21:22 ` Dmitry V. Levin 2008-12-19 21:21 ` Dmitry V. Levin 2008-12-19 21:12 ` Andrey Rahmatullin 2008-12-18 8:32 ` [devel] HOWTO по RPM-версионированию Vitaly Lipatov 2008-12-18 8:40 ` Vladimir V. Kamarzin 2008-12-18 10:00 ` Vitaly Lipatov 2008-12-18 11:17 ` Aleksey Avdeev 2008-12-29 10:02 ` [devel] backports releases (was: HOWTO по RPM-версионированию) Michael Shigorin 2008-12-30 11:20 ` [devel] backports releases Aleksey Avdeev 2008-12-18 11:38 ` [devel] HOWTO по RPM-версионированию Grigory Batalov 2008-12-18 14:18 ` Damir Shayhutdinov 2008-12-18 19:44 ` Vitaly Lipatov 2008-12-18 22:39 ` Dmitry V. Levin 2008-12-19 6:22 ` Damir Shayhutdinov 2008-12-19 6:36 ` Vladimir V. Kamarzin 2008-12-19 6:37 ` Mikhail Gusarov 2008-12-19 7:51 ` Vladimir V. Kamarzin 2008-12-19 6:49 ` Damir Shayhutdinov 2008-12-25 18:20 ` [devel] [JT] источник пакетов (was: HOWTO по RPM-версионированию) Michael Shigorin 2008-12-25 21:48 ` [devel] HOWTO по RPM-версионированию Grigory Batalov 2008-12-25 22:02 ` Led 2008-12-25 22:06 ` [devel] acl Dmitry V. Levin 2008-12-25 22:03 ` [devel] HOWTO по RPM-версионированию Vitaly Lipatov 2008-12-25 23:22 ` Grigory Batalov 2008-12-29 9:51 ` Michael Shigorin 2008-12-18 8:42 ` Mikhail Gusarov 2008-12-18 9:37 ` Kirill Maslinsky 2008-12-18 10:12 ` Mikhail Gusarov 2008-12-18 10:24 ` Kirill Maslinsky 2008-12-18 10:30 ` Mikhail Gusarov 2008-12-18 10:32 ` Mikhail Gusarov 2008-12-19 20:29 ` Kirill Maslinsky 2008-12-20 8:04 ` Mikhail Gusarov 2008-12-20 8:06 ` Dmitriy M. Maslennikov 2008-12-20 8:08 ` Хихин Руслан 2008-12-20 9:00 ` Alexey Tourbin [this message] 2008-12-20 9:17 ` [devel] сравнение версий в rpm Alexey Tourbin 2008-12-20 9:35 ` Alexey Tourbin 2008-12-20 10:06 ` Денис Смирнов 2008-12-20 10:18 ` Mikhail Gusarov 2008-12-20 10:39 ` Alexey Tourbin 2008-12-20 10:41 ` Mikhail Gusarov 2008-12-20 10:55 ` Alexey Tourbin 2008-12-20 11:15 ` Хихин Руслан 2008-12-20 11:33 ` Alexey Tourbin 2008-12-20 11:43 ` Mikhail Gusarov 2008-12-20 11:57 ` Alexey Tourbin 2008-12-20 12:02 ` Mikhail Gusarov 2008-12-20 12:17 ` Alexey Tourbin 2008-12-20 12:22 ` Mikhail Gusarov 2008-12-20 14:24 ` Ivan A. Melnikov 2008-12-20 12:41 ` Хихин Руслан 2008-12-20 11:08 ` Alexey Tourbin 2008-12-20 11:16 ` Денис Смирнов 2008-12-20 9:52 ` Alexey Tourbin 2008-12-22 7:17 ` Vladimir V. Kamarzin 2008-12-25 15:25 ` [devel] remove package Michael Shigorin 2008-12-25 18:59 ` Afanasov Dmitry 2008-12-29 10:12 ` Michael Shigorin 2008-12-29 20:07 ` Led
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=20081220090053.GY21286@altlinux.org \ --to=at@altlinux.ru \ --cc=devel@lists.altlinux.org \ /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