вторник, 29 июля 2014 г.

Как получить сообщение последнего комита в SVN

Если вам понадобиться сообщение последнего комита в SVN это можно сделать следующей командой

$ PROJECT_DIR="/Users/vitaly/Development/MyProject"
$ svn up
$ svn log ${PROJECT_DIR} --xml --with-all-revprops -r committed | xmllint --xpath //msg/text\(\) --format -

Для этого у вас в контексте должна быть переменная PROJECT_DIR в которой указан путь к проекту, например PROJECT_DIR="/user/vitaly/development/MyProject".

Сначала делаем update, потом берем последний комит. Данные вернуться в виде xml, в котором будет тэг msg. Использую встроенную утилиту xmllint ищем через xpath тэг msg и берег текст внутри тэга.

svn up - обязательно перед svn log, а то можете получить пустой тэг в ответе к svn log.

вторник, 22 июля 2014 г.

Как добавить в svn файлы с "@" с командной строки


Если кто-то работал с svn из командной строки на mac, то возможно вы сталкивались с проблемой, что svn не понимает файлы с собакой "@".

Например, если вы хотите добавить файл menu-icon@2x.png выполнив команду svn add menu-icon@2x.png получите

svn add menu-icon@2x.png 
svn: warning: W155010: '........FILE PATH..../menu-icon' not found
svn: E200009: Could not add all targets because some targets don't exist
svn: E200009: Illegal target for the requested operation

Это решается добавлением "@" к название файла

vitaly$ svn add menu-icon@2x.png@ 
A  (bin)  menu-icon@2x.png
Narnia:Slice vitaly$


Допустим у вас есть целая папка с такими файлами

vitaly$ svn status
A       .
?       Splash-568h@2x.png
?       Splash@2x.png
?       background-568h@2x.png
?       background@2x.png
?       login-icon@2x.png
?       loupe-icon@2x.png
?       menu-icon@2x.png
?       password-icon@2x.png
?       reports-icon@2x.png
?       settings-icon@2x.png                                                               


По одному добавлять не удобно... Используем то, что уже знаем + pipe'ы и пишем следующий набор команд

vitaly$ ls | awk '{print $1"@" }' | xargs svn add
A  (bin)  Splash-568h@2x.png
A  (bin)  Splash@2x.png
A  (bin)  background-568h@2x.png
A  (bin)  background@2x.png
A  (bin)  login-icon@2x.png
A  (bin)  loupe-icon@2x.png
A  (bin)  menu-icon@2x.png
A  (bin)  password-icon@2x.png
A  (bin)  reports-icon@2x.png
A  (bin)  settings-icon@2x.png

ls - показывает список файлов в текущей папке
awk - сканер по патерну, аля regex. То, что в кавычках это команда которую мы выполняем если паттерн подошел. $1 будет название файла. "@" - то, что мы добавляем к названию файла
xargs - выполняем команду.

Таким же образом можно использовать и svn revert и тп.