Show More
@@ -1854,51 +1854,40 b' class workingctx(committablectx):' | |||
|
1854 | 1854 | |
|
1855 | 1855 | def _poststatusfixup(self, status, fixup): |
|
1856 | 1856 | """update dirstate for files that are actually clean""" |
|
1857 | dirstate = self._repo.dirstate | |
|
1857 | 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 | 1871 | try: |
|
1860 | oldid = self._repo.dirstate.identity() | |
|
1861 | ||
|
1862 | 1872 | # updating the dirstate is optional |
|
1863 | 1873 | # so we don't wait on the lock |
|
1864 | 1874 | # wlock can invalidate the dirstate, so cache normal _after_ |
|
1865 | 1875 | # taking the lock |
|
1876 | pre_dirty = dirstate._dirty | |
|
1866 | 1877 | with self._repo.wlock(False): |
|
1867 |
|
|
|
1868 |
|
|
|
1869 |
|
|
|
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.) | |
|
1878 | assert self._repo.dirstate is dirstate | |
|
1879 | post_dirty = dirstate._dirty | |
|
1880 | if post_dirty: | |
|
1886 | 1881 | tr = self._repo.currenttransaction() |
|
1887 |
|
|
|
1888 | ||
|
1889 | if poststatus: | |
|
1890 |
|
|
|
1891 | ps(self, status) | |
|
1892 |
|
|
|
1893 | # in this case, writing changes out breaks | |
|
1894 |
|
|
|
1895 | # already changed simultaneously after last | |
|
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() | |
|
1882 | dirstate.write(tr) | |
|
1883 | elif pre_dirty: | |
|
1884 | # the wlock grabbing detected that dirtate changes | |
|
1885 | # needed to be dropped | |
|
1886 | m = b'skip updating dirstate: identity mismatch\n' | |
|
1887 | self._repo.ui.debug(m) | |
|
1888 | if poststatus: | |
|
1889 | for ps in poststatus: | |
|
1890 | ps(self, status) | |
|
1902 | 1891 | except error.LockError: |
|
1903 | 1892 | pass |
|
1904 | 1893 | finally: |
General Comments 0
You need to be logged in to leave comments.
Login now