From d223fb21d61b371619b442e95a8de3a3de21b607 Mon Sep 17 00:00:00 2001 From: rmistry Date: Thu, 26 Feb 2015 10:16:13 -0800 Subject: Automatically add a docs preview link and NOTRY=true when there are only docs changes. These changes are possible due to the recently submitted depot_tools change https://codereview.chromium.org/949273002/ ('Add ability to specify and run post upload hooks'). BUG=skia:3474 Review URL: https://codereview.chromium.org/960203002 --- PRESUBMIT.py | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++ codereview.settings | 1 + 2 files changed, 59 insertions(+) diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 61fa2d6f92..75f930619f 100644 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py @@ -12,6 +12,7 @@ for more details about the presubmit API built into gcl. import fnmatch import os import re +import subprocess import sys import traceback @@ -32,6 +33,8 @@ PUBLIC_API_OWNERS = ( AUTHORS_FILE_NAME = 'AUTHORS' +DOCS_PREVIEW_URL = 'https://skia.org/?cl=' + def _CheckChangeHasEol(input_api, output_api, source_file_filter=None): """Checks that files end with atleast one \n (LF).""" @@ -239,6 +242,61 @@ def _CheckLGTMsForPublicAPI(input_api, output_api): return results +def PostUploadHook(cl, change, output_api): + """git cl upload will call this hook after the issue is created/modified. + + This hook does the following: + * Adds a link to preview docs changes if there are any docs changes in the CL. + * Adds 'NOTRY=true' if the CL contains only docs changes. + """ + + results = [] + atleast_one_docs_change = False + all_docs_changes = True + for affected_file in change.AffectedFiles(): + affected_file_path = affected_file.LocalPath() + file_path, _ = os.path.splitext(affected_file_path) + if 'site' == file_path.split(os.path.sep)[0]: + atleast_one_docs_change = True + else: + all_docs_changes = False + if atleast_one_docs_change and not all_docs_changes: + break + + issue = cl.issue + rietveld_obj = cl.RpcServer() + if issue and rietveld_obj: + original_description = rietveld_obj.get_description(issue) + new_description = original_description + + # If the change includes only doc changes then add NOTRY=true in the + # CL's description if it does not exist yet. + if all_docs_changes and not re.search( + r'^NOTRY=true$', original_description, re.M | re.I): + new_description += '\nNOTRY=true' + results.append( + output_api.PresubmitNotifyResult( + 'This change has only doc changes. Automatically added ' + '\'NOTRY=true\' to the CL\'s description')) + + # If there is atleast one docs change then add preview link in the CL's + # description if it does not already exist there. + if atleast_one_docs_change and not re.search( + r'^DOCS_PREVIEW=.*', original_description, re.M | re.I): + # Automatically add a link to where the docs can be previewed. + new_description += '\nDOCS_PREVIEW= %s%s' % (DOCS_PREVIEW_URL, issue) + results.append( + output_api.PresubmitNotifyResult( + 'Automatically added a link to preview the docs changes to the ' + 'CL\'s description')) + + # If the description has changed update it. + if new_description != original_description: + rietveld_obj.update_description(issue, new_description) + + return results + + def CheckChangeOnCommit(input_api, output_api): """Presubmit checks for the change on commit. diff --git a/codereview.settings b/codereview.settings index 0dba340652..f8e8c9d49b 100644 --- a/codereview.settings +++ b/codereview.settings @@ -5,3 +5,4 @@ CC_LIST: reviews@skia.org BUG_PREFIX: skia: TRYSERVER_SVN_URL: https://skia-try.googlecode.com/svn PROJECT: skia +RUN_POST_UPLOAD_HOOK: True -- cgit v1.2.3