'Check which branches contain a specific git commit sha using Python dulwich?

I would like to do the following command from Python script using dulwich:

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

What I intend is to check if a particular commit (sha) is placed in more than one branches.

Of course I thought that I can execute the above command from Python and parse the output (parse the number of branches), but that's the last resort solution.

Any other ideas/comments? Thanks in advance.



Solution 1:[1]

Just in case someone was wondering how to do this now using gitpython:

repo.git.branch('--contains', YOURSHA)

Solution 2:[2]

Since branches are just pointers to random commits and they don't "describe" trees in any way, there is nothing linking some random commit TO a branch.

The only sensible way I would take to look up if a given commit is an ancestor of a commit to which some branch points is to traverse all ancestor chains from branch-top commit down.

In other words, in dulwich I would iterate over branches and traverse backwards to see if a sha is on the chain.

I am rather certain that's exactly what git branch --contains <myCommitSha> does as I am not aware of any other shortcut.

Since your choice is (a) make python do the iteration or (b) make C do same iteration, I'd just go with C. :)

Solution 3:[3]

In case anyone uses GitPython and wants all branches

import git
gLocal = git.Git("<LocalRepoLocation>")
gLocal.branch('-a','--contains', '<CommitSHA>').split('\n')

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 harishkb
Solution 2 ddotsenko
Solution 3 joydeba