diff --git a/project.py b/project.py index 95403ccb..316ce7ba 100644 --- a/project.py +++ b/project.py @@ -736,27 +736,49 @@ class Project(object): return matched ## Status Display ## + def UncommitedFiles(self, get_all=True): + """Returns a list of strings, uncommitted files in the git tree. - def HasChanges(self): - """Returns true if there are uncommitted changes. + Args: + get_all: a boolean, if True - get information about all different + uncommitted files. If False - return as soon as any kind of + uncommitted files is detected. """ + details = [] self.work_git.update_index('-q', '--unmerged', '--ignore-missing', '--refresh') if self.IsRebaseInProgress(): - return True + details.append("rebase in progress") + if not get_all: + return details - if self.work_git.DiffZ('diff-index', '--cached', HEAD): - return True + changes = self.work_git.DiffZ('diff-index', '--cached', HEAD).keys() + if changes: + details.extend(changes) + if not get_all: + return details - if self.work_git.DiffZ('diff-files'): - return True + changes = self.work_git.DiffZ('diff-files').keys() + if changes: + details.extend(changes) + if not get_all: + return details - if self.work_git.LsOthers(): - return True + changes = self.work_git.LsOthers() + if changes: + details.extend(changes) - return False + return details + + def HasChanges(self): + """Returns true if there are uncommitted changes. + """ + if self.UncommitedFiles(get_all=False): + return True + else: + return False def PrintWorkTreeStatus(self, output_redir=None): """Prints the status of the repository to stdout. diff --git a/subcmds/upload.py b/subcmds/upload.py index 0ee36df1..674fc17d 100644 --- a/subcmds/upload.py +++ b/subcmds/upload.py @@ -339,13 +339,17 @@ Gerrit Code Review: http://code.google.com/p/gerrit/ self._AppendAutoList(branch, people) # Check if there are local changes that may have been forgotten - if branch.project.HasChanges(): + changes = branch.project.UncommitedFiles() + if changes: key = 'review.%s.autoupload' % branch.project.remote.review answer = branch.project.config.GetBoolean(key) # if they want to auto upload, let's not ask because it could be automated if answer is None: - sys.stdout.write('Uncommitted changes in ' + branch.project.name + ' (did you forget to amend?). Continue uploading? (y/N) ') + sys.stdout.write('Uncommitted changes in ' + branch.project.name) + sys.stdout.write(' (did you forget to amend?):\n') + sys.stdout.write('\n'.join(changes) + '\n') + sys.stdout.write('Continue uploading? (y/N) ') a = sys.stdin.readline().strip().lower() if a not in ('y', 'yes', 't', 'true', 'on'): print("skipping upload", file=sys.stderr)