Summary: | Добавляются пробелы в конце строк *.list и удаляются идентификаторы репозитория | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Motsyo Gennadi <drool> | ||||||||||
Component: | synaptic | Assignee: | Lenar Shakirov <snejok> | ||||||||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||||||||
Severity: | major | ||||||||||||
Priority: | P3 | CC: | aichernov, darktemplar, mike, rider, shakirov, snejok | ||||||||||
Version: | unstable | ||||||||||||
Hardware: | all | ||||||||||||
OS: | Linux | ||||||||||||
Attachments: |
|
Description
Motsyo Gennadi
2011-10-09 18:05:12 MSK
(В ответ на комментарий №0)
> Обсуждение проблемы:
> http://lists.altlinux.org/pipermail/antique/2011-October/001751.html
В дебиане никаких пробелов в конце не добавляется. Хотя
сравнение похоже не совсем корректно (версия другая, *.list
другие).
Хотя файлы rgrepositorywin.cc (вроде он и редактирует)
практически совпадают. Разница только в том, что вместо
#include rgmisc.h (ALT) написано #include rgutils.h (deb),
причем rgutils.сс - это переработанный rgmisc.сс. Может в
этом дело?
А может и не в синаптике проблема??
Насколько я понял редактирует ф-ия SourcesList::UpdateSources из rsources.cc. Какую версию в Дебиане вы смотрели? Я смотрел synaptic_0.75.3.tar.gz. В нем файл rsources.cc не отличается от нашего, поэтому странно что пробелы и новые строки не добавляются. Теперь по идентификаторам (VendorID): Synaptic "видит" идентификаторы только из /etc/apt/vendors.list, а по логике должен еще читать все из /etc/apt/vendors.list.d/. Если добавить в /etc/apt/vendors.list например идентификатор [p5] из /etc/apt/vendors.list.d/alt.list, то при настройке репозитариев Synaptic перестает удалять идентификаторы [p5]. Добавить можно вручную, а можно в Параметры->Репозитории->Поставщики... Думаю нужно внимательно посмотреть на ф-ию SourcesList::ReadVendors из rsources.cc... (В ответ на комментарий №2) > Насколько я понял редактирует ф-ия SourcesList::UpdateSources из rsources.cc. > Какую версию в Дебиане вы смотрели? Я смотрел synaptic_0.75.3.tar.gz. Смотрел пока только из stable (*_0.70~pre1.tar.gz), да и то - только начал смотреть. Хочу посмотреть diff между rgmisc и rgutils, в чем там разница (размеры сильно отличаются). Хотя может и не туда смотрю. > В нем файл rsources.cc не отличается от нашего... А сюда пока не заглядывал. > пробелы и новые строки не добавляются. > Теперь по идентификаторам (VendorID): > Synaptic "видит" идентификаторы только из /etc/apt/vendors.list, > а по логике должен еще читать все из /etc/apt/vendors.list.d/. > Если добавить в /etc/apt/vendors.list например идентификатор [p5] > из /etc/apt/vendors.list.d/alt.list, то при настройке репозитариев > Synaptic перестает удалять идентификаторы [p5]. М-да ... ;) В дебе есть только .../apt/soursces.list - с ним и поэкспериментировал пока (остальные каталоги пустые). Там всё по другому. :) > Добавить можно вручную, а можно в Параметры->Репозитории->Поставщики... > Думаю нужно внимательно посмотреть на ф-ию SourcesList::ReadVendors из > rsources.cc... Возможно и тут что-то есть ... Ещё заглянул в федору - там синаптик более "престарелый", чем в альте. Скачивать не стал. Ещё обратил внимание - в дебе совсем нет никаких патчей, нативный используют. (В ответ на комментарий №3) <skip> > Ещё обратил внимание - в дебе совсем нет никаких патчей, > нативный используют. В каталог synaptic_0.75.3.tar.gz/synaptic-0.75.3/debian/patches смотрели? (В ответ на комментарий №4) > В каталог synaptic_0.75.3.tar.gz/synaptic-0.75.3/debian/patches смотрели? Не. Обычно ищу тут ... http://patch-tracker.debian.org/package/synaptic/0.75.3 Если что-то серьёзное - всегда пишут. Например для icewm решение для "неубиваемого окна" так и нашлось: http://patch-tracker.debian.org/package/icewm/1.3.7-1 :) (В ответ на комментарий №2) > Думаю нужно внимательно посмотреть на ф-ию SourcesList::ReadVendors из > rsources.cc... А еще SourcesList::UpdateSources() оттуда же, возможно там пробелы допишутся при изменении строки? ... S += (*it)->URI + " "; S += (*it)->Dist + " "; ... Ну и ещё там есть. Если да - критично-ли это? ЗЫ. сейчас что-то попробовать в дебе не могу, дома он. (В ответ на комментарий №4) > В каталог synaptic_0.75.3.tar.gz/synaptic-0.75.3/debian/patches смотрели? Посмотрел. Там только для бубунты, а для деба - пусто. :) (В ответ на комментарий №2) > > Теперь по идентификаторам (VendorID): > Synaptic "видит" идентификаторы только из /etc/apt/vendors.list, > а по логике должен еще читать все из /etc/apt/vendors.list.d/. > В дебе аналогично для sources.list. Из /sources.list.d/ читает в последнюю очередь (у /etc/apt/ ... приоритет, что-ли?) и дописывает в конец списка. Для vendors файл и каталог просто отсутствуют. Что там написать - даже не знаю. А с sources поиграл немного - пробелы в конце строки, а также удаление чего либо типа [label] обнаружить так и не удалось. Ну и с локализацией у них похуже, чем в Альте. :) Вобщем - сравнивать не совсем корректно. Пробелы в концы строк больше не добавляются: http://git.altlinux.org/tasks/56560/ Протестируйте, пожалуйста. Новые строки и идентификаторы пока не исправлял. (В ответ на комментарий №9) > Пробелы в концы строк больше не добавляются: > http://git.altlinux.org/tasks/56560/ > Т. е. поправили UpdateSources (СС6). В гите глянул diff. :) > Протестируйте, пожалуйста. А это только вечером. Сейчас на работе. Может ещё кто? > Новые строки и идентификаторы пока не исправлял. А нужно-ли это? Тем более что есть возможность поправить /etc/apt/vendors.list. Может там этим id's и место? Тогда это уже не к синаптику вопрос. Не его это дело. Дебианский в /etc/apt/vendors.list.d/ даже не смотрит (по причине отсутствия). ЗЫ. Вот только что попробовал установить desktop 4.0 без каких-либо обновлений (2007 г.), там всё это уже было. Похоже было всегда, внимания никто не обращал. ;) (В ответ на комментарий №10) > > Новые строки и идентификаторы пока не исправлял. > А нужно-ли это? Тем более что есть возможность поправить > /etc/apt/vendors.list. Может там этим id's и место? Тогда > это уже не к синаптику вопрос. Не его это дело. Дебианский > в /etc/apt/vendors.list.d/ даже не смотрит (по причине > отсутствия). Мне кажется это вопрос именно к synaptic :) > ЗЫ. Вот только что попробовал установить desktop 4.0 > без каких-либо обновлений (2007 г.), там всё это уже > было. Похоже было всегда, внимания никто не обращал. ;) Да, я тоже ставил desktop 4.0 и тоже обнаружил что это поведение не меняется сто лет :) (В ответ на комментарий №11) > > Мне кажется это вопрос именно к synaptic :) > Ну тогда нужно рыть в rgrepositorywin.cc, конкретно RGRepositoryEditor смотреть. Я в этом ничего не понимаю, но заметил, что для deb и rpm там немного по разному работает. Например: ... #ifndef HAVE_RPM // debian can't use the vendors menu, so we hide it ... бла-бла-бла ... gtk_widget_hide(GTK_WIDGET(vendors)); #endif ... Может потому и не вижу в дебе проблем, что прячется там. Ну и RGRepositoryEditor::doEdit() смотрится подозрительно. И другие процеДУРЫ ... > Да, я тоже ставил desktop 4.0 и тоже обнаружил что это > поведение не меняется сто лет :) 128 :) (В ответ на комментарий №9) > > Протестируйте, пожалуйста. > Проверил на 5.1 и р6. Поведение одинаковое. Сначала почистил все *.list от мусора, потом запустил синаптик. Пробел таки появляется, но только один и только в тех строках, которые мышкой потрогал (выбирать репо не обязательно, достаточно тронуть). Т. е. пробел появляется в тот момент, когда classic (или hasher) отображается в окошке "раздел(ы)", причем отображается уже с пробелом. Если пробел в этом окошке удалить и закрыть окно "репозитории" - в *.list он (пробел) уже не запишется. В остальных строках файла и в других файлах никаких изменений не происходит, хотя дата модификации меняется для всех. Пока так вот. Created attachment 5160 [details]
скриншотик
Результат подмены vendors.list
(В ответ на комментарий №9) > Новые строки и идентификаторы пока не исправлял. А может и не нужно? Заменил файл /etc/apt/vendors.list (пустой) переименованным файлом из /etc/apt/vendors.list.d/ Результат на скриншотике во вложении. Всё работает и ничего не удаляется. Правда пришлось поправить alt.list из /sources.list.d. Там же хорошо виден пробел после classic. ЗЫ. бранч 5.1. Может надо повесить FR на apt-conf-* ? (In reply to comment #13) > Пробел таки появляется, но только один и только в тех строках, > которые мышкой потрогал (выбирать репо не обязательно, достаточно > тронуть). Ошибочка вышла. Всё плохо. Сколько хочу столько и накликаю пробелов. ;) И вспомнились строки из дебианского *.list старого какого-то, когда ещё можно было установить проприетарные nvidia. ... main ... non-free (несколько разделов через пробел). Ну и в исходниках такое ... (без патча): .... for (unsigned int J = 0; J < (*it)->NumSections; J++) S += (*it)->Sections[J] + " "; .... Т. е. подразумевается, что в Sections может быть несколько Section, разделенных пробелами. А если Section может иметь пустое значение, тогда синаптик работает правильно - на каждый клик ставит пустое значение + "пробел " (или "пробел" + "" с патчем). Тут похоже нужно проверить эту S (что получилась) на наличие концевых пробелов, поудалять если есть, а уж потом сохранять? Типа "защита от дурака" (любтеля кликать где попало). Больше ничего в голову не приходит. ;) PS. Всё остальное, из ранее проверенного, остаётся в силе. Попробуйте из test-only task #56713 (In reply to comment #17) > Попробуйте из test-only task #56713 Проверил на р6 (пришлось git клонировать, на р6 собралось). /etc/apt/vendors.list.d/ теперь читает и понимает, идентификаторы не удаляет (/etc/apt/vendors.list загодя очистил). На 5.1 попозже проверю (думаю будет ОК). ЗЫ. Пробелов накликал по 5 шт. в строке для развлечения. Не мешают. :) На 5.1 аналогично. Всё читает и понимает. (В ответ на комментарий №16) > Ну и в исходниках такое ... (без патча): > .... > for (unsigned int J = 0; J < (*it)->NumSections; J++) > S += (*it)->Sections[J] + " "; > .... Это пропатчено (не помогло пока), но нашел ещё место подозрительное, как и думал - в rgrepositorywin.cc void RGRepositoryEditor::doEdit() { .... .... string Sect; for (unsigned int I = 0; I < rec->NumSections; I++) { Sect += rec->Sections[I]; Sect += " "; // Может ещё тут что-то нужно подкорректировать ?? // Чтобы пробел писался до Sections[I] а не после ?? // Как в предпоследнем патче ? } /* repaint screen */ .... .... } Хотя возможно и ошибаюсь. Сам проверить пока не могу. (In reply to comment #20) > Сам проверить пока не могу. Проверил, тоже недостаточно оказалось. Но частично помогло в другом месте в rgrepositorywin.cc void RGRepositoryEditor::SelectionChanged(....) .... for (unsigned int I = 0; I < rec->NumSections; I++) { gtk_entry_append_text(GTK_ENTRY(me->_entrySect), " "); //** gtk_entry_append_text(GTK_ENTRY(me->_entrySect), utf8(rec->Sections[I].c_str())); //** .... Строки //** уже поменяны местами (патч не делал). В этом случае (изменения в 2-х местах тут (rgrepositorywin.cc), и там где у Ленара патч) пробел в конце строки (после classic) - четко не появляется и не пишется. Теперь появляется и пишется ПЕРЕД classic, что вполне понятно. ("... хвост вытащил - нос увяз..." ... Hi!). Хотя-бы понятно стало куда рыть дальше. Да и нужно ли рыть, ведь пробелы в итоге не мешают. Пусть Ленар и решает. ЗЫ. Будет настроение - ещё поковыряюсь, а не будет .... - хм... Ох уж этот синаптик ;) (In reply to comment #21) > ЗЫ. Будет настроение - ещё поковыряюсь, а не будет .... - хм... Было немного. Тупо убрал строчку (закомментировал): // gtk_entry_append_text(GTK_ENTRY(me->_entrySect), " "); И пробелы исчезли (и до и после), и в файл не пишутся. И "накликать" не получается. И понятно почему. Вобщем как Drool@ заказывал. :) Но это криво, т. к. при наличии нескольких Section - разделителей не будет. Строка "Раздел(ы)" будет искажаться, а если "раздел" один (как в альте) - всё прекрасно работает. ЗЫ. Всё проверяю пока на р6. (In reply to comment #22) > Но это криво, ... А всё прекрасно ровняется в RGRepositoryEditor::SelectionChanged(...) ... for (unsigned int I = 0; I < (rec->NumSections - 1); I++) { gtk_entry_append_text(GTK_ENTRY(me->_entrySect), utf8(rec->Sections[I].c_str())); gtk_entry_append_text(GTK_ENTRY(me->_entrySect), " "); // разделительный! } // Если Section единственный - цикл не сработает, ... // последний Section пишем просто без пробела ... gtk_entry_append_text(GTK_ENTRY(me->_entrySect), utf8(rec->Sections[rec->NumSections - 1].c_str())); ... На р6 работает прекрасно, в *.list-ах ничего не портит. Попробовал с двумя разделами classic и hasher - в файлах всё корректно, никаких "хвостов". В RGRepositoryEditor::doEdit() ничего править не нужно, но предыдущие патчи Ленара - нужны (имхо). Патч не делал, не знаю - нужен ли? И нужно ли это вообще? (In reply to comment #23) > Патч не делал, не знаю - нужен ли? > И нужно ли это вообще? Дык! (В ответ на комментарий №24) > (In reply to comment #23) > > Патч не делал, не знаю - нужен ли? > > И нужно ли это вообще? > Дык! Дык сначала на 5.1 проверить нужно было. Работает, зараза такая. Сам себе не верю. Даже попорченные ранее (умышленно) *.list-ы подправил. Нигде вроде не пакостит. На совместимость с модулем альтератора проверить не могу (ну нет его у меня, да и пользоваться им не умею. Ниасилил, блин!). Сейчас выложу. Created attachment 5167 [details]
Патч.
To mike@
Могу к вам сорцы скинуть на сервер.
На 5.1 и р6 собирается нормально.
(In reply to comment #25) > Даже попорченные ранее (умышленно) *.list-ы подправил. Видимо, распарсил и записал без лишнего. > На совместимость с модулем альтератора проверить не могу (ну нет его у меня, > да и пользоваться им не умею. Ниасилил, блин!). Тю, а что там уметь -- # apt-get install alterator-standalone alterator-packages # acc :) Спасибо! Ваш патч исправляет. Пробуйте: http://git.altlinux.org/tasks/57268/ (В ответ на комментарий №28) > ... Пробуйте: http://git.altlinux.org/tasks/57268/ Дык уже несколько дней как пробую, уже в 3-х системах поменял (5.1 - antique, p6 - gnome & simply), проблем пока не вижу (жду что drool@ скажет?). (вечером пересоберу). Ещё смотрю в сторону doEdit(), может и там стоит попробовать поменять? Уверенности нет никакой. ;) ЗЫ. Более чем странно что раньше на это никто не обращал внимания. synaptic-0.58-alt10 -> sisyphus: * Tue Oct 25 2011 Lenar Shakirov <snejok@altlinux> 0.58-alt10 - Avoid extra spaces on enabled repo: * thank you very much, NotHAM (aka ichernov at tochka.ru)! * Thu Oct 13 2011 Lenar Shakirov <snejok@altlinux> 0.58-alt9 - Read vendors from vendors.list.d too (ALT #26429) * Tue Oct 11 2011 Lenar Shakirov <snejok@altlinux> 0.58-alt8 - Don't add extra spaces to sources.list Created attachment 5176 [details]
Diff после воздействия синаптика
А я все никак не мог добраться до попробовать. Попробовал, прошелся по списку репозитариев, пощелкал, повключал/повыключал - работает, пробелы в конце не добавляет, добавило красивый пробел в заремленных строках после знака "#" (в аттаче видно), так даже, я бы сказал, более читабельно. Идентификаторы никуда не деваются. Какими были эти файлы изначально - не скажу, т.к. они не единожды подверглись воздействию непатченного синаптика :) Такое нужно в бранчи разлить. (В ответ на комментарий №29) > (В ответ на комментарий №28) > ЗЫ. Более чем странно что раньше на это никто не обращал > внимания. Эта грабля известна очень, очень давно. Просто никто не чесался вплоть до того, что синаптик стал официально нерекомендуемым. (В ответ на комментарий №33) > http://lists.altlinux.org/pipermail/antique/2011-November/001997.html Там не только это. Ещё пустые строки в конец *.list всё-таки дописываются. Идея как исправить есть. Посмотрим что получится. Created attachment 5205 [details]
исправленный патч
Суммарный патч с исправлениями. Объединяет все патчи,
касающиеся этого бага и устраняет недочет при создании
новых источников.
Поправлен мой предыдущий патч (сегфолт), и один из патчей
Ленара (пустые строки). В патче есть комментарии. Всё просто.
То snejok@ : патч можно прикладывать как есть макросом
%patchNN -p2 (чтобы с этими *.orig не заморачиваться),
переименовать только как нужно. Но сначала проверьте всё.
Сегодня попрошу ребят в рассылке потестить, посмотрим что
скажут.
Наконец-то дошли руки смержиться: test-only task #58591 Вы заметили что с этим изменением теперь вместо доп. новых строк в конце sources.list'ов имеем отсутствие переводов строк вообще в файле? :) 2mike: что скажешь? (В ответ на комментарий №36) > Наконец-то дошли руки смержиться: > test-only task #58591 > > Вы заметили что с этим изменением теперь вместо доп. новых строк в конце > sources.list'ов имеем отсутствие переводов строк вообще в файле? :) > > 2mike: что скажешь? Вот только что создал новый репо с хашером в конце, концовка такая (HEX): 20 68 61 73 68 65 72 0A Т. е. ПС на месте, в остальных местах тоже не поменялось вроде. После удаления вновь созданного - всё вернулось как было, Ни один ПС не пропал (размер файла не изменился - стал таким же как было до изменений). Вобщем тестировать нужно (о чем я и просил). (In reply to comment #36) > test-only task #58591 На р6 проблем не вижу. Всё ОК. На 5.1 пересобирать лень. И так все понятно. Заодно ещё в дебиане stable покопался. Там пустые строки записать невозможно. В нужный момент кнопка "ОК" недоступна (если пусто). А вот где пробелы подчищаются - так и не понял. ;) Похоже что не в редакторе репов. (In reply to comment #36) > Наконец-то дошли руки смержиться: > test-only task #58591 Так что в итоге? :) (В ответ на комментарий №39) > (In reply to comment #36) > > Наконец-то дошли руки смержиться: > > test-only task #58591 > Так что в итоге? :) Не знаю, как у других, а у меня с тех пор как применено никаких вредных изменений в файлах не появилось. 1(р6). Чистая установка симпли на 3-х компах (уже с полгода как) - файлы alt.list и sourses.list периодически меняют размер на 4 байта (комментарий + пробел в двух строках то появляются, то исчезают). Файлы полностью сохранили исходное содержимое. Остальные ***.list - не изменились (меняется только дата создания ... hi! С источника на источник переключаюсь часто!). 2(5.1) Аналогично. Исходные файлы ранее были все поломаны, но после реанимации никаких изменений больше не вижу (кроме всё тех же комментариев и даты создания). Для 5.1 применен тот же патч (одним файлом), но там в исходниках другие номера заменяемых строк (что понятно). Надо бы ещё у Drool@ спросить ... rpm -q synaptic synaptic-0.58-alt10.M60P.1 Никаких проблем н выявлено. 17 ноября 2011 Lenar Shakirov <snejok at altlinux.ru> 0.58-alt11 Fixes by NotHAM: * avoid annoying extra new lines in sources.list * fix segfault on repository add ...точно ;-) |