comparison hgext/imerge.py @ 5064:420e1166a876

Merge with crew
author Brendan Cully <brendan@kublai.com>
date Sat, 04 Aug 2007 09:33:10 -0700
parents 86327d13d916 34a54cc5df1b
children 12930b97a729
comparison
equal deleted inserted replaced
5063:86327d13d916 5064:420e1166a876
42 tf.extract(statusfile, self.im.repo.root) 42 tf.extract(statusfile, self.im.repo.root)
43 p1, p2 = self.im.load() 43 p1, p2 = self.im.load()
44 if self.im.repo.dirstate.parents()[0] != p1.node(): 44 if self.im.repo.dirstate.parents()[0] != p1.node():
45 hg.clean(self.im.repo, p1.node()) 45 hg.clean(self.im.repo, p1.node())
46 self.im.start(p2.node()) 46 self.im.start(p2.node())
47 tf.extractall(self.im.repo.root) 47 for tarinfo in tf:
48 tf.extract(tarinfo, self.im.repo.root)
48 self.im.load() 49 self.im.load()
49 50
50 class Imerge(object): 51 class Imerge(object):
51 def __init__(self, ui, repo): 52 def __init__(self, ui, repo):
52 self.ui = ui 53 self.ui = ui
89 def save(self): 90 def save(self):
90 lock = self.repo.lock() 91 lock = self.repo.lock()
91 92
92 if not os.path.isdir(self.path): 93 if not os.path.isdir(self.path):
93 os.mkdir(self.path) 94 os.mkdir(self.path)
94 fd = self.opener('status', 'wb') 95 statusfile = self.opener('status', 'wb')
95 96
96 out = [hex(n.node()) for n in self.wctx.parents()] 97 out = [hex(n.node()) for n in self.wctx.parents()]
97 out.append(str(len(self.conflicts))) 98 out.append(str(len(self.conflicts)))
98 for f in sorted(self.conflicts): 99 conflicts = self.conflicts.items()
99 out.append(f) 100 conflicts.sort()
100 out.extend(self.conflicts[f]) 101 for fw, fd_fo in conflicts:
102 out.append(fw)
103 out.extend(fd_fo)
101 out.extend(self.resolved) 104 out.extend(self.resolved)
102 105
103 fd.write('\0'.join(out)) 106 statusfile.write('\0'.join(out))
104 107
105 def remaining(self): 108 def remaining(self):
106 return [f for f in self.conflicts if f not in self.resolved] 109 return [f for f in self.conflicts if f not in self.resolved]
107 110
108 def filemerge(self, fn): 111 def filemerge(self, fn):
161 resolved = dict.fromkeys(self.resolved) 164 resolved = dict.fromkeys(self.resolved)
162 for fn in files: 165 for fn in files:
163 if fn not in self.conflicts: 166 if fn not in self.conflicts:
164 raise util.Abort('%s is not in the merge set' % fn) 167 raise util.Abort('%s is not in the merge set' % fn)
165 resolved[fn] = True 168 resolved[fn] = True
166 self.resolved = sorted(resolved) 169 self.resolved = resolved.keys()
170 self.resolved.sort()
167 self.save() 171 self.save()
168 return 0 172 return 0
169 173
170 def unresolve(self, files): 174 def unresolve(self, files):
171 resolved = dict.fromkeys(self.resolved) 175 resolved = dict.fromkeys(self.resolved)
172 for fn in files: 176 for fn in files:
173 if fn not in resolved: 177 if fn not in resolved:
174 raise util.Abort('%s is not resolved' % fn) 178 raise util.Abort('%s is not resolved' % fn)
175 del resolved[fn] 179 del resolved[fn]
176 self.resolved = sorted(resolved) 180 self.resolved = resolved.keys()
181 self.resolved.sort()
177 self.save() 182 self.save()
178 return 0 183 return 0
179 184
180 def pickle(self, dest): 185 def pickle(self, dest):
181 '''write current merge state to file to be resumed elsewhere''' 186 '''write current merge state to file to be resumed elsewhere'''
261 c, args = args[0], args[1:] 266 c, args = args[0], args[1:]
262 cmd = complete(c, subcmdtable.keys()) 267 cmd = complete(c, subcmdtable.keys())
263 if not cmd: 268 if not cmd:
264 raise cmdutil.UnknownCommand('imerge ' + c) 269 raise cmdutil.UnknownCommand('imerge ' + c)
265 if len(cmd) > 1: 270 if len(cmd) > 1:
266 raise cmdutil.AmbiguousCommand('imerge ' + c, sorted(cmd)) 271 cmd.sort()
272 raise cmdutil.AmbiguousCommand('imerge ' + c, cmd)
267 cmd = cmd[0] 273 cmd = cmd[0]
268 274
269 func = subcmdtable[cmd] 275 func = subcmdtable[cmd]
270 try: 276 try:
271 return func(im, *args) 277 return func(im, *args)