Mercurial > hg
annotate hgext/fetch.py @ 42130:a362b0b95e42
pull: improved message issued in case of failed update
When running `hg pull --update`, the update step may fail. Nothing in the error
message help to understand the abort is related to the secondary step (update)
instead of the primary step (pull).
We now add some information to the error message to clarify it comes from the
update part. It is useful in various situation (uncommitted changes blocking the
update, update to hidden destination, etc...)
The pull output is updated from:
$ hg pull ../repo-Bob --rev 956063ac4557 --update
pulling from ../repo-Bob
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 0 changes to 2 files (+1 heads)
(2 other changesets obsolete on arrival)
abort: filtered revision '6'!
to:
$ hg pull ../repo-Bob --rev 956063ac4557 --update
pulling from ../repo-Bob
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 0 changes to 2 files (+1 heads)
(2 other changesets obsolete on arrival)
abort: cannot update to target: filtered revision '6'!
(I am not sure why the actual error, "filtered revision '6'", is not using the
more modern format mentioning the obsolescence fate of '6')
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 05 Apr 2019 14:35:33 +0200 |
parents | 5cb8158a61f7 |
children | 2372284d9457 |
rev | line source |
---|---|
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 |
29121
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
10 from __future__ import absolute_import |
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
11 |
3891 | 12 from mercurial.i18n import _ |
29121
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
13 from mercurial.node import ( |
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
14 short, |
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
15 ) |
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
16 from mercurial import ( |
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
17 cmdutil, |
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
18 error, |
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
19 exchange, |
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
20 hg, |
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
21 lock, |
34977
a56bf5591918
py3: handle keyword arguments in hgext/fetch.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33013
diff
changeset
|
22 pycompat, |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
29841
diff
changeset
|
23 registrar, |
29121
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
24 util, |
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
25 ) |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
34977
diff
changeset
|
26 from mercurial.utils import dateutil |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
27 |
29121
dc406c7e41d6
py3: make hgext/fetch.py use absolute_import
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28964
diff
changeset
|
28 release = lock.release |
21247
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
29 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
29841
diff
changeset
|
30 command = registrar.command(cmdtable) |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29121
diff
changeset
|
31 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24368
diff
changeset
|
32 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24368
diff
changeset
|
33 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24368
diff
changeset
|
34 # leave the attribute unspecified. |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
29121
diff
changeset
|
35 testedwith = 'ships-with-hg-core' |
16743
38caf405d010
hgext: mark all first-party extensions as such
Augie Fackler <raf@durin42.com>
parents:
16719
diff
changeset
|
36 |
21247
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
37 @command('fetch', |
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
38 [('r', 'rev', [], |
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
39 _('a specific revision you would like to pull'), _('REV')), |
33013
9c242e9fca65
fetch: remove shorthand of --edit colliding against -e/-ssh in remoteopts (BC)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32375
diff
changeset
|
40 ('', 'edit', None, _('invoke editor on commit messages')), |
21247
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
41 ('', 'force-editor', None, _('edit commit message (DEPRECATED)')), |
b1e64c6720d8
fetch: declare command using decorator
Gregory Szorc <gregory.szorc@gmail.com>
parents:
16926
diff
changeset
|
42 ('', 'switch-parent', None, _('switch parents when merging')), |
32375
04baab18d60a
commands: move templates of common command options to cmdutil (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32337
diff
changeset
|
43 ] + cmdutil.commitopts + cmdutil.commitopts2 + cmdutil.remoteopts, |
40293
c303d65d2e34
help: assigning categories to existing commands
rdamazio@google.com
parents:
36607
diff
changeset
|
44 _('hg fetch [SOURCE]'), |
c303d65d2e34
help: assigning categories to existing commands
rdamazio@google.com
parents:
36607
diff
changeset
|
45 helpcategory=command.CATEGORY_REMOTE_REPO_MANAGEMENT) |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
46 def fetch(ui, repo, source='default', **opts): |
7598 | 47 '''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
|
48 |
9258
1aeb22492b25
fetch: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
49 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
|
50 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
|
51 |
9258
1aeb22492b25
fetch: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
52 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
|
53 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
|
54 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
|
55 changes. |
6206
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
56 |
16476
83622954b64d
fetch: remove confusing reference to "authoritative" changes
Kevin Bullock <kbullock@ringworld.org>
parents:
16091
diff
changeset
|
57 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
|
58 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
|
59 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
|
60 |
10973
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10580
diff
changeset
|
61 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
|
62 |
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
63 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
|
64 ''' |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
65 |
34977
a56bf5591918
py3: handle keyword arguments in hgext/fetch.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
33013
diff
changeset
|
66 opts = pycompat.byteskwargs(opts) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
67 date = opts.get('date') |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
68 if date: |
36607
c6061cadb400
util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents:
34977
diff
changeset
|
69 opts['date'] = dateutil.parsedate(date) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
70 |
41399
5cb8158a61f7
cleanup: use p1() instead of parents() when we only need the first parent
Martin von Zweigbergk <martinvonz@google.com>
parents:
40293
diff
changeset
|
71 parent = repo.dirstate.p1() |
7049
6489ee64b522
fetch: use dirstate branch instead of first parents
Sune Foldager <cryo@cyanite.org>
parents:
7007
diff
changeset
|
72 branch = repo.dirstate.branch() |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
73 try: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
74 branchnode = repo.branchtip(branch) |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
75 except error.RepoLookupError: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
76 branchnode = None |
7049
6489ee64b522
fetch: use dirstate branch instead of first parents
Sune Foldager <cryo@cyanite.org>
parents:
7007
diff
changeset
|
77 if parent != branchnode: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
78 raise error.Abort(_('working directory not at branch tip'), |
28964
9dcc9ed26d33
fetch: use single quotes around command hint
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
79 hint=_("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
|
80 |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
81 wlock = lock = None |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
82 try: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
83 wlock = repo.wlock() |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
84 lock = repo.lock() |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
85 |
22676
a014fdc97154
fetch: use cmdutil.bailifchanged()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22000
diff
changeset
|
86 cmdutil.bailifchanged(repo) |
a014fdc97154
fetch: use cmdutil.bailifchanged()
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22000
diff
changeset
|
87 |
7854
423b4482c5cb
fetch: do not count inactive branches when inferring a merge
Benjamin Pollack <benjamin@bitquabit.com>
parents:
7598
diff
changeset
|
88 bheads = repo.branchheads(branch) |
423b4482c5cb
fetch: do not count inactive branches when inferring a merge
Benjamin Pollack <benjamin@bitquabit.com>
parents:
7598
diff
changeset
|
89 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
|
90 if len(bheads) > 1: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
91 raise error.Abort(_('multiple heads in this branch ' |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
92 '(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
|
93 |
14556
517e1d88bf7e
hg: change various repository() users to use peer() where appropriate
Matt Mackall <mpm@selenic.com>
parents:
14076
diff
changeset
|
94 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
|
95 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
|
96 util.hidepassword(ui.expandpath(source))) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
97 revs = None |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
98 if opts['rev']: |
8532
b97e2417ae53
fetch: allow -r for remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8407
diff
changeset
|
99 try: |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
100 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
|
101 except error.CapabilityError: |
16926
cf2156932f75
fetch: lowercase abort message
Martin Geisler <mg@aragost.com>
parents:
16743
diff
changeset
|
102 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
|
103 "so a rev cannot be specified.") |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25186
diff
changeset
|
104 raise error.Abort(err) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
105 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
106 # Are there any changes at all? |
22697
6ea41d41aba1
fetch: use exchange.pull
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22676
diff
changeset
|
107 modheads = exchange.pull(repo, other, heads=revs).cgresult |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
108 if modheads == 0: |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
109 return 0 |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
110 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
111 # 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
|
112 newheads = repo.branchheads(branch) |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
113 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
|
114 if len(newheads) == 1 and len(newchildren): |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
115 if newchildren[0] != parent: |
16091
f6e9c731dd3f
fetch: use update rather than clean when updating (issue3246)
Matt Mackall <mpm@selenic.com>
parents:
15749
diff
changeset
|
116 return hg.update(repo, newchildren[0]) |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
117 else: |
12711
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
118 return 0 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
119 |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
120 # Are there more than one additional branch heads? |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
121 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
|
122 newparent = parent |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
123 if newchildren: |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
124 newparent = newchildren[0] |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
125 hg.clean(repo, newparent) |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
126 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
|
127 if len(newheads) > 1: |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
128 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
|
129 '(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
|
130 (len(newheads) - 1)) |
12711
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
131 return 1 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
132 |
15749
6b84cdcb05b9
fetch: fix unneeded commit when no merge attempted (issue2847)
Matt Mackall <mpm@selenic.com>
parents:
15748
diff
changeset
|
133 if not newheads: |
6b84cdcb05b9
fetch: fix unneeded commit when no merge attempted (issue2847)
Matt Mackall <mpm@selenic.com>
parents:
15748
diff
changeset
|
134 return 0 |
6b84cdcb05b9
fetch: fix unneeded commit when no merge attempted (issue2847)
Matt Mackall <mpm@selenic.com>
parents:
15748
diff
changeset
|
135 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
136 # 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
|
137 err = False |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
138 if newheads: |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
139 # 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
|
140 # *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
|
141 # theirs. |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
142 if opts['switch_parent']: |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
143 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
|
144 else: |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
145 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
|
146 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
|
147 (repo.changelog.rev(firstparent), |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
148 short(firstparent))) |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
149 hg.clean(repo, firstparent) |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
150 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
|
151 (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
|
152 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
|
153 |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
154 if not err: |
9183
d0225fa2f6c4
do not translate commit messages
Martin Geisler <mg@lazybytes.net>
parents:
8894
diff
changeset
|
155 # 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
|
156 message = (cmdutil.logmessage(ui, opts) or |
9183
d0225fa2f6c4
do not translate commit messages
Martin Geisler <mg@lazybytes.net>
parents:
8894
diff
changeset
|
157 ('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
|
158 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
|
159 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
|
160 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
|
161 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
|
162 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
|
163 '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
|
164 short(n))) |
6206
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
165 |
12711
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
166 return err |
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
167 |
2825
0496cfb05243
fetch: lock repo across pull and commit
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2824
diff
changeset
|
168 finally: |
8112
6ee71f78497c
switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7991
diff
changeset
|
169 release(lock, wlock) |