##// END OF EJS Templates
merge: delay writing the mergestate during until commit is called...
Peter Arrenbrecht -
r12369:6f0d9d79 default
parent child Browse files
Show More
@@ -2990,6 +2990,8 b' def resolve(ui, repo, *pats, **opts):'
2990 2990
2991 2991 # replace filemerge's .orig file with our resolve file
2992 2992 util.rename(a + ".resolve", a + ".orig")
2993
2994 ms.commit()
2993 2995 return ret
2994 2996
2995 2997 def revert(ui, repo, *pats, **opts):
@@ -14,12 +14,14 b' class mergestate(object):'
14 14 '''track 3-way merge state of individual files'''
15 15 def __init__(self, repo):
16 16 self._repo = repo
17 self._dirty = False
17 18 self._read()
18 19 def reset(self, node=None):
19 20 self._state = {}
20 21 if node:
21 22 self._local = node
22 23 shutil.rmtree(self._repo.join("merge"), True)
24 self._dirty = False
23 25 def _read(self):
24 26 self._state = {}
25 27 try:
@@ -33,17 +35,20 b' class mergestate(object):'
33 35 except IOError, err:
34 36 if err.errno != errno.ENOENT:
35 37 raise
36 def _write(self):
37 f = self._repo.opener("merge/state", "w")
38 f.write(hex(self._local) + "\n")
39 for d, v in self._state.iteritems():
40 f.write("\0".join([d] + v) + "\n")
38 self._dirty = False
39 def commit(self):
40 if self._dirty:
41 f = self._repo.opener("merge/state", "w")
42 f.write(hex(self._local) + "\n")
43 for d, v in self._state.iteritems():
44 f.write("\0".join([d] + v) + "\n")
45 self._dirty = False
41 46 def add(self, fcl, fco, fca, fd, flags):
42 47 hash = util.sha1(fcl.path()).hexdigest()
43 48 self._repo.opener("merge/" + hash, "w").write(fcl.data())
44 49 self._state[fd] = ['u', hash, fcl.path(), fca.path(),
45 50 hex(fca.filenode()), fco.path(), flags]
46 self._write()
51 self._dirty = True
47 52 def __contains__(self, dfile):
48 53 return dfile in self._state
49 54 def __getitem__(self, dfile):
@@ -55,7 +60,7 b' class mergestate(object):'
55 60 yield f
56 61 def mark(self, dfile, state):
57 62 self._state[dfile][0] = state
58 self._write()
63 self._dirty = True
59 64 def resolve(self, dfile, wctx, octx):
60 65 if self[dfile] == 'r':
61 66 return 0
@@ -352,6 +357,7 b' def applyupdates(repo, action, wctx, mct'
352 357 elif m == "e": # exec
353 358 flags = a[2]
354 359 util.set_flags(repo.wjoin(f), 'l' in flags, 'x' in flags)
360 ms.commit()
355 361 u.progress(_('updating'), None, total=numupdates, unit='files')
356 362
357 363 return updated, merged, removed, unresolved
General Comments 0
You need to be logged in to leave comments. Login now