From: Alexey Tourbin <at@altlinux.ru>
To: ALT Linux Team development discussions <devel@lists.altlinux.org>
Subject: Re: [devel] сравнение версий в rpm
Date: Sat, 20 Dec 2008 12:17:28 +0300
Message-ID: <20081220091728.GZ21286@altlinux.org> (raw)
In-Reply-To: <20081220090053.GY21286@altlinux.org>
[-- Attachment #1: Type: text/plain, Size: 2934 bytes --]
On Sat, Dec 20, 2008 at 12:00:53PM +0300, Alexey Tourbin wrote:
> > С примерно такими разделами:
> > - общие принципы 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 для сравнения
строк вида V-R. Сначал будут сравниваться версии V. Если они равны,
то знак "-" означает литеральное совпадение, и далее будет сравнение
релизов R.
[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
next prev parent reply other threads:[~2008-12-20 9:17 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 ` [devel] сравнение версий в rpm Alexey Tourbin
2008-12-20 9:17 ` Alexey Tourbin [this message]
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=20081220091728.GZ21286@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