Mercurial > public > mercurial-scm > hg
comparison mercurial/merge.py @ 8814:ab668c92a036
subrepo: add update/merge logic
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Mon, 15 Jun 2009 02:45:38 -0500 |
parents | af5f099d932b |
children | 3f56055ff1d7 |
comparison
equal
deleted
inserted
replaced
8813:db3c1ab0e632 | 8814:ab668c92a036 |
---|---|
5 # This software may be used and distributed according to the terms of the | 5 # This software may be used and distributed according to the terms of the |
6 # GNU General Public License version 2, incorporated herein by reference. | 6 # GNU General Public License version 2, incorporated herein by reference. |
7 | 7 |
8 from node import nullid, nullrev, hex, bin | 8 from node import nullid, nullrev, hex, bin |
9 from i18n import _ | 9 from i18n import _ |
10 import util, filemerge, copies | 10 import util, filemerge, copies, subrepo |
11 import errno, os, shutil | 11 import errno, os, shutil |
12 | 12 |
13 class mergestate(object): | 13 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): |
239 updated, merged, removed, unresolved = 0, 0, 0, 0 | 239 updated, merged, removed, unresolved = 0, 0, 0, 0 |
240 ms = mergestate(repo) | 240 ms = mergestate(repo) |
241 ms.reset(wctx.parents()[0].node()) | 241 ms.reset(wctx.parents()[0].node()) |
242 moves = [] | 242 moves = [] |
243 action.sort(key=actionkey) | 243 action.sort(key=actionkey) |
244 substate = wctx.substate # prime | |
244 | 245 |
245 # prescan for merges | 246 # prescan for merges |
246 for a in action: | 247 for a in action: |
247 f, m = a[:2] | 248 f, m = a[:2] |
248 if m == 'm': # merge | 249 if m == 'm': # merge |
249 f2, fd, flags, move = a[2:] | 250 f2, fd, flags, move = a[2:] |
251 if f == '.hgsubstate': # merged internally | |
252 continue | |
250 repo.ui.debug(_("preserving %s for resolve of %s\n") % (f, fd)) | 253 repo.ui.debug(_("preserving %s for resolve of %s\n") % (f, fd)) |
251 fcl = wctx[f] | 254 fcl = wctx[f] |
252 fco = mctx[f2] | 255 fco = mctx[f2] |
253 fca = fcl.ancestor(fco) or repo.filectx(f, fileid=nullrev) | 256 fca = fcl.ancestor(fco) or repo.filectx(f, fileid=nullrev) |
254 ms.add(fcl, fco, fca, fd, flags) | 257 ms.add(fcl, fco, fca, fd, flags) |
268 if f and f[0] == "/": | 271 if f and f[0] == "/": |
269 continue | 272 continue |
270 if m == "r": # remove | 273 if m == "r": # remove |
271 repo.ui.note(_("removing %s\n") % f) | 274 repo.ui.note(_("removing %s\n") % f) |
272 audit_path(f) | 275 audit_path(f) |
276 if f == '.hgsubstate': # subrepo states need updating | |
277 subrepo.submerge(repo, wctx, mctx, wctx) | |
273 try: | 278 try: |
274 util.unlink(repo.wjoin(f)) | 279 util.unlink(repo.wjoin(f)) |
275 except OSError, inst: | 280 except OSError, inst: |
276 if inst.errno != errno.ENOENT: | 281 if inst.errno != errno.ENOENT: |
277 repo.ui.warn(_("update failed to remove %s: %s!\n") % | 282 repo.ui.warn(_("update failed to remove %s: %s!\n") % |
278 (f, inst.strerror)) | 283 (f, inst.strerror)) |
279 removed += 1 | 284 removed += 1 |
280 elif m == "m": # merge | 285 elif m == "m": # merge |
286 if f == '.hgsubstate': # subrepo states need updating | |
287 subrepo.submerge(repo, wctx, mctx, wctx.ancestor(mctx)) | |
288 continue | |
281 f2, fd, flags, move = a[2:] | 289 f2, fd, flags, move = a[2:] |
282 r = ms.resolve(fd, wctx, mctx) | 290 r = ms.resolve(fd, wctx, mctx) |
283 if r > 0: | 291 if r > 0: |
284 unresolved += 1 | 292 unresolved += 1 |
285 else: | 293 else: |
295 flags = a[2] | 303 flags = a[2] |
296 repo.ui.note(_("getting %s\n") % f) | 304 repo.ui.note(_("getting %s\n") % f) |
297 t = mctx.filectx(f).data() | 305 t = mctx.filectx(f).data() |
298 repo.wwrite(f, t, flags) | 306 repo.wwrite(f, t, flags) |
299 updated += 1 | 307 updated += 1 |
308 if f == '.hgsubstate': # subrepo states need updating | |
309 subrepo.submerge(repo, wctx, mctx, wctx) | |
300 elif m == "d": # directory rename | 310 elif m == "d": # directory rename |
301 f2, fd, flags = a[2:] | 311 f2, fd, flags = a[2:] |
302 if f: | 312 if f: |
303 repo.ui.note(_("moving %s to %s\n") % (f, fd)) | 313 repo.ui.note(_("moving %s to %s\n") % (f, fd)) |
304 t = wctx.filectx(f).data() | 314 t = wctx.filectx(f).data() |