There is an end case that I am trying to detect in our BitBucket Pre-Receive script. The case is quite simple. A developer creates a bugfix branch off of master and begins doing work. They perform some local commits then push their bugfix branch into BitBucket.
I want to determine if the user is creating a new commit or has cherry-picked an existing commit from another branch (previously committed and pushed to master).
For lack of a better approach I would like to use the REST API to check each commit hash to see if its been previously committed.
My calls to
http://<our bitbucket instance>/rest/api/1.0/users/testuser/repos/testrepo/commits/<commit hash>
should return a 404 for new commits.
When I type a random commit hash I get a 404 via CURL which is expected
When I type a previously committed hash I get valid commit details via CURL which is expected
When I iterate through the list of commits in a Pre-Receive hook all new and old commits are found via the REST call. Does BitBucket internalize all commits before the Pre-Receive hook is executed? Is there any other way to detect this case via a REST call?