equal
deleted
inserted
replaced
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 |