comparison hgext/imerge.py @ 6003:7855b88ba838

filemerge: pull file-merging code into its own module
author Matt Mackall <mpm@selenic.com>
date Sun, 03 Feb 2008 19:29:05 -0600
parents 3786ef8877d5
children f89fd07fc51d
comparison
equal deleted inserted replaced
6002:abd66eb0889e 6003:7855b88ba838
5 imerge - interactive merge 5 imerge - interactive merge
6 ''' 6 '''
7 7
8 from mercurial.i18n import _ 8 from mercurial.i18n import _
9 from mercurial.node import * 9 from mercurial.node import *
10 from mercurial import commands, cmdutil, dispatch, fancyopts, hg, merge, util 10 from mercurial import commands, cmdutil, dispatch, fancyopts
11 from mercurial import hg, filemerge, util
11 import os, tarfile 12 import os, tarfile
12 13
13 class InvalidStateFileException(Exception): pass 14 class InvalidStateFileException(Exception): pass
14 15
15 class ImergeStateFile(object): 16 class ImergeStateFile(object):
124 # already has two parents (in normal merge it doesn't yet). But 125 # already has two parents (in normal merge it doesn't yet). But
125 # this is very dirty. 126 # this is very dirty.
126 self.wctx._parents.pop() 127 self.wctx._parents.pop()
127 try: 128 try:
128 # TODO: we should probably revert the file if merge fails 129 # TODO: we should probably revert the file if merge fails
129 return merge.filemerge(self.repo, fn, fd, fo, self.wctx, p2) 130 return filemerge.filemerge(self.repo, fn, fd, fo, self.wctx, p2)
130 finally: 131 finally:
131 self.wctx._parents.append(p2) 132 self.wctx._parents.append(p2)
132 if realmerge: 133 if realmerge:
133 os.environ['HGMERGE'] = realmerge 134 os.environ['HGMERGE'] = realmerge
134 elif not interactive: 135 elif not interactive:
135 del os.environ['HGMERGE'] 136 del os.environ['HGMERGE']
136 137
137 def start(self, rev=None): 138 def start(self, rev=None):
138 _filemerge = merge.filemerge 139 _filemerge = filemerge.filemerge
139 def filemerge(repo, fw, fd, fo, wctx, mctx): 140 def filemerge_(repo, fw, fd, fo, wctx, mctx):
140 self.conflicts[fw] = (fd, fo) 141 self.conflicts[fw] = (fd, fo)
141 142
142 merge.filemerge = filemerge 143 filemerge.filemerge = filemerge_
143 commands.merge(self.ui, self.repo, rev=rev) 144 commands.merge(self.ui, self.repo, rev=rev)
144 merge.filemerge = _filemerge 145 filemerge.filemerge = _filemerge
145 146
146 self.wctx = self.repo.workingctx() 147 self.wctx = self.repo.workingctx()
147 self.save() 148 self.save()
148 149
149 def resume(self): 150 def resume(self):