Summary: | aptitude показывает только первую строчку в описании | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | Branch p9 | Reporter: | Roman Yakovlev <weboot> | ||||||
Component: | apt | Assignee: | Ivan Zakharyaschev <imz> | ||||||
Status: | REOPENED --- | QA Contact: | qa-p9 <qa-p9> | ||||||
Severity: | normal | ||||||||
Priority: | P5 | CC: | belayaav, glebfm, golubevan, imz, mike, sek88295, viy | ||||||
Version: | не указана | Keywords: | regression | ||||||
Hardware: | x86 | ||||||||
OS: | Linux | ||||||||
Attachments: |
|
Никто не знает, как это исправить? :( Created attachment 13139 [details]
Патч для починки многострочного описания
Почему-то в форматирующую функцию make_level_fragment передаётся значение indent=1, что, судя по документации к функции является количеством пробелов слева в данной строке. Если в строке пробелов меньше, то форматирование "фрагмента" заканчивается. Поскольку почти всегда первая строка описания не имеет пробелов вначале, форматирование на ней и заканчивается.
Данный патч чинит это, функция вызывается с indent=0, и форматируется всё описание.
(Ответ для Roman Yakovlev на комментарий #0) > Также в поиске в aptitude уже несколько лет сломан backspace. Кстати обратил внимание, что при запуске через tmux проблем с backspace в поиске нет. (Ответ для Anton Golubev на комментарий #3) > (Ответ для Roman Yakovlev на комментарий #0) > > > Также в поиске в aptitude уже несколько лет сломан backspace. > > Кстати обратил внимание, что при запуске через tmux проблем с backspace в > поиске нет. Не стоит смешивать две разные проблемы. Лучше завести про backspace отдельный багрепорт с подробным описанием, как воспроизвести. (Ответ для Anton Golubev на комментарий #2) > Создано вложение 13139 [details] [подробности] > Патч для починки многострочного описания > > Почему-то в форматирующую функцию make_level_fragment передаётся значение > indent=1, что, судя по документации к функции является количеством пробелов > слева в данной строке. Если в строке пробелов меньше, то форматирование > "фрагмента" заканчивается. Поскольку почти всегда первая строка описания не > имеет пробелов вначале, форматирование на ней и заканчивается. > > Данный патч чинит это, функция вызывается с indent=0, и форматируется всё > описание. Спасибо сообщившему об ошибке и за предложенный патч! Это место в aptitude не менялось. Причина в другом. После http://git.altlinux.org/gears/a/apt.git?p=apt.git;a=commitdiff;h=1ebe1d7079b5f12f0fa145e18ed60eb30660ad2e формат LongDesc() в apt ещё дальше отклонился от дебиановского. Думаю, сейчас сближу его обратно. diff --git a/apt-pkg/rpm/rpmrecords.cc b/apt-pkg/rpm/rpmrecords.cc index 3e21b03..1e8a857 100644 --- a/apt-pkg/rpm/rpmrecords.cc +++ b/apt-pkg/rpm/rpmrecords.cc @@ -114,42 +114,7 @@ string rpmRecordParser::ShortDesc() /* */ string rpmRecordParser::LongDesc() { - char *str, *ret, *x, *y; - rpm_tagtype_t type; - rpm_count_t count; - int len; - assert(HeaderP != NULL); - int rc = headerGetEntry(HeaderP, RPMTAG_DESCRIPTION, - &type, (void**)&str, &count); - if (rc != 1) - return ""; - - // Count size plus number of newlines - for (x = str, len = 0; *x; x++, len++) - if (*x == '\n') - len++; - - ret = (char*)malloc(len+1); - if (ret == NULL) - return "out of mem"; - - // Copy string, inserting a space after each newline - for (x = str, y = ret; *x; x++, y++) - { - *y = *x; - if (*x == '\n') - *++y = ' '; - } - *y = 0; - - // Remove spaces and newlines from end of string - for (y--; y > ret && (*y == ' ' || *y == '\n'); y--) - *y = 0; - - string Ret = string(ret); - free(ret); - - return Ret; + return Handler->Description(); } /*}}}*/ // RecordParser::Changelog - Return package changelog if any /*{{{*/ * * * Это отражается и на выводе описания через packagekit: # LC_ALL=C pkcon get-details apt Package description package: apt-0.5.15lorg2-alt82:p10+306076.60.5.1@1668092323.x86_64 summary: Debian's Advanced Packaging Tool with RPM support license: unknown group: admin-tools description: r at least for Conectiva. It provides the apt-get utility that rovides a simpler, safer way to install and upgrade packages. PT features complete installation ordering, multiple source apability and several other unique features. This package is still under development. size: 368814 bytes url: LC_ALL=C rpm -qi apt покажет отрезанные символы и строчку: Summary : Debian's Advanced Packaging Tool with RPM support Description : A port of Debian's APT tools for RPM based distributions, or at least for Conectiva. It provides the apt-get utility that provides a simpler, safer way to install and upgrade packages. APT features complete installation ordering, multiple source capability and several other unique features. This package is still under development. * * * Только synaptic оказался более готовым к особому формату в случае apt-rpm, но ценой неоптимального line-wrapping для своего окна: static char *parseDescription(const string &descr) { if (descr.size() + 1 > size_t(descrBufferSize)) { delete[] descrBuffer; descrBufferSize = descr.size() + 1; descrBuffer = new char[descrBufferSize]; } #ifdef HAVE_RPM int parser = _config->FindI("Synaptic::descriptionParser", NO_PARSER); #else int parser = _config->FindI("Synaptic::descriptionParser", DEB_PARSER); #endif switch (parser) { case DEB_PARSER: return debParser(descr); case STRIP_WS_PARSER: return stripWsParser(descr); case RPM_PARSER: return rpmParser(descr); case NO_PARSER: default: strcpy(descrBuffer, descr.c_str()); return descrBuffer; } } Парсеры для этого формата есть и в synaptic, и в packagekit (там с особым вниманием и даже ссылкой на описание формата). apt-cache show не нуждается в том, чтобы это обрабатывать, потому что готовит вывод сама, беря информацию "напрямую". http://git.altlinux.org/gears/s/synaptic.git?p=synaptic.git;a=blob;f=synaptic/common/rpackage.cc;h=ba9c3bae22f6cdfe414adc019b772be143a99d63;hb=HEAD#l1058 http://git.altlinux.org/gears/p/packagekit.git?p=packagekit.git;a=blob;f=backends/aptcc/apt-cache-file.cpp;h=b98a242239bfdfbad5a09786881627e326b65cc0;hb=HEAD#l566 // Policy page on package descriptions // http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description Можно было бы эти парсеры сделать более терпимыми к тому случаю, когда последующие строчки не начинаются с пробела (сейчас они удаляют, не проверяя, что это действительно пробел), но большого смысла в этом не вижу, потому что они ещё и удаляют первую строчку безусловно (в отличие от aptitude). И тут сделать их на будущее на всякий случай более совместимыми с нашим нынешним случаем так просто невозможно. (Ответ для Ivan Zakharyaschev на комментарий #6) > Парсеры для этого формата есть и в synaptic, и в packagekit (там с особым > вниманием и даже ссылкой на описание формата). apt-cache show не нуждается в > том, чтобы это обрабатывать, потому что готовит вывод сама, беря информацию > "напрямую". > > http://git.altlinux.org/gears/s/synaptic.git?p=synaptic.git;a=blob; > f=synaptic/common/rpackage.cc;h=ba9c3bae22f6cdfe414adc019b772be143a99d63; > hb=HEAD#l1058 > > http://git.altlinux.org/gears/p/packagekit.git?p=packagekit.git;a=blob; > f=backends/aptcc/apt-cache-file.cpp; > h=b98a242239bfdfbad5a09786881627e326b65cc0;hb=HEAD#l566 > > // Policy page on package descriptions > // > http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-f-Description https://www.debian.org/doc/debian-policy/ch-controlfields.html#description Да, теперь я вижу, в дебиан "спеках" в description обязательны пробелы в начале строк, например https://github.com/pioneerspacesim/pioneer/blob/master/debian/control Но в rpm такого нет, стоит ли поддерживать это соглашение? Что aptitude, что synaptic, кажется, безнадёжно отошли от апстрима. Удаление костыля из string rpmRecordParser::LongDesc() выглядит приятно. apt-0.5.15lorg2-alt84 -> sisyphus: Fri Jun 02 2023 Ivan Zakharyaschev <imz@altlinux> 0.5.15lorg2-alt84 - Fixed the display of descriptions in aptitude and packagekit (by making the format closer to Debian's): + Fixed the display of the first line, which was not shown in packagekit. + Fixed the regression (from 0.5.15lorg2-alt72) in the display of all but the first lines (in aptitude and packagekit). (ALT#40826) + This has also made packagekit show translated descriptions. (ALT#46251) + As a result, there is a cosmetic regression in synaptic: extra blanks. - Increased the buf for reading to 32k for effectiveness in methods: gzip (and other compression types), rsh, ftp. - Avoid compilation errors with GCC 13 (thx Alexey Sheplyakov). (ALT#46105) (Ответ для Anton Golubev на комментарий #9) > Да, теперь я вижу, в дебиан "спеках" в description обязательны пробелы в > начале строк, например > https://github.com/pioneerspacesim/pioneer/blob/master/debian/control > > Но в rpm такого нет, стоит ли поддерживать это соглашение? Что aptitude, что > synaptic, кажется, безнадёжно отошли от апстрима. В большей степени остались в состоянии старой версии, чем расширены нашими добавками, я бы сказал. Ещё есть packagekit, и всякий такой код, в том числе новый, будет от apt этого ожидать, так что решил приблизить к Debian (может, ещё сильнее дальше, ради разметки "параграфов", отделённых пустыми строками). Проблема остается в р9, т.к. там версия пакета ниже той, в которой пришел фикс: apt-0.5.15lorg2-alt71.3 |
Created attachment 9624 [details] aptitude desc В aptitude tui в десятом альте показывает только первую строчку в описании программы. В девятом показывало нормально, все строчки. Также в поиске в aptitude уже несколько лет сломан backspace.