← Старый блог

Автоматизация сборки документации для Mercurial

· mercurial, doxygen

Поделюсь маленьким скриптом для автоматизации сборки документации doxygen’ом.

Вот он (скачать):

#!/bin/sh                                               
# $1 - path to working directory                        
# $2 - out dir                                          

WD=$1
OUT=$2
LOG=$3
# check in
[[ -z $WD || -z $OUT ]] && return 2

# $1 — link addr
# $2 — link name
upln() {        
	[[ -L "$2" ]] && rm -f "$2"
	ln -s "$1" "$2"            
}                                  

# == Main ==
cd $WD || exit 1

# pulling up
hg pull -u || exit 1
# get revision & tag
Rev="$(hg identify -n):$(hg identify -i)"
Tag="$(hg identify -t)"                  

# There is no doxygen config
[[ -f $PWD/Doxyfile ]] || ( 
	echo "No Doxyfile"; 
	exit 0              
)                           

# prepare Doxyfile
Doxyfile=`mktemp ./Doxyfile-tmp.XXXX`
DoxOut=$PWD/doc/doxygen              
sed "s/^\(PROJECT_NUMBER.*=.*\)/\1 rev. $Rev/" $PWD/Doxyfile > $Doxyfile

# Clean prevoius build
[[ -d $DoxOut ]] && ( 
	rm -rf $DoxOut
)

# build
doxygen $Doxyfile || (
	rm -f $Doxyfile;
	exit 3
)

# rm temp Doxyfile
rm -f $Doxyfile

# try to compile pdf doc
[[ -d $DoxOut/latex ]] && (
#       make -C $DoxOut/latex
#       mv $DoxOut/latex/refman.pdf $DoxOut
#       # LaTeX sources not needed
	rm -rf $DoxOut/latex
)

[[ -f $LOG ]] && (
	local rt="$Rev"
	[[ -n $Tag ]] && rt="$rt ($Tag)"
	echo "`date`: Create documentation" \
			" for $WD rev. $rt" >> $LOG
)

# copy work
mkdir "$OUT/$Rev" || exit 4
cp -R $PWD/doc/doxygen/* "$OUT/$Rev" || exit 4

# create tag symlink
[[ -n $Tag ]] && (
	upln "$OUT/$Rev" "$OUT/$Tag"
)

# TODO: Clean old

exit 0

Порядок действий

  1. Скачать скрипт
  2. chmod +x hgupdox.sh
  3. Сделать клон вашего основного репозитария: hg clone /path/to/project /path/to/doxygen/.sources/project
  4. Создать каталог, в который будет помещен результат: mkdir /path/to/doxygen/project
  5. Проверьте права и пользователя на рабочую копию и выходной каталог чтобы скрипт мог в них писать
  6. Добавить в .hg/hgrc вашего основного репозитария
    [hooks]
    

changegroup = changegroup.hgupdox = /path/to/hgupdox.sh “/path/to/doxygen/.sources/project” “/path/to/doxygen/project” “/path/to/logs/hgupdox.log” & Где /path/to/logs/hgupdox.log — не обязательный лог работы

Ограничения

Doxygen должен выдавать результат в ./doc/doxygen рабочего клона.

У меня работает на сервере, результат можно посмотреть здесь: http://media.vehq.ru/doxygen/

UPD 22.09.2009: Обновил скрипт