xref: /aosp_15_r20/external/opencensus-java/buildscripts/check-git-history.py (revision a24ffb47c3166327784aa05b149974e82e8f71b8)
1*a24ffb47SSadaf Ebrahimiimport os
2*a24ffb47SSadaf Ebrahimiimport sys
3*a24ffb47SSadaf Ebrahimiimport traceback
4*a24ffb47SSadaf Ebrahimi
5*a24ffb47SSadaf Ebrahimidef main(argv):
6*a24ffb47SSadaf Ebrahimi  # Only check the history if the build is running on a pull request.
7*a24ffb47SSadaf Ebrahimi  # Build could be running on pull request using travis or kokoro.
8*a24ffb47SSadaf Ebrahimi  if is_travis_pull_request() or is_kokoro_presubmit_request():
9*a24ffb47SSadaf Ebrahimi    # This function assumes that HEAD^1 is the base branch and HEAD^2 is the
10*a24ffb47SSadaf Ebrahimi    # pull request.
11*a24ffb47SSadaf Ebrahimi    exit_if_pull_request_has_merge_commits()
12*a24ffb47SSadaf Ebrahimi    print 'Checked pull request history: SUCCEEDED'
13*a24ffb47SSadaf Ebrahimi  else:
14*a24ffb47SSadaf Ebrahimi    print 'Skipped history check.'
15*a24ffb47SSadaf Ebrahimi
16*a24ffb47SSadaf Ebrahimidef is_kokoro_presubmit_request():
17*a24ffb47SSadaf Ebrahimi  '''Returns true if KOKORO_GITHUB_PULL_REQUEST_NUMBER is set.'''
18*a24ffb47SSadaf Ebrahimi  if 'KOKORO_GITHUB_PULL_REQUEST_NUMBER' in os.environ:
19*a24ffb47SSadaf Ebrahimi    return True
20*a24ffb47SSadaf Ebrahimi  return False
21*a24ffb47SSadaf Ebrahimi
22*a24ffb47SSadaf Ebrahimidef is_travis_pull_request():
23*a24ffb47SSadaf Ebrahimi  '''Returns true if TRAVIS_PULL_REQUEST is set to indicate a pull request.'''
24*a24ffb47SSadaf Ebrahimi  if 'TRAVIS_PULL_REQUEST' in os.environ:
25*a24ffb47SSadaf Ebrahimi    return os.environ['TRAVIS_PULL_REQUEST'] != 'false'
26*a24ffb47SSadaf Ebrahimi  return False
27*a24ffb47SSadaf Ebrahimi
28*a24ffb47SSadaf Ebrahimidef exit_if_pull_request_has_merge_commits():
29*a24ffb47SSadaf Ebrahimi  '''Exits with an error if any of the commits added by the pull request are
30*a24ffb47SSadaf Ebrahimi     merge commits.'''
31*a24ffb47SSadaf Ebrahimi  # Print the parents of each commit added by the pull request.
32*a24ffb47SSadaf Ebrahimi  git_command = 'git log --format="%P" HEAD^1..HEAD^2'
33*a24ffb47SSadaf Ebrahimi  for line in os.popen(git_command):
34*a24ffb47SSadaf Ebrahimi    parents = line.split()
35*a24ffb47SSadaf Ebrahimi    assert len(parents) >= 1, line
36*a24ffb47SSadaf Ebrahimi    if len(parents) > 1:
37*a24ffb47SSadaf Ebrahimi      print 'Pull request contains a merge commit:'
38*a24ffb47SSadaf Ebrahimi      print_history()
39*a24ffb47SSadaf Ebrahimi      print 'Checked pull request history: FAILED'
40*a24ffb47SSadaf Ebrahimi      sys.exit(1)
41*a24ffb47SSadaf Ebrahimi
42*a24ffb47SSadaf Ebrahimidef print_history():
43*a24ffb47SSadaf Ebrahimi  os.system('git log HEAD^1 HEAD^2 -30 --graph --oneline --decorate')
44*a24ffb47SSadaf Ebrahimi
45*a24ffb47SSadaf Ebrahimidef read_process(command):
46*a24ffb47SSadaf Ebrahimi  '''Runs a command and returns everything printed to stdout.'''
47*a24ffb47SSadaf Ebrahimi  with os.popen(command, 'r') as fd:
48*a24ffb47SSadaf Ebrahimi    return fd.read()
49*a24ffb47SSadaf Ebrahimi
50*a24ffb47SSadaf Ebrahimiif __name__ == '__main__':
51*a24ffb47SSadaf Ebrahimi  main(sys.argv)
52