mercurial/manifest.py
changeset 31255 959ebff3505a
parent 31153 5cab44fd1257
child 31294 c134a33b1d73
equal deleted inserted replaced
31254:2140e12d3258 31255:959ebff3505a
   443         return self._lm.iterkeys()
   443         return self._lm.iterkeys()
   444 
   444 
   445     def keys(self):
   445     def keys(self):
   446         return list(self.iterkeys())
   446         return list(self.iterkeys())
   447 
   447 
   448     def filesnotin(self, m2):
   448     def filesnotin(self, m2, match=None):
   449         '''Set of files in this manifest that are not in the other'''
   449         '''Set of files in this manifest that are not in the other'''
       
   450         if match:
       
   451             m1 = self.matches(match)
       
   452             m2 = m2.matches(match)
       
   453             return m1.filesnotin(m2)
   450         diff = self.diff(m2)
   454         diff = self.diff(m2)
   451         files = set(filepath
   455         files = set(filepath
   452                     for filepath, hashflags in diff.iteritems()
   456                     for filepath, hashflags in diff.iteritems()
   453                     if hashflags[1][0] is None)
   457                     if hashflags[1][0] is None)
   454         return files
   458         return files
   521 
   525 
   522         m = manifestdict()
   526         m = manifestdict()
   523         m._lm = self._lm.filtercopy(match)
   527         m._lm = self._lm.filtercopy(match)
   524         return m
   528         return m
   525 
   529 
   526     def diff(self, m2, clean=False):
   530     def diff(self, m2, match=None, clean=False):
   527         '''Finds changes between the current manifest and m2.
   531         '''Finds changes between the current manifest and m2.
   528 
   532 
   529         Args:
   533         Args:
   530           m2: the manifest to which this manifest should be compared.
   534           m2: the manifest to which this manifest should be compared.
   531           clean: if true, include files unchanged between these manifests
   535           clean: if true, include files unchanged between these manifests
   536         nodeid in the current/other manifest and fl1/fl2 is the flag
   540         nodeid in the current/other manifest and fl1/fl2 is the flag
   537         in the current/other manifest. Where the file does not exist,
   541         in the current/other manifest. Where the file does not exist,
   538         the nodeid will be None and the flags will be the empty
   542         the nodeid will be None and the flags will be the empty
   539         string.
   543         string.
   540         '''
   544         '''
       
   545         if match:
       
   546             m1 = self.matches(match)
       
   547             m2 = m2.matches(match)
       
   548             return m1.diff(m2, clean=clean)
   541         return self._lm.diff(m2._lm, clean)
   549         return self._lm.diff(m2._lm, clean)
   542 
   550 
   543     def setflag(self, key, flag):
   551     def setflag(self, key, flag):
   544         self._lm[key] = self[key], flag
   552         self._lm[key] = self[key], flag
   545 
   553 
   904                 copy._copyfunc = _copyfunc
   912                 copy._copyfunc = _copyfunc
   905         else:
   913         else:
   906             copy._copyfunc = self._copyfunc
   914             copy._copyfunc = self._copyfunc
   907         return copy
   915         return copy
   908 
   916 
   909     def filesnotin(self, m2):
   917     def filesnotin(self, m2, match=None):
   910         '''Set of files in this manifest that are not in the other'''
   918         '''Set of files in this manifest that are not in the other'''
       
   919         if match:
       
   920             m1 = self.matches(match)
       
   921             m2 = m2.matches(match)
       
   922             return m1.filesnotin(m2)
       
   923 
   911         files = set()
   924         files = set()
   912         def _filesnotin(t1, t2):
   925         def _filesnotin(t1, t2):
   913             if t1._node == t2._node and not t1._dirty and not t2._dirty:
   926             if t1._node == t2._node and not t1._dirty and not t2._dirty:
   914                 return
   927                 return
   915             t1._load()
   928             t1._load()
  1023 
  1036 
  1024         if not ret._isempty():
  1037         if not ret._isempty():
  1025             ret._dirty = True
  1038             ret._dirty = True
  1026         return ret
  1039         return ret
  1027 
  1040 
  1028     def diff(self, m2, clean=False):
  1041     def diff(self, m2, match=None, clean=False):
  1029         '''Finds changes between the current manifest and m2.
  1042         '''Finds changes between the current manifest and m2.
  1030 
  1043 
  1031         Args:
  1044         Args:
  1032           m2: the manifest to which this manifest should be compared.
  1045           m2: the manifest to which this manifest should be compared.
  1033           clean: if true, include files unchanged between these manifests
  1046           clean: if true, include files unchanged between these manifests
  1038         nodeid in the current/other manifest and fl1/fl2 is the flag
  1051         nodeid in the current/other manifest and fl1/fl2 is the flag
  1039         in the current/other manifest. Where the file does not exist,
  1052         in the current/other manifest. Where the file does not exist,
  1040         the nodeid will be None and the flags will be the empty
  1053         the nodeid will be None and the flags will be the empty
  1041         string.
  1054         string.
  1042         '''
  1055         '''
       
  1056         if match:
       
  1057             m1 = self.matches(match)
       
  1058             m2 = m2.matches(match)
       
  1059             return m1.diff(m2, clean=clean)
  1043         result = {}
  1060         result = {}
  1044         emptytree = treemanifest()
  1061         emptytree = treemanifest()
  1045         def _diff(t1, t2):
  1062         def _diff(t1, t2):
  1046             if t1._node == t2._node and not t1._dirty and not t2._dirty:
  1063             if t1._node == t2._node and not t1._dirty and not t2._dirty:
  1047                 return
  1064                 return