mercurial/context.py
changeset 23755 d43948a910a5
parent 23731 ccbaa2ed11a4
child 23757 b5346480a490
equal deleted inserted replaced
23754:ed645dc672e5 23755:d43948a910a5
   133         if self.rev() is not None and self.rev() < other.rev():
   133         if self.rev() is not None and self.rev() < other.rev():
   134             self.manifest()
   134             self.manifest()
   135         mf1 = other._manifestmatches(match, s)
   135         mf1 = other._manifestmatches(match, s)
   136         mf2 = self._manifestmatches(match, s)
   136         mf2 = self._manifestmatches(match, s)
   137 
   137 
   138         modified, added, clean = [], [], []
   138         modified, added = [], []
       
   139         removed = []
       
   140         clean = set()
   139         deleted, unknown, ignored = s.deleted, s.unknown, s.ignored
   141         deleted, unknown, ignored = s.deleted, s.unknown, s.ignored
   140         deletedset = set(deleted)
   142         deletedset = set(deleted)
   141         withflags = mf1.withflags() | mf2.withflags()
   143         d = mf1.diff(mf2)
   142         for fn, mf2node in mf2.iteritems():
   144         for fn, ((node1, flag1), (node2, flag2)) in d.iteritems():
   143             if fn in deletedset:
   145             if fn in deletedset:
   144                 continue
   146                 continue
   145             if fn in mf1:
   147             if node1 is None:
   146                 if ((fn in withflags and mf1.flags(fn) != mf2.flags(fn)) or
   148                 added.append(fn)
   147                      (mf1[fn] != mf2node and
   149             elif node2 is None:
   148                       (mf2node != _newnode or self[fn].cmp(other[fn])))):
   150                 removed.append(fn)
   149                     modified.append(fn)
   151             elif node2 != _newnode:
   150                 elif listclean:
   152                 # The file was not a new file in mf2, so an entry
   151                     clean.append(fn)
   153                 # from diff is really a difference.
   152                 del mf1[fn]
   154                 modified.append(fn)
       
   155             elif self[fn].cmp(other[fn]):
       
   156                 # node2 was newnode, but the working file doesn't
       
   157                 # match the one in mf1.
       
   158                 modified.append(fn)
   153             else:
   159             else:
   154                 added.append(fn)
   160                 clean.add(fn)
   155         removed = mf1.keys()
   161         if listclean:
       
   162             nondiff = (set(mf1) | set(mf2)) - set(d)
       
   163             clean = list((clean | nondiff) - deletedset)
       
   164         else:
       
   165             clean = []
       
   166 
   156         if removed:
   167         if removed:
   157             # need to filter files if they are already reported as removed
   168             # need to filter files if they are already reported as removed
   158             unknown = [fn for fn in unknown if fn not in mf1]
   169             unknown = [fn for fn in unknown if fn not in mf1]
   159             ignored = [fn for fn in ignored if fn not in mf1]
   170             ignored = [fn for fn in ignored if fn not in mf1]
   160             # if they're deleted, don't report them as removed
   171             # if they're deleted, don't report them as removed