Mercurial > hg
comparison hgext/fetch.py @ 2830:49988d9f0758
Merge with crew, fix most tests
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Wed, 09 Aug 2006 13:55:18 -0500 |
parents | 30f59f4a327e 2a0c599f7bb0 |
children | 3b21013e7680 |
comparison
equal
deleted
inserted
replaced
2815:4870f795f681 | 2830:49988d9f0758 |
---|---|
22 | 22 |
23 def postincoming(other, modheads): | 23 def postincoming(other, modheads): |
24 if modheads == 0: | 24 if modheads == 0: |
25 return 0 | 25 return 0 |
26 if modheads == 1: | 26 if modheads == 1: |
27 return hg.update(repo, repo.changelog.tip()) | 27 return hg.update(repo, repo.changelog.tip(), wlock=wlock) |
28 newheads = repo.heads(parent) | 28 newheads = repo.heads(parent) |
29 newchildren = [n for n in repo.heads(parent) if n != parent] | 29 newchildren = [n for n in repo.heads(parent) if n != parent] |
30 newparent = parent | 30 newparent = parent |
31 if newchildren: | 31 if newchildren: |
32 hg.update(repo, newchildren[0]) | |
33 newparent = newchildren[0] | 32 newparent = newchildren[0] |
33 hg.update(repo, newparent, wlock=wlock) | |
34 newheads = [n for n in repo.heads() if n != newparent] | 34 newheads = [n for n in repo.heads() if n != newparent] |
35 err = False | 35 err = False |
36 if newheads: | 36 if newheads: |
37 ui.status(_('merging with new head %d:%s\n') % | 37 ui.status(_('merging with new head %d:%s\n') % |
38 (repo.changelog.rev(newheads[0]), short(newheads[0]))) | 38 (repo.changelog.rev(newheads[0]), short(newheads[0]))) |
39 err = hg.merge(repo, newheads[0], remind=False) | 39 err = hg.merge(repo, newheads[0], remind=False, wlock=wlock) |
40 if not err and len(newheads) > 1: | 40 if not err and len(newheads) > 1: |
41 ui.status(_('not merging with %d other new heads ' | 41 ui.status(_('not merging with %d other new heads ' |
42 '(use "hg heads" and "hg merge" to merge them)') % | 42 '(use "hg heads" and "hg merge" to merge them)') % |
43 (len(newheads) - 1)) | 43 (len(newheads) - 1)) |
44 if not err: | 44 if not err: |
45 mod, add, rem = repo.status()[:3] | 45 mod, add, rem = repo.status(wlock=wlock)[:3] |
46 message = (commands.logmessage(opts) or | 46 message = (commands.logmessage(opts) or |
47 (_('Automated merge with %s') % other.url())) | 47 (_('Automated merge with %s') % other.url())) |
48 n = repo.commit(mod + add + rem, message, | 48 n = repo.commit(mod + add + rem, message, |
49 opts['user'], opts['date'], | 49 opts['user'], opts['date'], lock=lock, wlock=wlock, |
50 force_editor=opts.get('force_editor')) | 50 force_editor=opts.get('force_editor')) |
51 ui.status(_('new changeset %d:%s merges remote changes ' | 51 ui.status(_('new changeset %d:%s merges remote changes ' |
52 'with local\n') % (repo.changelog.rev(n), | 52 'with local\n') % (repo.changelog.rev(n), |
53 short(n))) | 53 short(n))) |
54 def pull(): | 54 def pull(): |
55 commands.setremoteconfig(ui, opts) | 55 commands.setremoteconfig(ui, opts) |
56 | 56 |
57 other = hg.repository(ui, ui.expandpath(source)) | 57 other = hg.repository(ui, ui.expandpath(source)) |
58 ui.status(_('pulling from %s\n') % source) | 58 ui.status(_('pulling from %s\n') % ui.expandpath(source)) |
59 revs = None | 59 revs = None |
60 if opts['rev'] and not other.local(): | 60 if opts['rev'] and not other.local(): |
61 raise util.Abort(_("fetch -r doesn't work for remote repositories yet")) | 61 raise util.Abort(_("fetch -r doesn't work for remote repositories yet")) |
62 elif opts['rev']: | 62 elif opts['rev']: |
63 revs = [other.lookup(rev) for rev in opts['rev']] | 63 revs = [other.lookup(rev) for rev in opts['rev']] |
64 modheads = repo.pull(other, heads=revs) | 64 modheads = repo.pull(other, heads=revs, lock=lock) |
65 return postincoming(other, modheads) | 65 return postincoming(other, modheads) |
66 | 66 |
67 parent, p2 = repo.dirstate.parents() | 67 parent, p2 = repo.dirstate.parents() |
68 if parent != repo.changelog.tip(): | 68 if parent != repo.changelog.tip(): |
69 raise util.Abort(_('working dir not at tip ' | 69 raise util.Abort(_('working dir not at tip ' |
70 '(use "hg update" to check out tip)')) | 70 '(use "hg update" to check out tip)')) |
71 if p2 != nullid: | 71 if p2 != nullid: |
72 raise util.Abort(_('outstanding uncommitted merge')) | 72 raise util.Abort(_('outstanding uncommitted merge')) |
73 mod, add, rem = repo.status()[:3] | 73 wlock = repo.wlock() |
74 if mod or add or rem: | 74 lock = repo.lock() |
75 raise util.Abort(_('outstanding uncommitted changes')) | 75 try: |
76 if len(repo.heads()) > 1: | 76 mod, add, rem = repo.status(wlock=wlock)[:3] |
77 raise util.Abort(_('multiple heads in this repository ' | 77 if mod or add or rem: |
78 '(use "hg heads" and "hg merge" to merge them)')) | 78 raise util.Abort(_('outstanding uncommitted changes')) |
79 return pull() | 79 if len(repo.heads()) > 1: |
80 raise util.Abort(_('multiple heads in this repository ' | |
81 '(use "hg heads" and "hg merge" to merge)')) | |
82 return pull() | |
83 finally: | |
84 lock.release() | |
85 wlock.release() | |
80 | 86 |
81 cmdtable = { | 87 cmdtable = { |
82 'fetch': | 88 'fetch': |
83 (fetch, | 89 (fetch, |
84 [('e', 'ssh', '', _('specify ssh command to use')), | 90 [('e', 'ssh', '', _('specify ssh command to use')), |