ALT Linux Team development discussions
 help / color / mirror / Atom feed
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 --]

  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