* Re: [devel] [git update] packages/apt: heads/master
@ 2007-12-18 8:34 ` Slava Semushin
2007-12-18 9:42 ` Alex Myltsev
0 siblings, 1 reply; 9+ messages in thread
From: Slava Semushin @ 2007-12-18 8:34 UTC (permalink / raw)
To: ALT Devel discussion list
2007/12/18, Dmitry V. Levin <ldv / altlinux.org>:
> Update of /people/ldv/packages/apt.git
[...]
> +--- a/apt/apt-pkg/algorithms.cc
> ++++ b/apt/apt-pkg/algorithms.cc
[...]
> ++/* Like strcmp, but compares digit sections by number value.
> ++ * E.g.: tar-1.10 > tar-1.9 > tar-1.1a
> ++ * (while strcmp gives tar-1.10 < tar-1.9). */
> ++static int nameCompare(const char* n1, const char* n2)
> ++{
> ++ while(*n1 && *n2) {
> ++ if(isdigit(*n1) && isdigit(*n2)) {
> ++ unsigned long long i1, i2;
> ++ i1 = strtoull(n1, const_cast<char **>(&n1), 10);
> ++ i2 = strtoull(n2, const_cast<char **>(&n2), 10);
> ++ if(i1 != i2)
> ++ return (i1 > i2) ? 1 : -1;
> ++ } else if(*n1 != *n2) {
> ++ return (*n1 > *n2) ? 1 : -1;
> ++ } else {
> ++ n1++;
> ++ n2++;
> ++ }
> ++ }
> ++ return 0;
> ++}
[...]
Почему бы не использовать strverscmp() для этих целей? Оно, правда,
GNU extenstion, но портабельность, как понимаю, для нас не критична.
Зато она более стандартна, чем самописный nameCompare() и лучше
документирована.
--
+ Slava Semushin | slava.semushin @ gmail.com
+ ALT Linux Team | php-coder @ altlinux.ru
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] [git update] packages/apt: heads/master
2007-12-18 8:34 ` [devel] [git update] packages/apt: heads/master Slava Semushin
@ 2007-12-18 9:42 ` Alex Myltsev
2007-12-18 10:18 ` Dmitry V. Levin
2008-03-30 4:28 ` [devel] apt-pkg/algorithms.cc nameCompare Alexey Tourbin
0 siblings, 2 replies; 9+ messages in thread
From: Alex Myltsev @ 2007-12-18 9:42 UTC (permalink / raw)
To: ALT Linux Team development discussions
On Dec 18, 2007 11:34 AM, Slava Semushin <slava.semushin@gmail.com> wrote:
> > ++static int nameCompare(const char* n1, const char* n2)
> Почему бы не использовать strverscmp() для этих целей?
Просто не знал я про такую функцию.
> GNU extension, но портабельность, как понимаю, для нас не критична.
> Зато она более стандартна, чем самописный nameCompare() и лучше
> документирована.
Сравнил с nameCompare на строчках из "apt-cache pkgnames".
Отличие в единственном случае:
perl(versions/html4_0.pl) V perl(versions/html4_01.pl)
nameCompare: <
strverscmp: >
В общем, можно и поменять.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] [git update] packages/apt: heads/master
2007-12-18 9:42 ` Alex Myltsev
@ 2007-12-18 10:18 ` Dmitry V. Levin
2007-12-18 10:35 ` Alexey Rusakov
2007-12-19 6:17 ` Slava Semushin
2008-03-30 4:28 ` [devel] apt-pkg/algorithms.cc nameCompare Alexey Tourbin
1 sibling, 2 replies; 9+ messages in thread
From: Dmitry V. Levin @ 2007-12-18 10:18 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 820 bytes --]
On Tue, Dec 18, 2007 at 12:42:58PM +0300, Alex Myltsev wrote:
> On Dec 18, 2007 11:34 AM, Slava Semushin <slava.semushin@gmail.com> wrote:
> > > ++static int nameCompare(const char* n1, const char* n2)
> > Почему бы не использовать strverscmp() для этих целей?
> Просто не знал я про такую функцию.
>
> > GNU extension, но портабельность, как понимаю, для нас не критична.
> > Зато она более стандартна, чем самописный nameCompare() и лучше
> > документирована.
> Сравнил с nameCompare на строчках из "apt-cache pkgnames".
> Отличие в единственном случае:
>
> perl(versions/html4_0.pl) V perl(versions/html4_01.pl)
> nameCompare: <
> strverscmp: >
>
> В общем, можно и поменять.
Зачем? У неё неадекватное поведение на вышеприведённом примере.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] [git update] packages/apt: heads/master
2007-12-18 10:18 ` Dmitry V. Levin
@ 2007-12-18 10:35 ` Alexey Rusakov
2007-12-18 10:38 ` Dmitry V. Levin
2007-12-19 6:17 ` Slava Semushin
1 sibling, 1 reply; 9+ messages in thread
From: Alexey Rusakov @ 2007-12-18 10:35 UTC (permalink / raw)
To: ALT Linux Team development discussions
> > Сравнил с nameCompare на строчках из "apt-cache pkgnames".
> > Отличие в единственном случае:
> >
> > perl(versions/html4_0.pl) V perl(versions/html4_01.pl)
> > nameCompare: <
> > strverscmp: >
> >
> > В общем, можно и поменять.
>
> Зачем? У неё неадекватное поведение на вышеприведённом примере.
В любом случае наличие двух разных инструментов - это зло. Мне кажется,
лучше всего исправить поведение strverscmp (я не могу придумать
обоснование её поведению в приведённом случае), после чего выбросить
nameCompare и использовать strverscmp.
--
Alexey Rusakov
ALT Linux, project manager
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] [git update] packages/apt: heads/master
2007-12-18 10:35 ` Alexey Rusakov
@ 2007-12-18 10:38 ` Dmitry V. Levin
2007-12-18 11:00 ` Alexey Rusakov
0 siblings, 1 reply; 9+ messages in thread
From: Dmitry V. Levin @ 2007-12-18 10:38 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 842 bytes --]
On Tue, Dec 18, 2007 at 01:35:51PM +0300, Alexey Rusakov wrote:
> > > Сравнил с nameCompare на строчках из "apt-cache pkgnames".
> > > Отличие в единственном случае:
> > >
> > > perl(versions/html4_0.pl) V perl(versions/html4_01.pl)
> > > nameCompare: <
> > > strverscmp: >
> > >
> > > В общем, можно и поменять.
> >
> > Зачем? У неё неадекватное поведение на вышеприведённом примере.
> В любом случае наличие двух разных инструментов - это зло.
Наоборот. ;)
> Мне кажется,
> лучше всего исправить поведение strverscmp (я не могу придумать
> обоснование её поведению в приведённом случае), после чего выбросить
> nameCompare и использовать strverscmp.
Изменять поведение функций в libc можно только в том случае если для этого
есть достаточно веские основания.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] [git update] packages/apt: heads/master
2007-12-18 10:38 ` Dmitry V. Levin
@ 2007-12-18 11:00 ` Alexey Rusakov
2007-12-18 14:04 ` Dmitry V. Levin
0 siblings, 1 reply; 9+ messages in thread
From: Alexey Rusakov @ 2007-12-18 11:00 UTC (permalink / raw)
To: ALT Linux Team development discussions
В Втр, 18/12/2007 в 13:38 +0300, Dmitry V. Levin пишет:
> On Tue, Dec 18, 2007 at 01:35:51PM +0300, Alexey Rusakov wrote:
> > > > Сравнил с nameCompare на строчках из "apt-cache pkgnames".
> > > > Отличие в единственном случае:
> > > >
> > > > perl(versions/html4_0.pl) V perl(versions/html4_01.pl)
> > > > nameCompare: <
> > > > strverscmp: >
> > > >
> > > > В общем, можно и поменять.
> > >
> > > Зачем? У неё неадекватное поведение на вышеприведённом примере.
> > В любом случае наличие двух разных инструментов - это зло.
>
> Наоборот. ;)
Наоборот - только при условии документированности различий и их причин.
А так мы обречены на то, что часть программ будет пользоваться
strverscmp, apt будет пользоваться nameCompare, будут неочевидные
различия в поведении (между прочим, а чем пользуется rpm в аналогичной
ситуации сейчас?) и вопросы от тех, кто на эти различия будет налетать.
Два инструмента хороши, когда кому-то лучше так, а кому-то - иначе. В
данном случае я вижу только один возможный вариант "лучше", если эти
функции действительно отличаются настолько слабо.
> > Мне кажется,
> > лучше всего исправить поведение strverscmp (я не могу придумать
> > обоснование её поведению в приведённом случае), после чего выбросить
> > nameCompare и использовать strverscmp.
>
> Изменять поведение функций в libc можно только в том случае если для этого
> есть достаточно веские основания.
Неадекватность поведения в указанном случае - не является веским
основанием?
--
Alexey Rusakov
ALT Linux, project manager
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] [git update] packages/apt: heads/master
2007-12-18 11:00 ` Alexey Rusakov
@ 2007-12-18 14:04 ` Dmitry V. Levin
0 siblings, 0 replies; 9+ messages in thread
From: Dmitry V. Levin @ 2007-12-18 14:04 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 763 bytes --]
On Tue, Dec 18, 2007 at 02:00:33PM +0300, Alexey Rusakov wrote:
> В Втр, 18/12/2007 в 13:38 +0300, Dmitry V. Levin пишет:
> > On Tue, Dec 18, 2007 at 01:35:51PM +0300, Alexey Rusakov wrote:
[...]
> > > Мне кажется,
> > > лучше всего исправить поведение strverscmp (я не могу придумать
> > > обоснование её поведению в приведённом случае), после чего выбросить
> > > nameCompare и использовать strverscmp.
> >
> > Изменять поведение функций в libc можно только в том случае если для этого
> > есть достаточно веские основания.
> Неадекватность поведения в указанном случае - не является веским
> основанием?
Данная неадекватность субъективна. Люди, придумавшие strverscmp, имели
свой взгляд на то, как эта функция должна работать.
--
ldv
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [devel] [git update] packages/apt: heads/master
2007-12-18 10:18 ` Dmitry V. Levin
2007-12-18 10:35 ` Alexey Rusakov
@ 2007-12-19 6:17 ` Slava Semushin
1 sibling, 0 replies; 9+ messages in thread
From: Slava Semushin @ 2007-12-19 6:17 UTC (permalink / raw)
To: ALT Linux Team development discussions
18.12.07, Dmitry V. Levin<ldv / altlinux.org> написал(а):
[...]
> > > Почему бы не использовать strverscmp() для этих целей?
[...]
> Зачем? У неё неадекватное поведение на вышеприведённом примере.
Что ж в таком случае, давайте хотя бы добавим комментарий, объясняющий
почему мы не используем strverscmp()?
--
+ Slava Semushin | slava.semushin @ gmail.com
+ ALT Linux Team | php-coder @ altlinux.ru
^ permalink raw reply [flat|nested] 9+ messages in thread
* [devel] apt-pkg/algorithms.cc nameCompare
2007-12-18 9:42 ` Alex Myltsev
2007-12-18 10:18 ` Dmitry V. Levin
@ 2008-03-30 4:28 ` Alexey Tourbin
1 sibling, 0 replies; 9+ messages in thread
From: Alexey Tourbin @ 2008-03-30 4:28 UTC (permalink / raw)
To: ALT Linux Team development discussions
[-- Attachment #1: Type: text/plain, Size: 890 bytes --]
On Tue, Dec 18, 2007 at 12:42:58PM +0300, Alex Myltsev wrote:
> On Dec 18, 2007 11:34 AM, Slava Semushin <slava.semushin@gmail.com> wrote:
> > > ++static int nameCompare(const char* n1, const char* n2)
> > Почему бы не использовать strverscmp() для этих целей?
> Просто не знал я про такую функцию.
>
> > GNU extension, но портабельность, как понимаю, для нас не критична.
> > Зато она более стандартна, чем самописный nameCompare() и лучше
> > документирована.
> Сравнил с nameCompare на строчках из "apt-cache pkgnames".
> Отличие в единственном случае:
>
> perl(versions/html4_0.pl) V perl(versions/html4_01.pl)
> nameCompare: <
> strverscmp: >
У этой новой функции есть одна неприятная особенность:
mutt V mutt1.5
nameCompre: 0
Собственно, что нужно выбирать, если один пакет с версионным
суфиксом, а другой -- без?
[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2008-03-30 4:28 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-12-18 8:34 ` [devel] [git update] packages/apt: heads/master Slava Semushin
2007-12-18 9:42 ` Alex Myltsev
2007-12-18 10:18 ` Dmitry V. Levin
2007-12-18 10:35 ` Alexey Rusakov
2007-12-18 10:38 ` Dmitry V. Levin
2007-12-18 11:00 ` Alexey Rusakov
2007-12-18 14:04 ` Dmitry V. Levin
2007-12-19 6:17 ` Slava Semushin
2008-03-30 4:28 ` [devel] apt-pkg/algorithms.cc nameCompare 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