Show More
@@ -1854,51 +1854,40 b' class workingctx(committablectx):' | |||||
1854 |
|
1854 | |||
1855 | def _poststatusfixup(self, status, fixup): |
|
1855 | def _poststatusfixup(self, status, fixup): | |
1856 | """update dirstate for files that are actually clean""" |
|
1856 | """update dirstate for files that are actually clean""" | |
|
1857 | dirstate = self._repo.dirstate | |||
1857 | poststatus = self._repo.postdsstatus() |
|
1858 | poststatus = self._repo.postdsstatus() | |
1858 | if fixup or poststatus or self._repo.dirstate._dirty: |
|
1859 | if fixup: | |
|
1860 | if dirstate.is_changing_parents: | |||
|
1861 | normal = lambda f, pfd: dirstate.update_file( | |||
|
1862 | f, | |||
|
1863 | p1_tracked=True, | |||
|
1864 | wc_tracked=True, | |||
|
1865 | ) | |||
|
1866 | else: | |||
|
1867 | normal = dirstate.set_clean | |||
|
1868 | for f, pdf in fixup: | |||
|
1869 | normal(f, pdf) | |||
|
1870 | if poststatus or self._repo.dirstate._dirty: | |||
1859 | try: |
|
1871 | try: | |
1860 | oldid = self._repo.dirstate.identity() |
|
|||
1861 |
|
||||
1862 | # updating the dirstate is optional |
|
1872 | # updating the dirstate is optional | |
1863 | # so we don't wait on the lock |
|
1873 | # so we don't wait on the lock | |
1864 | # wlock can invalidate the dirstate, so cache normal _after_ |
|
1874 | # wlock can invalidate the dirstate, so cache normal _after_ | |
1865 | # taking the lock |
|
1875 | # taking the lock | |
|
1876 | pre_dirty = dirstate._dirty | |||
1866 | with self._repo.wlock(False): |
|
1877 | with self._repo.wlock(False): | |
1867 |
|
|
1878 | assert self._repo.dirstate is dirstate | |
1868 |
|
|
1879 | post_dirty = dirstate._dirty | |
1869 |
|
|
1880 | if post_dirty: | |
1870 | if dirstate.is_changing_parents: |
|
|||
1871 | normal = lambda f, pfd: dirstate.update_file( |
|
|||
1872 | f, p1_tracked=True, wc_tracked=True |
|
|||
1873 | ) |
|
|||
1874 | else: |
|
|||
1875 | normal = dirstate.set_clean |
|
|||
1876 | for f, pdf in fixup: |
|
|||
1877 | normal(f, pdf) |
|
|||
1878 | # write changes out explicitly, because nesting |
|
|||
1879 | # wlock at runtime may prevent 'wlock.release()' |
|
|||
1880 | # after this block from doing so for subsequent |
|
|||
1881 | # changing files |
|
|||
1882 | # |
|
|||
1883 | # (This is outside of the (if fixup) block because the |
|
|||
1884 | # status operation itself might have updated some cache |
|
|||
1885 | # information before.) |
|
|||
1886 | tr = self._repo.currenttransaction() |
|
1881 | tr = self._repo.currenttransaction() | |
1887 |
|
|
1882 | dirstate.write(tr) | |
1888 |
|
1883 | elif pre_dirty: | ||
1889 | if poststatus: |
|
1884 | # the wlock grabbing detected that dirtate changes | |
1890 |
|
|
1885 | # needed to be dropped | |
1891 | ps(self, status) |
|
1886 | m = b'skip updating dirstate: identity mismatch\n' | |
1892 |
|
|
1887 | self._repo.ui.debug(m) | |
1893 | # in this case, writing changes out breaks |
|
1888 | if poststatus: | |
1894 |
|
|
1889 | for ps in poststatus: | |
1895 | # already changed simultaneously after last |
|
1890 | ps(self, status) | |
1896 | # caching (see also issue5584 for detail) |
|
|||
1897 | self._repo.ui.debug( |
|
|||
1898 | b'skip updating dirstate: identity mismatch\n' |
|
|||
1899 | ) |
|
|||
1900 | # throw away anything we have. |
|
|||
1901 | dirstate.invalidate() |
|
|||
1902 | except error.LockError: |
|
1891 | except error.LockError: | |
1903 | pass |
|
1892 | pass | |
1904 | finally: |
|
1893 | finally: |
General Comments 0
You need to be logged in to leave comments.
Login now