##// END OF EJS Templates
status: simplify the post status fixup phases...
marmoute -
r51025:9e1debbb default
parent child Browse files
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 dirstate = self._repo.dirstate
1878 assert self._repo.dirstate is dirstate
1868 if dirstate.identity() == oldid:
1879 post_dirty = dirstate._dirty
1869 if fixup:
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 self._repo.dirstate.write(tr)
1882 dirstate.write(tr)
1888
1883 elif pre_dirty:
1889 if poststatus:
1884 # the wlock grabbing detected that dirtate changes
1890 for ps in poststatus:
1885 # needed to be dropped
1891 ps(self, status)
1886 m = b'skip updating dirstate: identity mismatch\n'
1892 else:
1887 self._repo.ui.debug(m)
1893 # in this case, writing changes out breaks
1888 if poststatus:
1894 # consistency, because .hg/dirstate was
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