[fiddle] Add PRESUBMIT rule to run tools/fiddle/make_all_examples_cpp.py

It will run this only if it detected a change to docs/examples
and runs fairly quickly.

Hopefully it avoids future bitrot like:
https://skia-review.googlesource.com/c/skia/+/423956

Change-Id: I8c6a54faa3a14dfb53260e03d4e6cc61e84b76cc
Reviewed-on: https://skia-review.googlesource.com/c/skia/+/423976
Reviewed-by: Joe Gregorio <jcgregorio@google.com>
diff --git a/PRESUBMIT.py b/PRESUBMIT.py
index c7a910c..43675cc 100644
--- a/PRESUBMIT.py
+++ b/PRESUBMIT.py
@@ -249,6 +249,29 @@
   return results
 
 
+def _RegenerateAllExamplesCPP(input_api, output_api):
+  """Regenerates all_examples.cpp if an example was added or deleted."""
+  if not any(f.LocalPath().startswith('docs/examples/')
+             for f in input_api.AffectedFiles()):
+    return []
+  command_str = 'tools/fiddle/make_all_examples_cpp.py'
+  cmd = ['python', command_str]
+  if 0 != subprocess.call(cmd):
+    return [output_api.PresubmitError('`%s` failed' % ' '.join(cmd))]
+
+  results = []
+  git_diff_output = input_api.subprocess.check_output(
+      ['git', 'diff', '--no-ext-diff'])
+  if git_diff_output:
+    results += [output_api.PresubmitError(
+        'Diffs found after running "%s":\n\n%s\n'
+        'Please commit or discard the above changes.' % (
+            command_str,
+            git_diff_output,
+        )
+    )]
+  return results
+
 def _CommonChecks(input_api, output_api):
   """Presubmit checks common to upload and commit."""
   results = []
@@ -276,6 +299,7 @@
   results.extend(_CheckIncludesFormatted(input_api, output_api))
   results.extend(_CheckGNFormatted(input_api, output_api))
   results.extend(_CheckGitConflictMarkers(input_api, output_api))
+  results.extend(_RegenerateAllExamplesCPP(input_api, output_api))
   return results