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