Highlight projects which still have sync failures during 'repo status'

Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/project.py b/project.py
index 3b9535e..fd3f0b8 100644
--- a/project.py
+++ b/project.py
@@ -162,6 +162,7 @@
     self.project   = self.printer('header',    attr = 'bold')
     self.branch    = self.printer('header',    attr = 'bold')
     self.nobranch  = self.printer('nobranch',  fg = 'red')
+    self.important = self.printer('important', fg = 'red')
 
     self.added     = self.printer('added',     fg = 'green')
     self.changed   = self.printer('changed',   fg = 'red')
@@ -244,6 +245,13 @@
       return b[len(R_HEADS):]
     return None
 
+  def IsRebaseInProgress(self):
+    w = self.worktree
+    g = os.path.join(w, '.git')
+    return os.path.exists(os.path.join(g, 'rebase-apply')) \
+        or os.path.exists(os.path.join(g, 'rebase-merge')) \
+        or os.path.exists(os.path.join(w, '.dotest'))
+    
   def IsDirty(self, consider_untracked=True):
     """Is the working directory modified in some way?
     """
@@ -341,10 +349,11 @@
                                '--unmerged',
                                '--ignore-missing',
                                '--refresh')
+    rb = self.IsRebaseInProgress()
     di = self.work_git.DiffZ('diff-index', '-M', '--cached', HEAD)
     df = self.work_git.DiffZ('diff-files')
     do = self.work_git.LsOthers()
-    if not di and not df and not do:
+    if not rb and not di and not df and not do:
       return 'CLEAN'
 
     out = StatusColoring(self.config)
@@ -357,6 +366,10 @@
       out.branch('branch %s', branch)
     out.nl()
 
+    if rb:
+      out.important('prior sync failed; rebase still in progress')
+      out.nl()
+
     paths = list()
     paths.extend(di.keys())
     paths.extend(df.keys())
@@ -611,8 +624,7 @@
       # Currently on a detached HEAD.  The user is assumed to
       # not have any local modifications worth worrying about.
       #
-      if os.path.exists(os.path.join(self.worktree, '.dotest')) \
-      or os.path.exists(os.path.join(self.worktree, '.git', 'rebase-apply')):
+      if self.IsRebaseInProgress():
         syncbuf.fail(self, _PriorSyncFailedError())
         return