917 # read the manifest from node1 before the manifest from node2, |
917 # read the manifest from node1 before the manifest from node2, |
918 # so that we'll hit the manifest cache if we're going through |
918 # so that we'll hit the manifest cache if we're going through |
919 # all the revisions in parent->child order. |
919 # all the revisions in parent->child order. |
920 mf1 = mfmatches(node1) |
920 mf1 = mfmatches(node1) |
921 |
921 |
|
922 mywlock = False |
|
923 |
922 # are we comparing the working directory? |
924 # are we comparing the working directory? |
923 if not node2: |
925 if not node2: |
924 if not wlock: |
|
925 try: |
|
926 wlock = self.wlock(wait=0) |
|
927 except lock.LockException: |
|
928 wlock = None |
|
929 (lookup, modified, added, removed, deleted, unknown, |
926 (lookup, modified, added, removed, deleted, unknown, |
930 ignored, clean) = self.dirstate.status(files, match, |
927 ignored, clean) = self.dirstate.status(files, match, |
931 list_ignored, list_clean) |
928 list_ignored, list_clean) |
932 |
929 |
933 # are we comparing working dir against its parent? |
930 # are we comparing working dir against its parent? |
940 for f in lookup: |
937 for f in lookup: |
941 if fcmp(f, getnode): |
938 if fcmp(f, getnode): |
942 modified.append(f) |
939 modified.append(f) |
943 else: |
940 else: |
944 clean.append(f) |
941 clean.append(f) |
945 if wlock is not None: |
942 if not wlock and not mywlock: |
|
943 mywlock = True |
|
944 try: |
|
945 wlock = self.wlock(wait=0) |
|
946 except lock.LockException: |
|
947 pass |
|
948 if wlock: |
946 self.dirstate.update([f], "n") |
949 self.dirstate.update([f], "n") |
947 else: |
950 else: |
948 # we are comparing working dir against non-parent |
951 # we are comparing working dir against non-parent |
949 # generate a pseudo-manifest for the working dir |
952 # generate a pseudo-manifest for the working dir |
950 # XXX: create it in dirstate.py ? |
953 # XXX: create it in dirstate.py ? |
955 mf2[f] = "" |
958 mf2[f] = "" |
956 mf2.set(f, is_exec(f), is_link(f)) |
959 mf2.set(f, is_exec(f), is_link(f)) |
957 for f in removed: |
960 for f in removed: |
958 if f in mf2: |
961 if f in mf2: |
959 del mf2[f] |
962 del mf2[f] |
|
963 |
|
964 if mywlock and wlock: |
|
965 wlock.release() |
960 else: |
966 else: |
961 # we are comparing two revisions |
967 # we are comparing two revisions |
962 mf2 = mfmatches(node2) |
968 mf2 = mfmatches(node2) |
963 |
969 |
964 if not compareworking: |
970 if not compareworking: |