Index: tools/auto_bisect/bisect_utils.py
|
diff --git a/tools/auto_bisect/bisect_utils.py b/tools/auto_bisect/bisect_utils.py
|
index f75c976fd219c13414072f09c564f64c206727d9..9dfc65294fcf50dbfb81d261314e2690e515890c 100644
|
--- a/tools/auto_bisect/bisect_utils.py
|
+++ b/tools/auto_bisect/bisect_utils.py
|
@@ -11,7 +11,6 @@ annotations for the Buildbot waterfall.
|
import errno
|
import imp
|
import os
|
-import shutil
|
import stat
|
import subprocess
|
import sys
|
@@ -83,6 +82,9 @@ REPO_PARAMS = [
|
'https://git.chromium.org/external/repo.git'
|
]
|
|
+# Bisect working directory.
|
+BISECT_DIR = 'bisect'
|
+
|
|
def OutputAnnotationStepStart(name):
|
"""Outputs annotation to signal the start of a step to a try bot.
|
@@ -162,12 +164,12 @@ def _CreateAndChangeToSourceDirectory(working_directory):
|
cwd = os.getcwd()
|
os.chdir(working_directory)
|
try:
|
- os.mkdir('bisect')
|
+ os.mkdir(BISECT_DIR)
|
except OSError, e:
|
if e.errno != errno.EEXIST: # EEXIST indicates that it already exists.
|
os.chdir(cwd)
|
return False
|
- os.chdir('bisect')
|
+ os.chdir(BISECT_DIR)
|
return True
|
|
|
@@ -308,28 +310,6 @@ def OnAccessError(func, path, _):
|
raise
|
|
|
-def RemoveThirdPartyDirectory(dir_name):
|
- """Removes third_party directory from the source.
|
-
|
- At some point, some of the third_parties were causing issues to changes in
|
- the way they are synced. We remove such folder in order to avoid sync errors
|
- while bisecting.
|
-
|
- Returns:
|
- True on success, otherwise False.
|
- """
|
- path_to_dir = os.path.join(os.getcwd(), 'third_party', dir_name)
|
- try:
|
- if os.path.exists(path_to_dir):
|
- shutil.rmtree(path_to_dir, onerror=OnAccessError)
|
- except OSError, e:
|
- print 'Error #%d while running shutil.rmtree(%s): %s' % (
|
- e.errno, path_to_dir, str(e))
|
- if e.errno != errno.ENOENT:
|
- return False
|
- return True
|
-
|
-
|
def _CleanupPreviousGitRuns():
|
"""Cleans up any leftover index.lock files after running git."""
|
# If a previous run of git crashed, or bot was reset, etc., then we might
|
@@ -350,7 +330,8 @@ def RunGClientAndSync(cwd=None):
|
Returns:
|
The return code of the call.
|
"""
|
- params = ['sync', '--verbose', '--nohooks', '--reset', '--force']
|
+ params = ['sync', '--verbose', '--nohooks', '--reset', '--force',
|
+ '--delete_unversioned_trees']
|
return RunGClient(params, cwd=cwd)
|
|
|
@@ -368,35 +349,19 @@ def SetupGitDepot(opts, custom_deps):
|
otherwise.
|
"""
|
name = 'Setting up Bisection Depot'
|
+ try:
|
+ if opts.output_buildbot_annotations:
|
+ OutputAnnotationStepStart(name)
|
|
- if opts.output_buildbot_annotations:
|
- OutputAnnotationStepStart(name)
|
-
|
- passed = False
|
-
|
- if not RunGClientAndCreateConfig(opts, custom_deps):
|
- passed_deps_check = True
|
- if os.path.isfile(os.path.join('src', FILE_DEPS_GIT)):
|
- cwd = os.getcwd()
|
- os.chdir('src')
|
- if passed_deps_check:
|
- passed_deps_check = RemoveThirdPartyDirectory('libjingle')
|
- if passed_deps_check:
|
- passed_deps_check = RemoveThirdPartyDirectory('skia')
|
- os.chdir(cwd)
|
-
|
- if passed_deps_check:
|
- _CleanupPreviousGitRuns()
|
-
|
- RunGClient(['revert'])
|
- if not RunGClientAndSync():
|
- passed = True
|
+ if RunGClientAndCreateConfig(opts, custom_deps):
|
+ return False
|
|
- if opts.output_buildbot_annotations:
|
- print
|
- OutputAnnotationStepClosed()
|
-
|
- return passed
|
+ _CleanupPreviousGitRuns()
|
+ RunGClient(['revert'])
|
+ return not RunGClientAndSync()
|
+ finally:
|
+ if opts.output_buildbot_annotations:
|
+ OutputAnnotationStepClosed()
|
|
|
def CheckIfBisectDepotExists(opts):
|
@@ -408,7 +373,7 @@ def CheckIfBisectDepotExists(opts):
|
Returns:
|
Returns True if it exists.
|
"""
|
- path_to_dir = os.path.join(opts.working_directory, 'bisect', 'src')
|
+ path_to_dir = os.path.join(opts.working_directory, BISECT_DIR, 'src')
|
return os.path.exists(path_to_dir)
|
|
|
@@ -451,6 +416,15 @@ def CreateBisectDirectoryAndSetupDepot(opts, custom_deps):
|
opts: The options parsed from the command line through parse_args().
|
custom_deps: A dictionary of additional dependencies to add to .gclient.
|
"""
|
+ if CheckIfBisectDepotExists(opts):
|
+ path_to_dir = os.path.join(os.path.abspath(opts.working_directory),
|
+ BISECT_DIR, 'src')
|
+ (output, _) = RunGit(['rev-parse', '--is-inside-work-tree'],
|
+ cwd=path_to_dir)
|
+ if output.strip() == 'true':
|
+ # Checks out the master branch, throws an exception if git command fails.
|
+ CheckRunGit(['checkout', '-f', 'master'], cwd=path_to_dir)
|
+
|
if not _CreateAndChangeToSourceDirectory(opts.working_directory):
|
raise RuntimeError('Could not create bisect directory.')
|
|
|