2012-01-09 2 views
7

및 새해 복 많이 받으세요. 크리스마스 저녁 식사에서 회복하기 까다로운 문제가 있습니다! 내가 원하는 어떻게 정확하게 코드의SVN : awk (bash에서) 명령 행 svn에 색상을 추가

function svn { 
    command svn "[email protected]" | awk ' 
    BEGIN { 
    cpt_c=0; 
    } 
    { 
    if  ($1=="C") { 
     cpt_c=cpt_c+1; 
     print "\033[31m" $0 "\033[00m"; # Conflicts are displayed in red 
    } 
    else if ($1=="A") { 
     print "\033[32m" $0 "\033[00m"; # Add in green 
    } 
    else if ($1=="?") { 
     print "\033[36m" $0 "\033[00m"; # New in cyan 
    } 
    else if ($1=="D") { 
     print "\033[35m" $0 "\033[00m"; # Delete in magenta 
    } 
    else    { 
     print $0;      # No color, just print the line 
    } 
    } 
    END { 
    print cpt_c, " conflicts are found."; 
    }'; 
} 

이 부분 : 여기


는 작동 배쉬 코드 (내가 파일의 .bashrc 에 넣어) 느릅 나무의 일부입니다. svn 함수 (상태, 업데이트 등)는 색상으로 인쇄됩니다. 내부적으로 필요한 경우 colorsvn 또는 svn-color 같은 것을 설치하고 싶지 않습니다. 여기

는 위의 코드의 예입니다 (이미지를 게시 한 정도로 명성을하지 않음) 다시

svn command displayed in colors

그리고, 내가을 원하는 완벽하다 을. 문제는 충돌이 발견 될 때 (예 : 업데이트 할 때) 발생합니다. 실제로 파일 충돌시 svn이 몇 자의 문자를 입력 할 수 있도록 사용자에게 넘겨줍니다 (아래 참조)

# svn update 
Conflict discovered in 'test.txt'. 
Select: (p) postpone, (df) diff-full, (e) edit, 
     (mc) mine-conflict, (tc) theirs-conflict, 
     (s) show all options: 

사용자 유형 뭔가를 수 있도록 awk가 할 수있는 방법이 있나요 (다음 &이을 종료 저장, e를 입력 한 후 일부 행을 삭제 예를 들어 ) 무언가를, (예를 전자에 대한 는 빔 충돌하는 파일 오픈 이십 기가 바이트) 충돌을 해결하기 위해 다른 문자를 입력 한 다음 마침내 svn update (다른 파일 등)의 다음 단계를 표시 하시겠습니까?

다른 말로하면, 사용자가 svn과 상호 작용할 수 있도록 색상을 표시하는 스크립트를 "일시 중지"한 다음 svn update가 계속 진행되기를 원합니다. awk가 호출자 스크립트를 멈추게 할 수있는 방법을 알고 미래에 매우 유용 할 것이라고 생각합니다.


나 자신을 분명하게 만들었습니까? 내 영어가 내가 원하는만큼 좋지 않다 :/

자세한 내용은 언제든지 문의하십시오!

+3

'명령 svn'은 여전히 ​​사용자의 입력을받습니다. 자율적 인 실행과 대화식 실행 사이를 전환 할 수있는 '기대'와 같은 도구가 있지만 여기에는 다소 요점이있을 수 있습니다. 올바른 해결책은 저수준 래퍼입니다. 사용하고 싶지 않은 래퍼와 같을 것입니다. awk 스크립트는 입력 된 frim을 파이프로 받지만,'/ dev/tty' 또는 그 밖의 입력으로부터 추가 입력을 읽는 모드를 추가하기 위해 뭔가를 해킹 할 수 있습니다. – tripleee

+0

bash 함수'svn'을 확장하여이 모든 것을 처리하고 싶습니까, 아니면'svn' 함수가 실행 된 후에 별도의 코드로 '일시 정지'가 필요하다고 생각합니까? 덧붙여서 당신의 영어는 괜찮습니다! 행운을 빕니다. – shellter

+0

@shellter : 글쎄, 나는 bash 함수를 확장하고 싶다. 하지만 모든 가능한 해결책에 대해 열려 있습니다;) Ty for my english! –

답변

3

당신은 충돌을 묻는 메시지를 표시하지 않습니다 그래서 svnsvn update --accept postpone를 실행하려고 했습니까?

+0

남자, 이것은 PERFECT입니다. 충돌에 대한 더 이상 프롬프트가 없습니다 ...그래서 나는 전체 스크립트를 유지할 수 있습니다! 고마워요, 그건 분명했는데 알아 내지 못했어요! –

+1

참고 : ** 모든 SVN 프롬프트 **를 피하려면 SVN 하위 명령에 대해 --non-interactive 옵션을 사용하는 것이 좋습니다. –

0

다음은 간단하고 안전한 해결책입니다 (스크립트로 테스트). SVN은 단순히 호출하기 때문에

system(getenv("SVN_EDITOR")) // or something similar 
당신이 간단하게 할 수있는

제 (다른 조개를 조정, bash는) 다음 : 그런 다음 편집을 할 수,과에서 색상 표시 체계를 유지합니다

export SVN_EDITOR="</dev/tty >&/dev/tty vi" 

awk.

다른 편집자와 호환되는지 여부는 알 수 없지만 실제로 사용하기를 바랍니다. 이것들은 표준 리다이렉트이다.

+0

나는 이번 주말에 시험을하고, 무슨 일이 일어나고 있는지 말해 줄 것이다. 고마워! –

2

질문에 특히 답변하지는 않았지만 svn commit을 실행할 때 awk을 우회하는 약간 수정 된 버전의 스크립트를 만들었습니다. 또한 특정 출력 유형에 더 많은 색상을 추가했습니다. 스크립트는 온라인에서 사용할 수 있습니다. 변경 사항을 언제든지 저지하십시오.

+0

와우, 나는 조금 아첨을 느낀다! 색상을 추가하는 것이 좋습니다. 하지만 내가 말했듯이, 파일의 경우 svn 업데이트 중에 충돌하는 경우, 나는 당신과 같은 문제가있을 것이라고 생각합니다. '충돌은'offres.php '에서 발견되었습니다. 선택 : (p) 연기, (df) diff-full, (e) 편집, (h) 기타 옵션에 대한 도움말 : ' –

+0

설정이 다릅니다. 나는'svn' 저장소와'git' 저장소를 동시에 사용하고 있습니다. 충돌은'git'을 통해서만 해결됩니다. 내가'svn'을 저지 할 때마다 나는 갈등이 없을 것입니다. - 충돌을 재현하기 위해 일부 테스트 프로젝트를 설정해야합니다. 기분 나빠하지 마라! 나는 당신의 스크립트를 이기적 인 "색"의 이유로 사용합니다. 그러나 나는 그동안 휴가 중이기 때문에 3 월에 문제를 볼 수 있습니다. – JJD

+1

마지막으로, 4 년이 지난 지금, 나는 당신이 과거에했던 것처럼 GitHub을 통해이 스 니펫의 제 버전을 공유하기로 결정했습니다.) 많은 개선을 했으므로 관심이 있다면 [ beautifulSVN의 최신 버전] (https://github.com/4wk-/beautifulSVN) –