Commit b1174d73 authored by Edward Lesmes's avatar Edward Lesmes Committed by LUCI CQ

split-cl: Walk the tree instead of using owners db.

Change-Id: I9dc9cda5a30833938fe13476deb76f4ed5770eab
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/2666668
Auto-Submit: Edward Lesmes <ehmaldonado@chromium.org>
Commit-Queue: Gavin Mak <gavinmak@google.com>
Reviewed-by: 's avatarGavin Mak <gavinmak@google.com>
parent 13e0b55d
...@@ -30,13 +30,6 @@ import git_common as git ...@@ -30,13 +30,6 @@ import git_common as git
CL_SPLIT_FORCE_LIMIT = 10 CL_SPLIT_FORCE_LIMIT = 10
def ReadFile(file_path):
"""Returns the content of |file_path|."""
with open(file_path) as f:
content = f.read()
return content
def EnsureInGitRepository(): def EnsureInGitRepository():
"""Throws an exception if the current directory is not a git repository.""" """Throws an exception if the current directory is not a git repository."""
git.run('rev-parse') git.run('rev-parse')
...@@ -142,21 +135,21 @@ def UploadCl(refactor_branch, refactor_branch_upstream, directory, files, ...@@ -142,21 +135,21 @@ def UploadCl(refactor_branch, refactor_branch_upstream, directory, files,
publish=True) publish=True)
def GetFilesSplitByOwners(owners_database, files): def GetFilesSplitByOwners(files):
"""Returns a map of files split by OWNERS file. """Returns a map of files split by OWNERS file.
Returns: Returns:
A map where keys are paths to directories containing an OWNERS file and A map where keys are paths to directories containing an OWNERS file and
values are lists of files sharing an OWNERS file. values are lists of files sharing an OWNERS file.
""" """
files_split_by_owners = collections.defaultdict(list) files_split_by_owners = {}
for action, path in files: for action, path in files:
enclosing_dir = owners_database.enclosing_dir_with_owners(path) dir_with_owners = os.path.dirname(path)
# Anything matching a per-file rule will return its own path. # Find the closest parent directory with an OWNERS file.
# Aggregate up to the parent directory so as not to over-split. while (dir_with_owners not in files_split_by_owners
if enclosing_dir == path: and not os.path.isfile(os.path.join(dir_with_owners, 'OWNERS'))):
enclosing_dir = os.path.dirname(path) dir_with_owners = os.path.dirname(dir_with_owners)
files_split_by_owners[enclosing_dir].append((action, path)) files_split_by_owners.setdefault(dir_with_owners, []).append((action, path))
return files_split_by_owners return files_split_by_owners
...@@ -201,8 +194,9 @@ def SplitCl(description_file, comment_file, changelist, cmd_upload, dry_run, ...@@ -201,8 +194,9 @@ def SplitCl(description_file, comment_file, changelist, cmd_upload, dry_run,
Returns: Returns:
0 in case of success. 1 in case of error. 0 in case of success. 1 in case of error.
""" """
description = AddUploadedByGitClSplitToDescription(ReadFile(description_file)) description = AddUploadedByGitClSplitToDescription(
comment = ReadFile(comment_file) if comment_file else None gclient_utils.FileRead(description_file))
comment = gclient_utils.FileRead(comment_file) if comment_file else None
try: try:
EnsureInGitRepository() EnsureInGitRepository()
...@@ -228,7 +222,7 @@ def SplitCl(description_file, comment_file, changelist, cmd_upload, dry_run, ...@@ -228,7 +222,7 @@ def SplitCl(description_file, comment_file, changelist, cmd_upload, dry_run,
owners_database = owners.Database(repository_root, open, os.path) owners_database = owners.Database(repository_root, open, os.path)
owners_database.load_data_needed_for([f for _, f in files]) owners_database.load_data_needed_for([f for _, f in files])
files_split_by_owners = GetFilesSplitByOwners(owners_database, files) files_split_by_owners = GetFilesSplitByOwners(files)
num_cls = len(files_split_by_owners) num_cls = len(files_split_by_owners)
print('Will split current branch (' + refactor_branch + ') into ' + print('Will split current branch (' + refactor_branch + ') into ' +
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment