##// END OF EJS Templates
merge: use in-memory mergestate when using in-memory context...
Martin von Zweigbergk -
r46071:19590b12 default
parent child Browse files
Show More
@@ -2528,6 +2528,7 b' class overlayworkingctx(committablectx):'
2528 return path in self._cache
2528 return path in self._cache
2529
2529
2530 def clean(self):
2530 def clean(self):
2531 self._mergestate = None
2531 self._cache = {}
2532 self._cache = {}
2532
2533
2533 def _compact(self):
2534 def _compact(self):
@@ -2592,6 +2593,11 b' class overlayworkingctx(committablectx):'
2592 self._repo, path, parent=self, filelog=filelog
2593 self._repo, path, parent=self, filelog=filelog
2593 )
2594 )
2594
2595
2596 def mergestate(self, clean=False):
2597 if clean or self._mergestate is None:
2598 self._mergestate = mergestatemod.memmergestate(self._repo)
2599 return self._mergestate
2600
2595
2601
2596 class overlayworkingfilectx(committablefilectx):
2602 class overlayworkingfilectx(committablefilectx):
2597 """Wrap a ``workingfilectx`` but intercepts all writes into an in-memory
2603 """Wrap a ``workingfilectx`` but intercepts all writes into an in-memory
@@ -1398,7 +1398,7 b' def applyupdates('
1398 _prefetchfiles(repo, mctx, mresult)
1398 _prefetchfiles(repo, mctx, mresult)
1399
1399
1400 updated, merged, removed = 0, 0, 0
1400 updated, merged, removed = 0, 0, 0
1401 ms = mergestatemod.mergestate.clean(repo)
1401 ms = wctx.mergestate(clean=True)
1402 ms.start(wctx.p1().node(), mctx.node(), labels)
1402 ms.start(wctx.p1().node(), mctx.node(), labels)
1403
1403
1404 for f, op in pycompat.iteritems(mresult.commitinfo):
1404 for f, op in pycompat.iteritems(mresult.commitinfo):
@@ -1611,10 +1611,6 b' def applyupdates('
1611 usemergedriver = not overwrite and mergeactions and ms.mergedriver
1611 usemergedriver = not overwrite and mergeactions and ms.mergedriver
1612
1612
1613 if usemergedriver:
1613 if usemergedriver:
1614 if wctx.isinmemory():
1615 raise error.InMemoryMergeConflictsError(
1616 b"in-memory merge does not support mergedriver"
1617 )
1618 ms.commit()
1614 ms.commit()
1619 proceed = driverpreprocess(repo, ms, wctx, labels=labels)
1615 proceed = driverpreprocess(repo, ms, wctx, labels=labels)
1620 # the driver might leave some files unresolved
1616 # the driver might leave some files unresolved
@@ -1895,7 +1891,7 b' def update('
1895 if not overwrite:
1891 if not overwrite:
1896 if len(pl) > 1:
1892 if len(pl) > 1:
1897 raise error.Abort(_(b"outstanding uncommitted merge"))
1893 raise error.Abort(_(b"outstanding uncommitted merge"))
1898 ms = mergestatemod.mergestate.read(repo)
1894 ms = wc.mergestate()
1899 if list(ms.unresolved()):
1895 if list(ms.unresolved()):
1900 raise error.Abort(
1896 raise error.Abort(
1901 _(b"outstanding merge conflicts"),
1897 _(b"outstanding merge conflicts"),
@@ -801,6 +801,32 b' class mergestate(_mergestate_base):'
801 shutil.rmtree(self._repo.vfs.join(b'merge'), True)
801 shutil.rmtree(self._repo.vfs.join(b'merge'), True)
802
802
803
803
804 class memmergestate(_mergestate_base):
805 def __init__(self, repo):
806 super(memmergestate, self).__init__(repo)
807 self._backups = {}
808
809 def _make_backup(self, fctx, localkey):
810 self._backups[localkey] = fctx.data()
811
812 def _restore_backup(self, fctx, localkey, flags):
813 fctx.write(self._backups[localkey], flags)
814
815 @util.propertycache
816 def mergedriver(self):
817 configmergedriver = self._repo.ui.config(
818 b'experimental', b'mergedriver'
819 )
820 if configmergedriver:
821 raise error.InMemoryMergeConflictsError(
822 b"in-memory merge does not support mergedriver"
823 )
824 return None
825
826 def commit(self):
827 pass
828
829
804 def recordupdates(repo, actions, branchmerge, getfiledata):
830 def recordupdates(repo, actions, branchmerge, getfiledata):
805 """record merge actions to the dirstate"""
831 """record merge actions to the dirstate"""
806 # remove (must come first)
832 # remove (must come first)
General Comments 0
You need to be logged in to leave comments. Login now