Может ли doxygen устанавливать собственные разрешения для создаваемых им файлов?

У меня есть исходный репозиторий, который я время от времени запускаю через doxygen, который генерирует html в моем каталоге public_html. Я обнаружил, что мне нужно изменить umask и взломать основную группу в bash, как это работает:

echo "umask $UMASK; doxygen include_config.conf" | newgrp $GROUP

Но это кажется неуклюжим, и я не могу не задаться вопросом, есть ли какой-либо параметр конфигурации или переключатель параметров для doxygen, чтобы установить UID/группу и разрешения непосредственно для всех файлов/каталогов, которые он генерирует? Он так часто используется для создания HTML на веб-сайтах, что почти всем понадобится, например. иметь вывод, удобочитаемый для всего мира. Искал в Интернете, файл конфигурации и справочную страницу безрезультатно.

Обновление: надеялся найти какую-нибудь встроенную функцию, но, похоже, ее нет. После некоторых итераций эта оболочка, кажется, выполняет свою работу:

#!/bin/bash
OUTPUT_PATH=/path/to/output
CONFIG_PATH=/path/to/include_config.conf
GROUP=somegroup
PERM=750
UMASK=027 

if [[ ! -e $OUTPUT_PATH ]]; then mkdir $OUTPUT_PATH; fi
chmod $PERM $OUTPUT_PATH
chmod g+s $OUTPUT_PATH
chgrp $GROUP $OUTPUT_PATH
umask $UMASK
doxygen $CONFIG_PATH

Он немного более надежный, портативный и менее громоздкий, чем исходный скрипт, но при этом работает за один проход и без условий гонки.


person smocking    schedule 20.04.2012    source источник


Ответы (1)


Насколько мне известно, нет способа сообщить Doxygen, чтобы он установил данные о владении сгенерированными файлами. Учитывая, что Doxygen работает в системах, которые не имеют никакого понятия о разрешениях файловой системы в стиле Linux, я был бы удивлен, если бы такие вещи были встроены в приложение. Однако написать простой скрипт, который создает документацию и автоматически настраивает разрешения, должно быть тривиально:

#!/bin/bash

doxygen include_config.conf
chgrp -R $GROUP $PATH_TO_OUTPUT_FOLDER
chmod -R $UMASK $PATH_TO_OUTPUT_FOLDER

Обновление: В ответ на ваши комментарии (признаю, что это немного не по теме): я рекомендую не использовать newgrp для этого. Это устаревшая команда, которая восходит к старым дням UNIX, когда вы могли быть только в одной группе за раз. При использовании в современных системах можно столкнуться с некоторыми странными проблемами. Если вы добавите следующее перед вызовом doxygen, все, что создано в каталоге, унаследует группу родительской папки (что, по сути, вам и нужно):

mkdir $PATH_TO_OUTPUT_FOLDER
chgrp $GROUP $PATH_TO_OUTPUT_FOLDER
chmod g+s $PATH_TO_OUTPUT_FOLDER

chgrp после запуска Doxygen больше не понадобится. В качестве бонуса он не изменяет идентификатор группы вашего текущего сеанса входа в систему или запущенных процессов и не создает вложенную оболочку (newgrp обычно делает одно из этих двух).

person bta    schedule 20.04.2012
comment
Хорошо, тогда мне не повезло, и я буду придерживаться своего сценария umask/newgrp. Я не буду использовать chgrp и chmod, потому что тогда для всех файлов потребуется три прохода вместо одного, а также в моем случае возникнет состояние гонки, поскольку я на самом деле устанавливаю более ограничительные разрешения. - person smocking; 21.04.2012
comment
Не слышал о поведении setgid в каталогах; это отличная функция. По-прежнему понадобится umask, но так он будет менее громоздким. - person smocking; 21.04.2012