Bug 30763 - Поддержка нескольких типов комментариев
Summary: Поддержка нескольких типов комментариев
Status: CLOSED WONTFIX
Alias: None
Product: Sisyphus
Classification: Development
Component: libshell (show other bugs)
Version: unstable
Hardware: all Linux
: P3 normal
Assignee: Alexey Gladkov
QA Contact: qa-sisyphus
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2015-02-19 17:59 MSK by Andrey Cherepanov
Modified: 2015-02-20 01:05 MSK (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrey Cherepanov 2015-02-19 17:59:24 MSK
В /etc/samba/smb.conf используется два типа комментариев: начинающихся с # и с ;

[root@host-15 backend3]# . libshell
[root@host-15 backend3]# echo ';   logon path = \\%L\Profiles\%u' > smb.ini
[root@host-15 backend3]# vim /bin/shell-ini-config 
[root@host-15 backend3]# export shell_ini_config_prefix=''
[root@host-15 backend3]# export shell_ini_config_comment='#;'
[root@host-15 backend3]# export shell_ini_config_comment='(#|;)'
[root@host-15 backend3]# ini_config_set smb.ini global param val
[root@host-15 backend3]# cat smb.ini
;   logon path = \\%L\Profiles\%u \\%L\Profiles\%u\\%L\Profiles\%u
[global]
param = val
Comment 1 Alexey Gladkov 2015-02-19 20:20:01 MSK
Андрей, а ты можешь словами описать чего хочется ?
Comment 2 Anton Farygin 2015-02-19 20:22:33 MSK
Лёш, ну как мне понятно - хочет видимо как-то указывать что комментарии могут быть разные и точка с запятой, и шарп и два слэша.
Comment 3 Anton Farygin 2015-02-19 20:24:02 MSK
Но из примера скрипта я тоже нихрена не въехал ;)
Comment 4 Alexey Gladkov 2015-02-19 20:48:16 MSK
(В ответ на комментарий №3)
> Но из примера скрипта я тоже нихрена не въехал ;)

Вот-вот :)

Просто как правило в конфигах только один тип комментариев.
Comment 5 Alexey Gladkov 2015-02-19 21:09:39 MSK
(В ответ на комментарий №2)
> Лёш, ну как мне понятно - хочет видимо как-то указывать что комментарии могут
> быть разные и точка с запятой, и шарп и два слэша.

К сожалению так сделать нельзя т.к. в ini_config_comment непонятно что использовать в качестве комментария. Библиотека не рассчитывает на то что в shell_ini_config_comment будет находиться не признак комментария (один символ или последовательность).
Comment 6 Anton Farygin 2015-02-19 22:22:00 MSK
Мне встречались конфиги в которых сразу два типа комментария.

А какие сложности использовать условия (перечисление) при выборе комментариев ?
Comment 7 Anton Farygin 2015-02-19 22:23:20 MSK
А, вопрос что с записью. Да, тут либо выбрать первый символ, либо отдельную настройку для записи комментариев.
Comment 8 Alexey Gladkov 2015-02-19 22:33:07 MSK
(В ответ на комментарий №7)
> А, вопрос что с записью. Да, тут либо выбрать первый символ, либо отдельную
> настройку для записи комментариев.

На чтение всё более-менее понятно. Вопрос как вычленить символы (их может быть несколько) из списка. Сейчас последовательность в shell_ini_config_comment это признак комментария. Чтобы и сколько бы там ни было.

Идея с паттерном на чтение в одной переменной и символом комментария на запись в другой мне не нравится.

Если хочется иметь список, то по хорошему нужно делать отдельную переменную и в ней отдельно описывать, чтобы потом можно было выбрать. А это уже несколько другая задача по сложности.
Comment 9 Anton Farygin 2015-02-19 22:34:57 MSK
Ну, если считать что паттерн разделяется '|' то вычленить из этой последовательности первый вполне реально.

А какие ещё варианты паттернов используются для поиска комментариев ?
Comment 10 Alexey Gladkov 2015-02-19 22:59:38 MSK
(В ответ на комментарий №9)
> Ну, если считать что паттерн разделяется '|' то вычленить из этой
> последовательности первый вполне реально.

"#|\||\\|\;;"

Какие символы перечислены ? :)
Разбор такой строки сложнее чем кажется.

> А какие ещё варианты паттернов используются для поиска комментариев ?

Не понял вопроса.
Comment 11 Anton Farygin 2015-02-19 23:35:03 MSK
Перечислено:
#
\

\\
\;;
Comment 12 Anton Farygin 2015-02-19 23:37:09 MSK
Хотя, ты прав.
Но в переменную попадёт всё равно:
#|||\|;;
Т.е. - в твоём случае экранирование уберётcя на этапе присвоения и разбирать тебе придётся уже "очищенную переменную"
Comment 13 Alexey Gladkov 2015-02-20 01:05:17 MSK
Для протокола: "#|\||\\|\;;" это "#" или "|" или "\" или ";;". Разделителем является "|" экранирование как в шелле.

> Т.е. - в твоём случае экранирование уберётcя на этапе присвоения и разбирать
> тебе придётся уже "очищенную переменную"

Можно присвоить это с экранированием. Разобрать эту строчку тоже можно (я не говорил, что этого сделать нельзя). Вот только код для этого будет примерно с половину всего shell-ini-config.

Я исхожу из того сколько сколько усилий нужно потратить ради достижения цели и в данном конкретном случае гораздо проще привести разные типы комментариев к одному.