Bug 57185 - qmergeinifiles: неполное слияние секций
Summary: qmergeinifiles: неполное слияние секций
Status: CLOSED FIXED
Alias: None
Product: Sisyphus
Classification: Development
Component: qmergeinifiles (show other bugs)
Version: unstable
Hardware: x86_64 Linux
: P5 normal
Assignee: ratkin
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2025-12-10 11:08 MSK by Божченко Павел Александрович
Modified: 2025-12-11 13:33 MSK (History)
1 user (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Божченко Павел Александрович 2025-12-10 11:08:47 MSK
1)Для воспроизведения необходимо подготовить два файла:

echo -e "[DEFAULT]\nServerAliveInterval=45\nCompression=yes\n[Database]\nhost=127.0.0.1\nport=3306" > simple1.ini
echo -e ";Комментарий\n[Section1]\n#Ещё\nkey1=value1\nkey2=value with spaces\n" > complex1.ini
echo -e "[Section2];секция с \n#exe=true\nkey3=value3\n[Database];перезапись\nhost=localhost\ntimeout=30" >> complex1.ini

2) после, произвести их слияние, и просмотреть результат
qmeregeinifiles merged.ini simple1.ini complex1.ini
cat merged.ini 

Фактический результат слияния:

[Database]
timeout=30

[Section1]
#Ещё
key2=value with spaces
key1=value1

[Database]
port=3306

[Section2]
#exe=true
key3=value3

[Database]
host=localhost

[DEFAULT]
Compression=yes
ServerAliveInterval=45

[General]
;Комментарий


Ожидаемый результат:
[DEFAULT]
ServerAliveInterval=45
Compression=yes

;Комментарий
[Section1]
#Ещё
key1=value1
key2=value with spaces

[Section2];секция
#exe=true
key3=value3

[Database];перезапись
host=localhost
port=3306
timeout=30

Можно заметить несколько недочётов:
1) Секции дублируются ([Database] продублирована три раза). Большинство современных парсеров обработают это корректно, но не стоит перекладывать задачу на них(https://en.wikipedia.org/wiki/INI_file#Duplicate_names). Это также может вызывать недопонимание при дальнейшем ручном редактировании файлов.
2) Комментарий ";Комментарий" находился в файле complex1.ini перед секцией [Section1], а в выводе попал под секцию [General]
3) Комментарии, находящиеся на одной строке с заголовком секции теряются:
[Database];перезапись -> [Database]
[Section2];секция с -> [Section2]

Воспроизводится на системах (обновлённых до Sisyphus):
Alt Server 11.0 x86-64
Alt Education KDE 11.0 x86-64 
Alt Education XFCE 11.0 x86-64 
Alt Workstation 11.1 x86-64 
Alt Workstation K 11.1 x86-64
Comment 1 Sergey V Turchin 2025-12-10 11:13:14 MSK
Секции дублироваться не должны.
Comment 2 Sergey V Turchin 2025-12-10 11:16:02 MSK
(Ответ для Божченко Павел Александрович на комментарий #0)
> 3) Комментарии, находящиеся на одной строке с заголовком секции теряются:
> [Database];перезапись -> [Database]
> [Section2];секция с -> [Section2]
Это хорошо, т.к. невалидные.
Comment 3 Sergey V Turchin 2025-12-10 11:20:42 MSK
> > 3) Комментарии, находящиеся на одной строке с заголовком секции теряются:
> > [Database];перезапись -> [Database]
> > [Section2];секция с -> [Section2]
> Это хорошо, т.к. невалидные.
Хотя, по формату валидные, но пусть удаляются. Можно считать ожидаемым поведением.
Comment 4 Repository Robot 2025-12-11 13:33:10 MSK
qmergeinifiles-3.1.0-alt1 -> sisyphus:

Thu Dec 11 2025 Oleg Solovyov <mcpain@altlinux> 3.1.0-alt1
- merge sections in .ini file (Closes: #57185)
- fix usage (Closes: #57180)