Revert of Revert "Add (another) argument to break git locks in gclient." (patchset #1 id:1 of https://codereview.chromium.org/1865403003/ )

Reason for revert:
This revert breaks /everything/

Original issue's description:
> Revert "Add (another) argument to break git locks in gclient."
> 
> This reverts commit 51797b1d8f24a26aa7f9c23212e06ed2b6cfc0e9.
> 
> BUG=601564
> TBR=iannucci,dpranke,estaab,pgervais
> 
> Committed: https://src.chromium.org/viewvc/chrome?view=rev&revision=299771

TBR=dpranke@google.com,estaab@chromium.org,pgervais@chromium.org,smut@google.com
# Skipping CQ checks because original CL landed less than 1 days ago.
NOPRESUBMIT=true
NOTREECHECKS=true
NOTRY=true
BUG=601564

Review URL: https://codereview.chromium.org/1867843003

git-svn-id: svn://svn.chromium.org/chrome/trunk/tools/depot_tools@299773 0039d316-1c4b-4281-b951-d872f2087c98
diff --git a/tests/gclient_scm_test.py b/tests/gclient_scm_test.py
index d3fdc68..0059224 100755
--- a/tests/gclient_scm_test.py
+++ b/tests/gclient_scm_test.py
@@ -133,6 +133,7 @@
       self.cache_dir = None
       self.merge = False
       self.jobs = 1
+      self.break_repo_locks = False
       self.delete_unversioned_trees = False
 
   sample_git_import = """blob
@@ -501,6 +502,36 @@
     sys.stdout.getvalue()
     sys.stdout.close()
 
+  def testUpdateLocked(self):
+    if not self.enabled:
+      return
+    options = self.Options()
+    scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
+                                relpath=self.relpath)
+    file_path = join(self.base_path, '.git', 'index.lock')
+    with open(file_path, 'w'):
+      pass
+    with self.assertRaisesRegexp(subprocess2.CalledProcessError,
+                                 'Unable to create.*/index.lock'):
+      scm.update(options, (), [])
+    sys.stdout.close()
+
+  def testUpdateLockedBreak(self):
+    if not self.enabled:
+      return
+    options = self.Options()
+    options.break_repo_locks = True
+    scm = gclient_scm.CreateSCM(url=self.url, root_dir=self.root_dir,
+                                relpath=self.relpath)
+    file_path = join(self.base_path, '.git', 'index.lock')
+    with open(file_path, 'w'):
+      pass
+    scm.update(options, (), [])
+    self.assertRegexpMatches(sys.stdout.getvalue(),
+                             "breaking lock.*\.git/index\.lock")
+    self.assertFalse(os.path.exists(file_path))
+    sys.stdout.close()
+
   def testUpdateConflict(self):
     if not self.enabled:
       return
@@ -542,6 +573,7 @@
       self.force = force
       self.reset = False
       self.nohooks = False
+      self.break_repo_locks = False
       # TODO(maruel): Test --jobs > 1.
       self.jobs = 1