* 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