Эмулируйте subwcrev при использовании мерзавца-svn

Я использую мерзавца-svn для взаимодействия с существующим репозиторием SVN, который содержит некоторые проекты C++. subwcrev.exe используется в качестве события перед сборкой для обновления некоторых строк в заголовке C++ (svnversion.h). Эти строки заставляют hardcompiled формировать некоторую информацию о версии для получающегося двоичного файла.

Так как subwcrev требует, чтобы .svn метаданные работали, событие перед сборкой собирается перестать работать при использовании на мерзавце-svn, работающем копия. Таким образом, я придумал следующий сценарий удара, который я использую в качестве постфиксации и рычагов постконтроля для моего репозитория мерзавца. Сценарий пытается сделать то же самое как subwcrev на основе вывода мерзавца svn информация (кэшируемый в локальном файле).

#!/bin/sh
if [ ! -f svninfo ] ; then
    git svn info > svninfo
fi

revision=`sed -e "/Revision/!d" -e "s/Revision: \(.*\)/\1/" svninfo`
lastchange=`sed -e "/Last Changed Rev/!d" -e "s/Last Changed Rev: \(.*\)/\1/" svninfo`
# Get the last changed date, extract timestamp, replaces dashes with slashes
changedate=`sed -e "/Last Changed Date/!d" -e "s/Last Changed Date: \(.\{19\}\).*/\1/" -e "s!-!\\\\\\/!g" svninfo`
now=`date "+%Y\/%m\/%d %H:%M:%S"`

gitcommit=`git show --abbrev-commit | sed -n -e "s/commit //p"`

for entry in $( find -name svnversion_template.h ); do
    newname=`echo $entry|sed -e "s/_template//"`
    sed -e "s/\\\$WCRANGE\\\$/${revision}/" \
        -e "s/\\\$WCREV\\\$/${lastchange}-${gitcommit}/" \
        -e "s/\\\$WCDATE\\\$/${changedate}/" \
        -e "s/\\\$WCNOW\\\$/${now}/" \
        -e "s/\\\$WCURL\\\$/local git repo/" \
        -e "s/\\\$WCMODS.*\\\$/(true)/" \
        -e "s/\\\$WCMIXED.*\\\$/(false)/" \
        $entry > `echo $entry|sed -e "s/_template//"`
done

То, что я не могу действительно эмулировать, до сих пор автоматическое обнаружение локальные незафиксированные изменения (на основе последнего проверило пересмотр SVN), который делает subwcrev настолько полезным.

Я заменяю $WCREV$ с количеством пересмотра репозитория SVN (поскольку subwcrev сделал бы), но на этот раз я добавляю свой сокращенный хеш фиксации мерзавца для идентификации кода, который я скомпилировал. Мой вопрос теперь: Есть ли способ различать в сценарии оболочки, отличается ли моя текущая ГОЛОВА от последнего выбранного пересмотра SVN так, чтобы я мог опустить добавлять -${gitcommit} часть и набор $WCMODS$ ко лжи?

Если была некоторая вещь как a post-"git svn dcommit" рычаг, моя проблема была бы решена также с тех пор, что специальный рычаг создаст svnversion.h по-другому. Такой рычаг может быть добавлен так или иначе?

8
задан Pabluez 9 December 2011 в 12:41
поделиться