Chromium Code Reviews| Index: gcl.py |
| =================================================================== |
| --- gcl.py (revision 32565) |
| +++ gcl.py (working copy) |
| @@ -270,7 +270,8 @@ |
| # _SEPARATOR\n |
| # description |
| - def __init__(self, name, issue, patchset, description, files, local_root): |
| + def __init__(self, name, issue, patchset, description, files, local_root, |
| + needs_upload=False): |
| self.name = name |
| self.issue = int(issue) |
| self.patchset = int(patchset) |
| @@ -280,7 +281,11 @@ |
| self._files = files |
| self.patch = None |
| self._local_root = local_root |
| + self.needs_upload = needs_upload |
| + def NeedsUpload(self): |
| + return self.needs_upload |
| + |
| def GetFileNames(self): |
| """Returns the list of file names included in this change.""" |
| return [f[1] for f in self._files] |
| @@ -308,8 +313,12 @@ |
| def Save(self): |
| """Writes the changelist information to disk.""" |
| + if self.NeedsUpload(): |
| + needs_upload = "dirty" |
| + else: |
| + needs_upload = "clean" |
| data = ChangeInfo._SEPARATOR.join([ |
|
M-A Ruel
2009/11/22 18:06:10
We should have used json or pickle right at the st
|
| - "%d, %d" % (self.issue, self.patchset), |
| + "%d, %d, %s" % (self.issue, self.patchset, needs_upload), |
| "\n".join([f[0] + f[1] for f in self.GetFiles()]), |
| self.description]) |
| WriteFile(GetChangelistInfoFile(self.name), data) |
| @@ -427,17 +436,21 @@ |
| if not os.path.exists(info_file): |
| if fail_on_not_found: |
| ErrorExit("Changelist " + changename + " not found.") |
| - return ChangeInfo(changename, 0, 0, '', None, local_root) |
| + return ChangeInfo(changename, 0, 0, '', None, local_root, |
| + needs_upload=False) |
| split_data = ReadFile(info_file).split(ChangeInfo._SEPARATOR, 2) |
| if len(split_data) != 3: |
| ErrorExit("Changelist file %s is corrupt" % info_file) |
| - items = split_data[0].split(',') |
| + items = split_data[0].split(', ') |
| issue = 0 |
| patchset = 0 |
| + needs_upload = False |
| if items[0]: |
| issue = int(items[0]) |
| if len(items) > 1: |
| patchset = int(items[1]) |
| + if len(items) > 2: |
| + needs_upload = (items[2] == "dirty") |
| files = [] |
| for line in split_data[1].splitlines(): |
| status = line[:7] |
| @@ -459,7 +472,7 @@ |
| save = True |
| files[files.index(item)] = (status, item[1]) |
| change_info = ChangeInfo(changename, issue, patchset, description, files, |
| - local_root) |
| + local_root, needs_upload) |
| if save: |
| change_info.Save() |
| return change_info |
| @@ -479,7 +492,8 @@ |
| 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, local_root) |
| + aggregate_change_info = ChangeInfo(changenames, 0, 0, '', None, local_root, |
| + needs_upload=False) |
| for change in changes: |
| aggregate_change_info._files += ChangeInfo.Load(change, |
| local_root, |
| @@ -979,7 +993,7 @@ |
| else: |
| override_description = None |
| - if change_info.issue: |
| + if change_info.issue and not change_info.NeedsUpload(): |
| try: |
| description = GetIssueDescription(change_info.issue) |
| except urllib2.HTTPError, err: |
| @@ -1036,13 +1050,12 @@ |
| if len(split_result) != 2: |
| ErrorExit("Don't modify the text starting with ---!\n\n" + result) |
| + # Update the CL description if it has changed. |
| new_description = split_result[0] |
| cl_files_text = split_result[1] |
| if new_description != description or override_description: |
| change_info.description = new_description |
| - if change_info.issue: |
| - # Update the Rietveld issue with the new description. |
| - change_info.UpdateRietveldDescription() |
| + change_info.needs_upload = True |
| new_cl_files = [] |
| for line in cl_files_text.splitlines(): |
| @@ -1068,6 +1081,13 @@ |
| if change_info.MissingTests(): |
| Warn("WARNING: " + MISSING_TEST_MSG) |
| + # Update the Rietveld issue. |
| + if change_info.issue and change_info.NeedsUpload(): |
| + change_info.UpdateRietveldDescription() |
| + change_info.needs_upload = False |
| + change_info.Save() |
| + |
| + |
| # Valid extensions for files we want to lint. |
| DEFAULT_LINT_REGEX = r"(.*\.cpp|.*\.cc|.*\.h)" |
| DEFAULT_LINT_IGNORE_REGEX = r"" |