Bug 26429

Summary: Добавляются пробелы в конце строк *.list и удаляются идентификаторы репозитория
Product: Sisyphus Reporter: Motsyo Gennadi <drool>
Component: synapticAssignee: 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 Flags
скриншотик
none
Патч.
none
Diff после воздействия синаптика
none
исправленный патч none

Description Motsyo Gennadi 2011-10-09 18:05:12 MSK
Обсуждение проблемы: http://lists.altlinux.org/pipermail/antique/2011-October/001751.html
Comment 1 NotHAM 2011-10-10 02:36:22 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.сс. Может в
этом дело?
А может и не в синаптике проблема??
Comment 2 Lenar Shakirov 2011-10-10 11:15:06 MSK
Насколько я понял редактирует ф-ия 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...
Comment 3 NotHAM 2011-10-10 12:02:47 MSK
(В ответ на комментарий №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...
Возможно и тут что-то есть ...
Ещё заглянул в федору - там синаптик более "престарелый", 
чем в альте. Скачивать не стал.
Ещё обратил внимание - в дебе совсем нет никаких патчей,
нативный используют.
Comment 4 Lenar Shakirov 2011-10-10 12:12:42 MSK
(В ответ на комментарий №3)
<skip>
> Ещё обратил внимание - в дебе совсем нет никаких патчей,
> нативный используют.

В каталог synaptic_0.75.3.tar.gz/synaptic-0.75.3/debian/patches смотрели?
Comment 5 NotHAM 2011-10-10 13:00:28 MSK
(В ответ на комментарий №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
:)
Comment 6 NotHAM 2011-10-10 16:31:39 MSK
(В ответ на комментарий №2)
> Думаю нужно внимательно посмотреть на ф-ию SourcesList::ReadVendors из
> rsources.cc...

А еще SourcesList::UpdateSources() оттуда же, возможно там
пробелы допишутся при изменении строки?
...
S += (*it)->URI + " ";
S += (*it)->Dist + " ";
...
Ну и ещё там есть.
Если да - критично-ли это?

ЗЫ. сейчас что-то попробовать в дебе не могу, дома он.
Comment 7 NotHAM 2011-10-10 16:44:02 MSK
(В ответ на комментарий №4)
> В каталог synaptic_0.75.3.tar.gz/synaptic-0.75.3/debian/patches смотрели?

Посмотрел. Там только для бубунты, а для деба - пусто. :)
Comment 8 NotHAM 2011-10-11 03:14:47 MSK
(В ответ на комментарий №2)
> 
> Теперь по идентификаторам (VendorID):
> Synaptic "видит" идентификаторы только из /etc/apt/vendors.list,
> а по логике должен еще читать все из /etc/apt/vendors.list.d/.
> 
В дебе аналогично для sources.list. Из /sources.list.d/ читает в последнюю
очередь (у /etc/apt/ ... приоритет, что-ли?) и дописывает в конец списка.
Для vendors файл и каталог просто отсутствуют. Что там написать - даже
не знаю.
А с sources поиграл немного  - пробелы в конце строки, а также
удаление чего либо типа [label] обнаружить так и не удалось.

Ну и с локализацией у них похуже, чем в Альте. :)
Вобщем - сравнивать не совсем корректно.
Comment 9 Lenar Shakirov 2011-10-11 13:07:08 MSK
Пробелы в концы строк больше не добавляются:
http://git.altlinux.org/tasks/56560/

Протестируйте, пожалуйста.

Новые строки и идентификаторы пока не исправлял.
Comment 10 NotHAM 2011-10-11 13:59:56 MSK
(В ответ на комментарий №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 г.), там всё это уже
было. Похоже было всегда, внимания никто не обращал. ;)
Comment 11 Lenar Shakirov 2011-10-11 14:57:26 MSK
(В ответ на комментарий №10)
> > Новые строки и идентификаторы пока не исправлял.
> А нужно-ли это? Тем более что есть возможность поправить
> /etc/apt/vendors.list. Может там этим id's и место? Тогда
> это уже не к синаптику вопрос. Не его это дело. Дебианский
> в /etc/apt/vendors.list.d/ даже не смотрит (по причине
> отсутствия).

Мне кажется это вопрос именно к synaptic :)

> ЗЫ. Вот только что попробовал установить desktop 4.0
> без каких-либо обновлений (2007 г.), там всё это уже
> было. Похоже было всегда, внимания никто не обращал. ;)

Да, я тоже ставил desktop 4.0 и тоже обнаружил что это
поведение не меняется сто лет :)
Comment 12 NotHAM 2011-10-11 17:00:11 MSK
(В ответ на комментарий №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 :)
Comment 13 NotHAM 2011-10-11 23:17:46 MSK
(В ответ на комментарий №9)
> 
> Протестируйте, пожалуйста.
> 
Проверил на 5.1 и р6. Поведение одинаковое.
Сначала почистил все *.list от мусора, потом запустил синаптик.
Пробел таки появляется, но только один и только в тех строках,
которые мышкой потрогал (выбирать репо не обязательно, достаточно
тронуть).
Т. е. пробел появляется в тот момент, когда classic (или hasher)
отображается в окошке "раздел(ы)", причем отображается уже с 
пробелом. Если пробел в этом окошке удалить и закрыть окно
"репозитории" - в *.list он (пробел) уже не запишется.
В остальных строках файла и в других файлах никаких изменений
не происходит, хотя дата модификации меняется для всех.
Пока так вот.
Comment 14 NotHAM 2011-10-12 00:48:13 MSK
Created attachment 5160 [details]
скриншотик

Результат подмены vendors.list
Comment 15 NotHAM 2011-10-12 00:55:57 MSK
(В ответ на комментарий №9)
> Новые строки и идентификаторы пока не исправлял.

А может и не нужно?
Заменил файл /etc/apt/vendors.list (пустой) переименованным файлом
из /etc/apt/vendors.list.d/

Результат на скриншотике во вложении. Всё работает и ничего
не удаляется. Правда пришлось поправить alt.list из /sources.list.d.
Там же хорошо виден пробел после classic.

ЗЫ. бранч 5.1. 
Может надо повесить FR на apt-conf-* ?
Comment 16 NotHAM 2011-10-13 02:01:14 MSK
(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. Всё остальное, из ранее проверенного, остаётся в силе.
Comment 17 Lenar Shakirov 2011-10-13 20:10:44 MSK
Попробуйте из test-only task #56713
Comment 18 NotHAM 2011-10-13 21:52:51 MSK
(In reply to comment #17)
> Попробуйте из test-only task #56713

Проверил на р6 (пришлось git клонировать, на р6 собралось).
/etc/apt/vendors.list.d/ теперь читает и понимает, идентификаторы
не удаляет (/etc/apt/vendors.list загодя очистил). На 5.1 попозже
проверю (думаю будет ОК).

ЗЫ. Пробелов накликал по 5 шт. в строке для развлечения.
Не мешают. :)
Comment 19 NotHAM 2011-10-13 22:48:23 MSK
На 5.1 аналогично. Всё читает и понимает.
Comment 20 NotHAM 2011-10-18 14:12:40 MSK
(В ответ на комментарий №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 */ 
....
....
}
Хотя возможно и ошибаюсь.
Сам проверить пока не могу.
Comment 21 NotHAM 2011-10-19 00:21:48 MSK
(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!).
Хотя-бы понятно стало куда рыть дальше. Да и нужно ли рыть,
ведь пробелы в итоге не мешают.
Пусть Ленар и решает.
ЗЫ. Будет настроение - ещё поковыряюсь, а не будет .... - хм...
Ох уж этот синаптик  ;)
Comment 22 NotHAM 2011-10-19 01:13:09 MSK
(In reply to comment #21)
> ЗЫ. Будет настроение - ещё поковыряюсь, а не будет .... - хм...
Было немного.
Тупо убрал строчку (закомментировал):
// gtk_entry_append_text(GTK_ENTRY(me->_entrySect), " ");

И пробелы исчезли (и до и после), и в файл не пишутся.
И "накликать" не получается. И понятно почему.
Вобщем как Drool@ заказывал. :)

Но это криво, т. к. при наличии нескольких Section - разделителей
не будет. Строка "Раздел(ы)" будет искажаться, а если "раздел"
один (как в альте) - всё прекрасно работает.
ЗЫ. Всё проверяю пока на р6.
Comment 23 NotHAM 2011-10-21 02:37:48 MSK
(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() ничего править не нужно,
но предыдущие патчи Ленара - нужны (имхо).
Патч не делал, не знаю - нужен ли?
И нужно ли это вообще?
Comment 24 Michael Shigorin 2011-10-21 21:21:39 MSK
(In reply to comment #23)
> Патч не делал, не знаю - нужен ли?
> И нужно ли это вообще?
Дык!
Comment 25 NotHAM 2011-10-21 22:38:44 MSK
(В ответ на комментарий №24)
> (In reply to comment #23)
> > Патч не делал, не знаю - нужен ли?
> > И нужно ли это вообще?
> Дык!

Дык сначала на 5.1 проверить нужно было.
Работает, зараза такая. Сам себе не верю.
Даже попорченные ранее (умышленно) *.list-ы подправил.
Нигде вроде не пакостит. На совместимость с модулем
альтератора проверить не могу (ну нет его у меня, да и
пользоваться им не умею. Ниасилил, блин!).
Сейчас выложу.
Comment 26 NotHAM 2011-10-21 22:41:37 MSK
Created attachment 5167 [details]
Патч.

To mike@
Могу к вам сорцы скинуть на сервер.
На 5.1 и р6 собирается нормально.
Comment 27 Michael Shigorin 2011-10-22 12:54:05 MSK
(In reply to comment #25)
> Даже попорченные ранее (умышленно) *.list-ы подправил.
Видимо, распарсил и записал без лишнего.

> На совместимость с модулем альтератора проверить не могу (ну нет его у меня,
> да и пользоваться им не умею. Ниасилил, блин!).
Тю, а что там уметь --
# apt-get install alterator-standalone alterator-packages
# acc
:)
Comment 28 Lenar Shakirov 2011-10-25 01:18:13 MSK
Спасибо! Ваш патч исправляет. Пробуйте: http://git.altlinux.org/tasks/57268/
Comment 29 NotHAM 2011-10-25 10:45:11 MSK
(В ответ на комментарий №28)
> ... Пробуйте: http://git.altlinux.org/tasks/57268/

Дык уже несколько дней как пробую, уже в 3-х системах
поменял (5.1 - antique, p6 - gnome & simply),
проблем пока не вижу (жду что drool@ скажет?).
(вечером пересоберу).
Ещё смотрю в сторону doEdit(), может и там стоит
попробовать поменять? Уверенности нет никакой. ;)

ЗЫ. Более чем странно что раньше на это никто не обращал
внимания.
Comment 30 Repository Robot 2011-10-25 18:51:42 MSK
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
Comment 31 Motsyo Gennadi 2011-10-28 03:05:25 MSK
Created attachment 5176 [details]
Diff после воздействия синаптика
Comment 32 Motsyo Gennadi 2011-10-28 03:06:22 MSK
А я все никак не мог добраться до попробовать. Попробовал, прошелся по списку репозитариев, пощелкал, повключал/повыключал - работает, пробелы в конце не добавляет, добавило красивый пробел в заремленных строках после знака "#" (в аттаче видно), так даже, я бы сказал, более читабельно. Идентификаторы никуда не деваются. Какими были эти файлы изначально - не скажу, т.к. они не единожды подверглись воздействию непатченного синаптика :)
Такое нужно в бранчи разлить.

(В ответ на комментарий №29)
> (В ответ на комментарий №28)
> ЗЫ. Более чем странно что раньше на это никто не обращал
> внимания.

Эта грабля известна очень, очень давно. Просто никто не чесался вплоть до того, что синаптик стал официально нерекомендуемым.
Comment 34 NotHAM 2011-11-14 13:24:20 MSK
(В ответ на комментарий №33)
> http://lists.altlinux.org/pipermail/antique/2011-November/001997.html

Там не только это. Ещё пустые строки в конец *.list всё-таки
дописываются.
Идея как исправить есть. Посмотрим что получится.
Comment 35 NotHAM 2011-11-14 19:23:03 MSK
Created attachment 5205 [details]
исправленный патч

Суммарный патч с исправлениями. Объединяет все патчи,
касающиеся этого бага и устраняет недочет при создании
новых источников.
Поправлен мой предыдущий патч (сегфолт), и один из патчей
Ленара (пустые строки). В патче есть комментарии. Всё просто.

То snejok@ : патч можно прикладывать как есть макросом
%patchNN -p2 (чтобы с этими *.orig не заморачиваться),
переименовать только как нужно. Но сначала проверьте всё.
Сегодня попрошу ребят в рассылке потестить, посмотрим что
скажут.
Comment 36 Lenar Shakirov 2011-11-17 01:36:06 MSK
Наконец-то дошли руки смержиться:
test-only task #58591

Вы заметили что с этим изменением теперь вместо доп. новых строк в конце
sources.list'ов имеем отсутствие переводов строк вообще в файле? :)

2mike: что скажешь?
Comment 37 NotHAM 2011-11-17 10:15:06 MSK
(В ответ на комментарий №36)
> Наконец-то дошли руки смержиться:
> test-only task #58591
> 
> Вы заметили что с этим изменением теперь вместо доп. новых строк в конце
> sources.list'ов имеем отсутствие переводов строк вообще в файле? :)
> 
> 2mike: что скажешь?

Вот только что создал новый репо с хашером в конце,
концовка такая (HEX):
20 68 61 73 68 65 72 0A
Т. е. ПС на месте, в остальных местах тоже не поменялось вроде.

После удаления вновь созданного - всё вернулось как было, Ни
один ПС не пропал (размер файла не изменился 
- стал таким же как было до изменений).

Вобщем тестировать нужно (о чем я и просил).
Comment 38 NotHAM 2011-11-18 00:11:51 MSK
(In reply to comment #36)
> test-only task #58591

На р6 проблем не вижу. Всё ОК.
На 5.1 пересобирать лень. И так все понятно.

Заодно ещё в дебиане stable покопался.
Там пустые строки записать невозможно. В нужный момент
кнопка "ОК"  недоступна (если пусто). А вот где пробелы
подчищаются - так и не понял. ;)
Похоже что не в редакторе репов.
Comment 39 Michael Shigorin 2012-08-23 10:48:12 MSK
(In reply to comment #36)
> Наконец-то дошли руки смержиться:
> test-only task #58591
Так что в итоге? :)
Comment 40 NotHAM 2012-08-23 12:27:08 MSK
(В ответ на комментарий №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@ спросить ...
Comment 41 Motsyo Gennadi 2012-08-23 13:13:17 MSK
rpm -q synaptic
synaptic-0.58-alt10.M60P.1

Никаких проблем н выявлено.
Comment 42 Motsyo Gennadi 2012-08-23 13:14:23 MSK
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
Comment 43 Michael Shigorin 2012-08-23 14:04:03 MSK
...точно ;-)