문제

글을 쓰는 가장 좋은 방법은 무엇입니까 후크 ~을 위한 파괴 ~에 윈도우?제가 아는 한 실행 파일만 사용할 수 있습니다.그렇다면 최선의 선택은 무엇입니까?

  • 일반 배치 파일(매우 제한적이지만 매우 간단한 솔루션에는 괜찮을 수도 있음)
  • 전용 컴파일된 실행 가능 애플리케이션(간단히 말해서 큰 망치?)
  • 다른 하이브리드 선택(예: Powershell 스크립트를 실행하는 배치 파일)
도움이 되었습니까?

해결책

나는 정확히 이 질문에 대해 며칠을 미루며 보냈습니다.사용 가능한 타사 제품과 많은 PERL 및 Python 스크립트가 있지만 저는 간단하고 익숙한 언어를 원했기 때문에 결국 C# 콘솔 앱에 후크를 작성하게 되었습니다.매우 간단합니다.

public void Main(string[] args)
{
  string repositories = args[0];
  string transaction = args[1];

  var processStartInfo = new ProcessStartInfo
                           {
                             FileName = "svnlook.exe",
                             UseShellExecute = false,
                             CreateNoWindow = true,
                             RedirectStandardOutput = true,
                             RedirectStandardError = true,
                             Arguments = String.Format("log -t \"{0}\" \"{1}\"", transaction, repositories)
                           };

  var p = Process.Start(processStartInfo);
  var s = p.StandardOutput.ReadToEnd();
  p.WaitForExit();

  if (s == string.Empty)
  {
    Console.Error.WriteLine("Message must be provided");
    Environment.Exit(1);
  }

  Environment.Exit(0);
}

그런 다음 다음 줄을 사용하여 repo의 후크 폴더에 pre-commit.cmd 파일을 추가하여 사전 커밋 시 이를 호출할 수 있습니다.

[path]\PreCommit.exe %1 %2

이 과잉이라고 생각할 수도 있지만 궁극적으로 코딩하는 데는 몇 분 밖에 걸리지 않습니다.또한 IMHO가 대안보다 훨씬 선호되는 .NET 언어 제품군의 이점을 누릴 수 있습니다.나는 후크를 크게 확장하고 그에 대한 적절한 테스트도 작성할 것입니다. DOS 배치 파일로는 이를 수행하기가 약간 어렵습니다!

그런데 코드는 다음에서 수정되었습니다. 이 게시물.

다른 팁

우리는 다음과 같은 복잡한 요구 사항을 갖고 있습니다.

  1. 특정 사용자만 SVN 트리의 일부에 폴더를 만들 수 있지만 모든 사람이 그곳에서 파일을 편집할 수 있습니다.
  2. 특정 파일 확장자는 파일의 특정 텍스트를 포함할 수 없습니다.
  3. 특정 파일 확장자는 디렉토리의 하위 집합에만 저장할 수 있습니다.
  4. 다음과 같은 몇 가지 간단한 것 외에도 커밋 주석이 있어야 합니다.
  5. 모든 이전 SVN 커밋에 대해 새 후크를 실행하여 회귀 테스트 가능

#5는 우리에게 엄청난 일입니다. 새로운 후크를 통해 이전의 모든 커밋을 푸시할 수 있는 것보다 앞으로 커밋을 중단하지 않을 것임을 알 수 있는 더 좋은 방법은 없습니다.1234가 개정판이고 1234-1이 트랜잭션이라는 것을 후크가 이해하도록 하고 svnlook 등을 호출할 때 인수를 적절하게 변경합니다.그 과정에서 우리가 내린 최선의 결정이었습니다.

우리에게는 완전히 단위 테스트가 가능하고 회귀 테스트가 가능한 C# 콘솔 exe가 가장 적합할 정도로 너트가 커졌습니다.우리는 디렉토리 제한 사항을 제공하고 기존 httpd_authz 파일을 구문 분석하여 "권한 있는" 사용자를 얻는 등의 구성 파일을 가지고 있습니다..NET 개발 인력과 함께 Windows에서 실행하지 않았다면 아마 모든 것을 Python으로 작성했을 것입니다. 그러나 나중에 다른 사람들이 이를 지원해야 할 수도 있으므로 .BAT, .VBS, Powershell 대신 .NET을 사용했습니다.

개인적으로 저는 Powershell이 ​​.NET과 충분히 다르기 때문에 "스크립팅" 언어로는 거의 쓸모가 없다고 생각합니다.제품에 대한 유일한 cmd 라인 지원이 PS(Exchange, Windows 2k8) 등을 통해 제공된다면 좋습니다.하지만 원하는 것이 일부 텍스트를 구문 분석하거나 일반 .NET 개체에 액세스하는 것뿐이라면 PS는 빠르고 쉬운 작은 .NET 앱에 미친 구문과 어리석은 보안 철의 장막을 추가하기만 하면 됩니다.

확인하다 후크 선장, ".NET을 사용하여 Subversion 후크를 작성하기 위한 간단한 플러그인 프레임워크"입니다.

복잡도에 따라 상황이 다르기 때문에 단순히 파일을 옮기는 것이라면 빠른 배치 파일을 작성하겠습니다.좀 더 복잡한 작업을 수행하려면 일반적으로 스크립팅 부분을 건너뛰고 이를 처리할 수 있는 빠른 C# 프로그램을 작성합니다.

그렇다면 문제는 해당 C# 프로그램을 svn에 넣고 버전을 지정하는 것입니다. :)

편집하다: 전용 C# 애플리케이션의 이점은 후크 로깅을 처리하기 위해 만든 간단한 로그 출력을 포함하여 나중에 코드 조각을 재사용하여 새 후크를 만들 수 있다는 것입니다.

나는 후크를 썼다. 파이썬 Windows에서는 인터넷에 많은 예제가 있기 때문입니다(일반적으로 Linux의 경우이지만 차이는 작습니다).우리는 또한 사용합니다 트랙 SVN과 통합되었으며 Python을 통해 액세스할 수 있는 Trac API가 있습니다. 이를 통해 SVN 후크 스크립트에서 Trac 티켓을 자동으로 생성/수정할 수 있습니다.

간단한 PHP 클래스의 도움으로 PHP 실행 파일이 있는 경우 여기에 표시된 것처럼 PHP에서 후크 스크립트를 작성할 수 있습니다. http://www.devhands.com/2010/01/subversion-hook-php-framework-in/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top