gclient sync: Add support to apply gerrit refs.

Mimics bot_update's functionality to apply gerrit refs in gclient
via --gerrit-ref flags.
When the patch fails to apply, gclient sync will return exit code 2.

The idea is to move this logic from bot_update to gclient sync to
deal when patches for projects like ANGLE are tried on Chromium bots.
This way the patch is applied before recursively parsing and syncing
ANGLE’s DEPS.chromium file, which doesn't currently happen.

Bug: 643346

Change-Id: I7e2018b3c393a5ac9852b8c3611f906977eeeb18
Reviewed-on: https://chromium-review.googlesource.com/961605
Reviewed-by: Aaron Gable <agable@chromium.org>
Commit-Queue: Edward Lesmes <ehmaldonado@chromium.org>
diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py
index dd9fc67..4742310 100755
--- a/tests/gclient_scm_test.py
+++ b/tests/gclient_scm_test.py
@@ -123,6 +123,9 @@
       self.jobs = 1
       self.break_repo_locks = False
       self.delete_unversioned_trees = False
+      self.patch_ref = None
+      self.patch_repo = None
+      self.rebase_patch_ref = True
 
   sample_git_import = """blob
 mark :1
@@ -561,6 +564,9 @@
       self.break_repo_locks = False
       # TODO(maruel): Test --jobs > 1.
       self.jobs = 1
+      self.patch_ref = None
+      self.patch_repo = None
+      self.rebase_patch_ref = True
 
   def Options(self, *args, **kwargs):
     return self.OptionsObject(*args, **kwargs)