2013-01-25 2 views
0

내가 dulwich 사용하여 파이썬 스크립트에서 다음 명령을 수행하고 싶습니다 : 내가하고자하는 것은 확인하는 것입니다Python dulwich를 사용하여 특정 git commit sha가 포함 된 분기를 확인 하시겠습니까?

$ git branch --contains <myCommitSha> | wc -l

개 이상의 지점에 위치 커밋 (SHA) 특정 경우.

물론 나는 파이썬에서 위의 명령을 실행하고 결과를 구문 분석 할 수 있다고 생각했지만 (분기 수 분석) 최후의 해결책입니다.

다른 아이디어/의견이 있으십니까? 미리 감사드립니다.

+0

명령을 실행하는 것이 길입니다. 이것이 git으로 작업하는 방법입니다. – Chronial

+0

덕분에 @ddotsenko, @Chronial, 단지 dulwich가 Python 코드 내에서'git branch --contains' 결과물을 제공하는 다른 방법이 없도록하고 싶었습니다. (필자는 외부 프로세스 실행을 피하고 싶었습니다.) – Blaise

답변

1

이에 대한 더 내장 함수가 없습니다, 같은 반복을 C을, 하지만 물론 스스로 구현할 수 있습니다.

또한 단지 (테스트되지 않은) 같은 것을 수행 할 수 있습니다

branches = [ref for ref in repo.refs.keys("refs/heads/") if 
      any((True for commit in repo.get_walker(include=[repo.refs[ref]]) 
       if commit.id == YOURSHA))] 

이 당신에게 커밋 주어진 포함하는 모든 브랜치 헤드의 목록을 제공합니다,하지만 N (O의 실행을해야합니다 * m), n 귀하의 레포에 커밋 금액을, m 브랜치의 양을 beeing. 자식 구현은 아마도 O (n)의 런타임을가집니다.

+0

힌트를 보내 주셔서 감사합니다. 당신의 대답은 제가 찾고있는 것을주었습니다. – Blaise

2

분기는 임의의 커밋에 대한 포인터 일 뿐이며 어떤 식 으로든 "설명하는"트리가 아니기 때문에 임의의 커밋을 연결하는 것은 없습니다. ~ 분기가 있습니다.

주어진 커밋이 일부 분기점이 분기 최상위 커밋에서 모든 조상 체인을 통과하는 커밋의 조상이라면 내가 바라 보는 유일한 합리적인 방법입니다.

다른 말로하면, 덜 리치 (dulwich)에서 나는 사슬을 따라 체인을 따라 가면서 가지를 뒤집어 뒤를 돌아 보았습니다.

정확히 어떤 다른 바로 가기를 인식하지 못하기 때문에 git branch --contains <myCommitSha>이 정확히 무엇인지 확신합니다.

선택 (a)는 파이썬이 반복 또는를 할 수 있도록하기 때문에 (B) 난 그냥 C.와 함께 가고 싶어요 :)