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
2829: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')),