Index: gcl.py |
diff --git a/gcl.py b/gcl.py |
index 9aee26812a31ce5a3fb96957ad07c9e376baf006..ea081236989d9ab77091b23d6f18e56dfb3a1fa7 100755 |
--- a/gcl.py |
+++ b/gcl.py |
@@ -265,6 +265,7 @@ class ChangeInfo(object): |
description: the description. |
files: a list of 2 tuple containing (status, filename) of changed files, |
with paths being relative to the top repository directory. |
+ local_root: Local root directory |
""" |
_SEPARATOR = "\n-----\n" |
@@ -279,7 +280,7 @@ class ChangeInfo(object): |
# _SEPARATOR\n |
# description |
- def __init__(self, name, issue, patchset, description, files): |
+ def __init__(self, name, issue, patchset, description, files, local_root): |
self.name = name |
self.issue = int(issue) |
self.patchset = int(patchset) |
@@ -288,7 +289,7 @@ class ChangeInfo(object): |
files = [] |
self._files = files |
self.patch = None |
- self._local_root = GetRepositoryRoot() |
+ self._local_root = local_root |
def GetFileNames(self): |
"""Returns the list of file names included in this change.""" |
@@ -417,7 +418,7 @@ class ChangeInfo(object): |
return False |
@staticmethod |
- def Load(changename, fail_on_not_found=True, update_status=False): |
+ def Load(changename, local_root, fail_on_not_found, update_status): |
"""Gets information about a changelist. |
Args: |
@@ -432,7 +433,7 @@ class ChangeInfo(object): |
if not os.path.exists(info_file): |
if fail_on_not_found: |
ErrorExit("Changelist " + changename + " not found.") |
- return ChangeInfo(changename, 0, 0, '', None) |
+ return ChangeInfo(changename, 0, 0, '', None, local_root) |
split_data = ReadFile(info_file).split(ChangeInfo._SEPARATOR, 2) |
if len(split_data) != 3: |
ErrorExit("Changelist file %s is corrupt" % info_file) |
@@ -452,7 +453,7 @@ class ChangeInfo(object): |
save = False |
if update_status: |
for file in files: |
- filename = os.path.join(GetRepositoryRoot(), file[1]) |
+ filename = os.path.join(local_root, file[1]) |
status_result = gclient.CaptureSVNStatus(filename) |
if not status_result or not status_result[0][0]: |
# File has been reverted. |
@@ -463,7 +464,8 @@ class ChangeInfo(object): |
if status != file[0]: |
save = True |
files[files.index(file)] = (status, file[1]) |
- change_info = ChangeInfo(changename, issue, patchset, description, files) |
+ change_info = ChangeInfo(changename, issue, patchset, description, files, |
+ local_root) |
if save: |
change_info.Save() |
return change_info |
@@ -476,16 +478,18 @@ def GetChangelistInfoFile(changename): |
return os.path.join(GetChangesDir(), changename) |
-def LoadChangelistInfoForMultiple(changenames, fail_on_not_found=True, |
- update_status=False): |
+def LoadChangelistInfoForMultiple(changenames, local_root, fail_on_not_found, |
+ update_status): |
"""Loads many changes and merge their files list into one pseudo change. |
This is mainly usefull to concatenate many changes into one for a 'gcl try'. |
""" |
changes = changenames.split(',') |
- aggregate_change_info = ChangeInfo(changenames, 0, 0, '', None) |
+ aggregate_change_info = ChangeInfo(changenames, 0, 0, '', None, local_root) |
for change in changes: |
- aggregate_change_info._files += ChangeInfo.Load(change, fail_on_not_found, |
+ aggregate_change_info._files += ChangeInfo.Load(change, |
+ local_root, |
+ fail_on_not_found, |
update_status).GetFiles() |
return aggregate_change_info |
@@ -528,7 +532,8 @@ def GetModifiedFiles(): |
# Get a list of all files in changelists. |
files_in_cl = {} |
for cl in GetCLs(): |
- change_info = ChangeInfo.Load(cl) |
+ change_info = ChangeInfo.Load(cl, GetRepositoryRoot(), |
+ fail_on_not_found=True, update_status=False) |
for status, filename in change_info.GetFiles(): |
files_in_cl[filename] = change_info.name |
@@ -597,7 +602,9 @@ def Opened(): |
for cl_name in cl_keys: |
if cl_name: |
note = "" |
- if len(ChangeInfo.Load(cl_name).GetFiles()) != len(files[cl_name]): |
+ change_info = ChangeInfo.Load(cl_name, GetRepositoryRoot(), |
+ fail_on_not_found=True, update_status=False) |
+ if len(change_info.GetFiles()) != len(files[cl_name]): |
note = " (Note: this changelist contains files outside this directory)" |
print "\n--- Changelist " + cl_name + note + ":" |
for file in files[cl_name]: |
@@ -1072,7 +1079,7 @@ def DoPresubmitChecks(change_info, committing, may_prompt): |
def Changes(): |
"""Print all the changelists and their files.""" |
for cl in GetCLs(): |
- change_info = ChangeInfo.Load(cl, True, True) |
+ change_info = ChangeInfo.Load(cl, GetRepositoryRoot(), True, True) |
print "\n--- Changelist " + change_info.name + ":" |
for file in change_info.GetFiles(): |
print "".join(file) |
@@ -1146,9 +1153,11 @@ def main(argv=None): |
# change didn't exist. All other commands require an existing change. |
fail_on_not_found = command != "try" and command != "change" |
if command == "try" and changename.find(',') != -1: |
- change_info = LoadChangelistInfoForMultiple(changename, True, True) |
+ change_info = LoadChangelistInfoForMultiple(changename, GetRepositoryRoot(), |
+ True, True) |
else: |
- change_info = ChangeInfo.Load(changename, fail_on_not_found, True) |
+ change_info = ChangeInfo.Load(changename, GetRepositoryRoot(), |
+ fail_on_not_found, True) |
if command == "change": |
if (len(argv) == 4): |