author | Pierre-Yves David <pierre-yves.david@fb.com> |
Wed, 17 Sep 2014 10:59:30 -0700 | |
changeset 22498 | 64673dc48931 |
parent 22000 | 20fd00ee432e |
child 22676 | a014fdc97154 |
permissions | -rw-r--r-- |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
1 |
# fetch.py - pull and merge remote changes |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
2 |
# |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
3 |
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com> |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
4 |
# |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8188
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
10263 | 6 |
# GNU General Public License version 2 or any later version. |
8228
eee2319c5895
add blank line after copyright notices and after header
Martin Geisler <mg@lazybytes.net>
parents:
8225
diff
changeset
|
7 |
|
16669
766bbe587545
fetch: mark extension as deprecated
Augie Fackler <raf@durin42.com>
parents:
16476
diff
changeset
|
8 |
'''pull, update and merge in one command (DEPRECATED)''' |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
9 |
|
3891 | 10 |
from mercurial.i18n import _ |
6211
f89fd07fc51d
Expand import * to allow Pyflakes to find problems
Joel Rosdahl <joel@rosdahl.net>
parents:
6207
diff
changeset
|
11 |
from mercurial.node import nullid, short |
14076
924c82157d46
url: move URL parsing functions into util to improve startup time
Brodie Rao <brodie@bitheap.org>
parents:
12711
diff
changeset
|
12 |
from mercurial import commands, cmdutil, hg, util, error |
8112
6ee71f78497c
switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7991
diff
changeset
|
13 |
from mercurial.lock import release |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
14 |
|
21247
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
15 |
cmdtable = {} |
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
16 |
command = cmdutil.command(cmdtable) |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
16719
diff
changeset
|
17 |
testedwith = 'internal' |
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
16719
diff
changeset
|
18 |
|
21247
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
19 |
@command('fetch', |
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
20 |
[('r', 'rev', [], |
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
21 |
_('a specific revision you would like to pull'), _('REV')), |
21952
3838b910fa6b
doc: unify help text for "--edit" option
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21406
diff
changeset
|
22 |
('e', 'edit', None, _('invoke editor on commit messages')), |
21247
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
23 |
('', 'force-editor', None, _('edit commit message (DEPRECATED)')), |
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
24 |
('', 'switch-parent', None, _('switch parents when merging')), |
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
25 |
] + commands.commitopts + commands.commitopts2 + commands.remoteopts, |
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
26 |
_('hg fetch [SOURCE]')) |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
27 |
def fetch(ui, repo, source='default', **opts): |
7598 | 28 |
'''pull changes from a remote repository, merge new changes if needed. |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
29 |
|
9258
1aeb22492b25
fetch: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
30 |
This finds all changes from the repository at the specified path |
1aeb22492b25
fetch: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
31 |
or URL and adds them to the local repository. |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
32 |
|
9258
1aeb22492b25
fetch: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
33 |
If the pulled changes add a new branch head, the head is |
1aeb22492b25
fetch: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
34 |
automatically merged, and the result of the merge is committed. |
1aeb22492b25
fetch: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
35 |
Otherwise, the working directory is updated to include the new |
1aeb22492b25
fetch: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
36 |
changes. |
6206
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
37 |
|
16476
83622954b64d
fetch: remove confusing reference to "authoritative" changes
Kevin Bullock <kbullock@ringworld.org>
parents:
16091
diff
changeset
|
38 |
When a merge is needed, the working directory is first updated to |
83622954b64d
fetch: remove confusing reference to "authoritative" changes
Kevin Bullock <kbullock@ringworld.org>
parents:
16091
diff
changeset
|
39 |
the newly pulled changes. Local changes are then merged into the |
83622954b64d
fetch: remove confusing reference to "authoritative" changes
Kevin Bullock <kbullock@ringworld.org>
parents:
16091
diff
changeset
|
40 |
pulled changes. To switch the merge order, use --switch-parent. |
6163
1f733c2f0165
Document log date ranges and mention 'hg help dates' for all commands (issue998)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6139
diff
changeset
|
41 |
|
10973
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10580
diff
changeset
|
42 |
See :hg:`help dates` for a list of formats valid for -d/--date. |
12711
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
43 |
|
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
44 |
Returns 0 on success. |
6163
1f733c2f0165
Document log date ranges and mention 'hg help dates' for all commands (issue998)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
6139
diff
changeset
|
45 |
''' |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
46 |
|
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
47 |
date = opts.get('date') |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
48 |
if date: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
49 |
opts['date'] = util.parsedate(date) |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
50 |
|
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
51 |
parent, p2 = repo.dirstate.parents() |
7049
6489ee64b522
fetch: use dirstate branch instead of first parents
Sune Foldager <cryo@cyanite.org>
parents:
7007
diff
changeset
|
52 |
branch = repo.dirstate.branch() |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
53 |
try: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
54 |
branchnode = repo.branchtip(branch) |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
55 |
except error.RepoLookupError: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
56 |
branchnode = None |
7049
6489ee64b522
fetch: use dirstate branch instead of first parents
Sune Foldager <cryo@cyanite.org>
parents:
7007
diff
changeset
|
57 |
if parent != branchnode: |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
58 |
raise util.Abort(_('working dir not at branch tip ' |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
59 |
'(use "hg update" to check out branch tip)')) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
60 |
|
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
61 |
if p2 != nullid: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
62 |
raise util.Abort(_('outstanding uncommitted merge')) |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
63 |
|
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
64 |
wlock = lock = None |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
65 |
try: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
66 |
wlock = repo.wlock() |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
67 |
lock = repo.lock() |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
68 |
mod, add, rem, del_ = repo.status()[:4] |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
69 |
|
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
70 |
if mod or add or rem: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
71 |
raise util.Abort(_('outstanding uncommitted changes')) |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
72 |
if del_: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
73 |
raise util.Abort(_('working directory is missing some files')) |
7854
423b4482c5cb
fetch: do not count inactive branches when inferring a merge
Benjamin Pollack <benjamin@bitquabit.com>
parents:
7598
diff
changeset
|
74 |
bheads = repo.branchheads(branch) |
423b4482c5cb
fetch: do not count inactive branches when inferring a merge
Benjamin Pollack <benjamin@bitquabit.com>
parents:
7598
diff
changeset
|
75 |
bheads = [head for head in bheads if len(repo[head].children()) == 0] |
423b4482c5cb
fetch: do not count inactive branches when inferring a merge
Benjamin Pollack <benjamin@bitquabit.com>
parents:
7598
diff
changeset
|
76 |
if len(bheads) > 1: |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
77 |
raise util.Abort(_('multiple heads in this branch ' |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
78 |
'(use "hg heads ." and "hg merge" to merge)')) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
79 |
|
14556
517e1d88bf7e
hg: change various repository() users to use peer() where appropriate
Matt Mackall <mpm@selenic.com>
parents:
14076
diff
changeset
|
80 |
other = hg.peer(repo, opts, ui.expandpath(source)) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
81 |
ui.status(_('pulling from %s\n') % |
14076
924c82157d46
url: move URL parsing functions into util to improve startup time
Brodie Rao <brodie@bitheap.org>
parents:
12711
diff
changeset
|
82 |
util.hidepassword(ui.expandpath(source))) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
83 |
revs = None |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
84 |
if opts['rev']: |
8532
b97e2417ae53
fetch: allow -r for remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8407
diff
changeset
|
85 |
try: |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
86 |
revs = [other.lookup(rev) for rev in opts['rev']] |
8532
b97e2417ae53
fetch: allow -r for remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8407
diff
changeset
|
87 |
except error.CapabilityError: |
16926
cf2156932f75
fetch: lowercase abort message
Martin Geisler <mg@aragost.com>
parents:
16743
diff
changeset
|
88 |
err = _("other repository doesn't support revision lookup, " |
8532
b97e2417ae53
fetch: allow -r for remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8407
diff
changeset
|
89 |
"so a rev cannot be specified.") |
b97e2417ae53
fetch: allow -r for remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8407
diff
changeset
|
90 |
raise util.Abort(err) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
91 |
|
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
92 |
# Are there any changes at all? |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
93 |
modheads = repo.pull(other, heads=revs) |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
94 |
if modheads == 0: |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
95 |
return 0 |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
96 |
|
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
97 |
# Is this a simple fast-forward along the current branch? |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
98 |
newheads = repo.branchheads(branch) |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
99 |
newchildren = repo.changelog.nodesbetween([parent], newheads)[2] |
15748
6eb5bbaa1e73
fetch: patch cornercase in children calculation (issue2773)
Matt Mackall <mpm@selenic.com>
parents:
14635
diff
changeset
|
100 |
if len(newheads) == 1 and len(newchildren): |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
101 |
if newchildren[0] != parent: |
16091
f6e9c731dd3f
fetch: use update rather than clean when updating (issue3246)
Matt Mackall <mpm@selenic.com>
parents:
15749
diff
changeset
|
102 |
return hg.update(repo, newchildren[0]) |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
103 |
else: |
12711
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
104 |
return 0 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
105 |
|
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
106 |
# Are there more than one additional branch heads? |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
107 |
newchildren = [n for n in newchildren if n != parent] |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
108 |
newparent = parent |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
109 |
if newchildren: |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
110 |
newparent = newchildren[0] |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
111 |
hg.clean(repo, newparent) |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
112 |
newheads = [n for n in newheads if n != newparent] |
6206
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
113 |
if len(newheads) > 1: |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
114 |
ui.status(_('not merging with %d other new branch heads ' |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
115 |
'(use "hg heads ." and "hg merge" to merge them)\n') % |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
116 |
(len(newheads) - 1)) |
12711
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
117 |
return 1 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
118 |
|
15749
6b84cdcb05b9
fetch: fix unneeded commit when no merge attempted (issue2847)
Matt Mackall <mpm@selenic.com>
parents:
15748
diff
changeset
|
119 |
if not newheads: |
6b84cdcb05b9
fetch: fix unneeded commit when no merge attempted (issue2847)
Matt Mackall <mpm@selenic.com>
parents:
15748
diff
changeset
|
120 |
return 0 |
6b84cdcb05b9
fetch: fix unneeded commit when no merge attempted (issue2847)
Matt Mackall <mpm@selenic.com>
parents:
15748
diff
changeset
|
121 |
|
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
122 |
# Otherwise, let's merge. |
6206
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
123 |
err = False |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
124 |
if newheads: |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
125 |
# By default, we consider the repository we're pulling |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
126 |
# *from* as authoritative, so we merge our changes into |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
127 |
# theirs. |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
128 |
if opts['switch_parent']: |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
129 |
firstparent, secondparent = newparent, newheads[0] |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
130 |
else: |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
131 |
firstparent, secondparent = newheads[0], newparent |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
132 |
ui.status(_('updating to %d:%s\n') % |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
133 |
(repo.changelog.rev(firstparent), |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
134 |
short(firstparent))) |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
135 |
hg.clean(repo, firstparent) |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
136 |
ui.status(_('merging with %d:%s\n') % |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
137 |
(repo.changelog.rev(secondparent), short(secondparent))) |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
138 |
err = hg.merge(repo, secondparent, remind=False) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
139 |
|
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
140 |
if not err: |
9183
d0225fa2f6c4
do not translate commit messages
Martin Geisler <mg@lazybytes.net>
parents:
8894
diff
changeset
|
141 |
# we don't translate commit messages |
14635
217b7d83afc3
cmdutil, logmessage: use ui.fin when reading from '-'
Idan Kamara <idankk86@gmail.com>
parents:
14556
diff
changeset
|
142 |
message = (cmdutil.logmessage(ui, opts) or |
9183
d0225fa2f6c4
do not translate commit messages
Martin Geisler <mg@lazybytes.net>
parents:
8894
diff
changeset
|
143 |
('Automated merge with %s' % |
14076
924c82157d46
url: move URL parsing functions into util to improve startup time
Brodie Rao <brodie@bitheap.org>
parents:
12711
diff
changeset
|
144 |
util.removeauth(other.url()))) |
21406
288a793c3167
fetch: use "getcommiteditor()" instead of explicit editor choice
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21247
diff
changeset
|
145 |
editopt = opts.get('edit') or opts.get('force_editor') |
22000
20fd00ee432e
fetch: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21952
diff
changeset
|
146 |
editor = cmdutil.getcommiteditor(edit=editopt, editform='fetch') |
20fd00ee432e
fetch: pass 'editform' argument to 'cmdutil.getcommiteditor'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21952
diff
changeset
|
147 |
n = repo.commit(message, opts['user'], opts['date'], editor=editor) |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
148 |
ui.status(_('new changeset %d:%s merges remote changes ' |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
149 |
'with local\n') % (repo.changelog.rev(n), |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
150 |
short(n))) |
6206
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
151 |
|
12711
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
152 |
return err |
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
153 |
|
2825
0496cfb05243
fetch: lock repo across pull and commit
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2824
diff
changeset
|
154 |
finally: |
8112
6ee71f78497c
switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7991
diff
changeset
|
155 |
release(lock, wlock) |