1234567891011121314151617181920212223242526272829303132333435363738394041 |
- #!/usr/bin/env python
- import re
- import subprocess
- import yaml
- from env import commit_range
- commit_format = '-%n hash: %h%n author: %aN <%aE>%n message: |%n%w(0,2,2)%B'
- gitlog = subprocess.check_output([
- 'git', 'log', '--reverse',
- '--format=format:'+commit_format,
- '..'.join(commit_range), '--',
- ])
- commits = yaml.load(gitlog)
- if not commits:
- exit(0) # what? how can we have no commits?
- DCO = 'Docker-DCO-1.0-Signed-off-by:'
- p = re.compile(r'^{0} ([^<]+) <([^<>@]+@[^<>]+)> \(github: (\S+)\)$'.format(re.escape(DCO)), re.MULTILINE|re.UNICODE)
- failed_commits = 0
- for commit in commits:
- m = p.search(commit['message'])
- if not m:
- print 'Commit {1} does not have a properly formatted "{0}" marker.'.format(DCO, commit['hash'])
- failed_commits += 1
- continue # print ALL the commits that don't have a proper DCO
-
- (name, email, github) = m.groups()
-
- # TODO verify that "github" is the person who actually made this commit via the GitHub API
- if failed_commits > 0:
- exit(failed_commits)
- print 'All commits have a valid "{0}" marker.'.format(DCO)
- exit(0)
|