Кука за предварително подаване за svn за модифициране на файлове, които да бъдат поети в c#

Искам да модифицирам по определен начин (всъщност да форматирам файловете във форматиращ код), преди да бъдат ангажирани в хранилището. Разбрах от Precommit пример (Използвайте гост като име и без парола) как да пиша на python. Но това, което искам да знам, е как да получа списък с файлове, които да бъдат ангажирани, и други аргументи на командния ред, които този приема. Още нещо, което предпочитам е да напиша моя собствена кука за предварително ангажиране на C#, а не на Python или друг скрипт.

Няколко точки Ще напиша exe, който ще форматира, но искам списъкът с файлове, които се ангажират. Как да конфигурирам това със svn.


person Ravisha    schedule 10.02.2010    source източник
comment
Трябва да посочите във въпроса, че говорите за кука от страна на Tortoise (пример от връзката е кука от страна на клиента).   -  person user1068352    schedule 06.01.2013


Отговори (4)


Precommit кукичките, които променят ангажираните файлове, се считат за „лошо нещо“:

http://svnbook.red-bean.com/en/1.5/svn.reposadmin.create.html#svn.reposadmin.create.hooks

Идеята заслужава голяма червена кутия в официалната документация на SVN и предупреждава, че това ще повлияе на начина, по който SVN клиентът работи с хранилището по лош начин.

person John McAleely    schedule 12.02.2010
comment
Лошо е, но все пак има ли начин да се направи това? Подобно на разрешаването на извършването на ангажимента (без предварително ангажимент); на post-commit, проверява файловете, извършва форматирането, след което ги проверява отново? Или за изтриване/отстраняване на изпълними файлове от проверка при предварително ангажиране (имам хора, които не са достатъчно умни, за да знаят как да премахнат exe от проекта, дори и да ги провалят и дадат интелигентен отговор)? - person TamusJRoyce; 26.07.2011
comment
Попитах това по отношение на супер-големи двоични файлове. И тъй като Obliterate все още не съществува. Но разбрах, че файлът ще бъде различен, след като го манипулирам, което го кара да бъде винаги остарял. Това би накарало винаги да се изтегля, дори ако е същото като след (не преди) да бъде регистрирано. Ако има начин да се заобиколи този проблем, все още се интересувам. - person TamusJRoyce; 20.10.2011
comment
@TamusJRoyce вижте въпроса ми там: stackoverflow.com /questions/9888667/ - person santa; 03.04.2012

Първият параметър, предаден на скрипта за кука преди ангажиране, е път към текстов файл. Този текстов файл съдържа всички пътища, които трябва да бъдат ангажирани, разделени с нови редове.

Но за вашата ситуация, може по-добре да използвате куката start-commit: този скрипт се извиква точно преди да започне ангажирането, но след като потребителят е избрал файловете/папките за ангажиране. Скриптът за стартиране на ангажимент се извиква, след като потребителят щракне върху OK в диалоговия прозорец за ангажимент и преди да започне действителният комит. Тази кука има списък с точно това, което ще бъде ангажирано.

person Stefan    schedule 10.02.2010
comment
грешно! Precommit се извиква, след като потребителят щракне върху commit върху избрани файлове. start commit се извиква дори преди потребителският интерфейс за списък с мръсни файлове да бъде показан svnbook.red-bean.com/nightly/en/… - person Ravisha; 11.02.2010
comment
@Ravisha: Във вашия въпрос вие свързвате към скрипт за закачка от СТРАНА НА КЛИЕНТА, който е специфичен за TortoiseSVN. Някак си не мога да повярвам, че самият автор на този инструмент би сгрешил за това... - person jeroenh; 12.02.2010
comment
@ jeroenh Моят отговор беше на това изявление от stefan. Скриптът за предварително ангажиране се извиква, когато се покаже диалоговият прозорец за ангажиране, преди потребителят да започне да избира файлове/папки за ангажиране. Което е грешно, Precommit е след като потребителят избере файловете, но преди да щракне върху бутона OK. Това е всичко, което казах. Не казвам нищо, което противоречи на документите на Tortoise SVN - person Ravisha; 15.02.2010

Първо, мисля, че това е лоша идея. Защо бихте искали да промените кода преди ангажимент? според мен е много по-добре да се провери за форматиране на кода/нарушения на стандартите и да се прекъсне ангажирането. Бих бил много разочарован, ако кодът ми беше променен по време на ангажимент.

За да отговорите на конкретен въпрос, използвайте svnlook changed, за да получите списъка с променени файлове. svnlook dirs-changed ще ви даде директориите, засегнати от чакащата транзакция.

person Sam Post    schedule 10.02.2010
comment
Това е само за форматиране на стила на кода. Не засяга съдържанието по никакъв друг начин. Това, което правя, е да разкрася файла на класа. - person Ravisha; 10.02.2010
comment
svnlook няма да помогне: той иска да използва функцията на TSVN за закачащ скрипт от страна на клиента, а не за закачащи скриптове от страна на сървъра. - person Stefan; 10.02.2010
comment
+1 Оригиналният въпрос не казва нищо за кука от страната на клиента/сървъра. И това е единственият отговор, който се опитва да обясни как да го направите, дори ако това е нещо, което не искате да правите. - person TamusJRoyce; 26.07.2011

Както може би вече сте прочели, кука в subversion е просто програма, извикана в определено време в рамките на процеса на ангажиране с някои параметри и върната стойност. Можете да поставите всяка изпълняваема програма в директорията на кука. Така че можете също да поставите всеки .exe там (което може да бъде и .Net програма). След това проверете аргументите на командния ред и направете каквото искате и върнете всяка int стойност като errorlevel.

Във вашето приложение може би можете да използвате SharpSVN или всичко друго, за да получите лесен достъп до хранилището, за да направите всякакви проверки и да изпратите резултата на потребителя.

person Oliver    schedule 10.02.2010