def _get_review_request_id_to_commits_map(payload, server_url): """Returns a dictionary, mapping a review request ID to a list of commits. If a commit's commit message does not contain a review request ID, we append the commit to the key None. """ review_request_id_to_commits_map = defaultdict(list) ref_name = payload.get('ref') if not ref_name: return None branch_name = get_git_branch_name(ref_name) if not branch_name: return None commits = payload.get('commits', []) for commit in commits: commit_hash = commit.get('id') commit_message = commit.get('message') review_request_id = get_review_request_id(commit_message, server_url, commit_hash) review_request_id_to_commits_map[review_request_id].append( '%s (%s)' % (branch_name, commit_hash[:7])) return review_request_id_to_commits_map
def _get_review_request_id_to_commits_map(payload, server_url, repository): """Return a mapping of review request ID to a list of commits. If a commit's commit message does not contain a review request ID, we append the commit to the key None. Args: payload (dict): The decoded webhook payload. server_url (unicode): The URL of the Review Board server. repository (reviewboard.scmtools.models.Repository): The repository object. Returns: dict: A mapping from review request ID to a list of matching commits from the payload. """ review_request_id_to_commits_map = defaultdict(list) ref_name = payload.get('ref') if not ref_name: return None branch_name = get_git_branch_name(ref_name) if not branch_name: return None commits = payload.get('commits', []) for commit in commits: commit_hash = commit.get('id') commit_message = commit.get('message') review_request_id = get_review_request_id(commit_message, server_url, commit_hash, repository) review_request_id_to_commits_map[review_request_id].append( '%s (%s)' % (branch_name, commit_hash[:7])) return review_request_id_to_commits_map