Mercurial > public > mercurial-scm > hg
annotate hgext/fetch.py @ 16719:e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
For the PyPy repo with 744 branches and 843 branch heads, this brings
hg log -r default over NFS from:
CallCount Recursive Total(ms) Inline(ms) module:lineno(function)
3249 0 1.3222 1.3222 <open>
3244 0 0.6211 0.6211 <method 'close' of 'file' objects>
3243 0 0.0800 0.0800 <method 'read' of 'file' objects>
3241 0 0.0660 0.0660 <method 'seek' of 'file' objects>
3905 0 0.0476 0.0476 <zlib.decompress>
3281 0 2.6756 0.0472 mercurial.changelog:182(read)
+3281 0 2.5256 0.0453 +mercurial.revlog:881(revision)
+3276 0 0.0389 0.0196 +mercurial.changelog:28(decodeextra)
+6562 0 0.0123 0.0123 +<method 'split' of 'str' objects>
+6562 0 0.0408 0.0073 +mercurial.encoding:61(tolocal)
+3281 0 0.0054 0.0054 +<method 'index' of 'str' objects>
3241 0 2.2464 0.0456 mercurial.revlog:818(_loadchunk)
+3241 0 0.6205 0.6205 +<method 'close' of 'file' objects>
+3241 0 0.0765 0.0765 +<method 'read' of 'file' objects>
+3241 0 0.0660 0.0660 +<method 'seek' of 'file' objects>
+3241 0 1.4209 0.0135 +mercurial.store:374(__call__)
+3241 0 0.0122 0.0107 +mercurial.revlog:810(_addchunk)
3281 0 2.5256 0.0453 mercurial.revlog:881(revision)
+3280 0 0.0175 0.0175 +mercurial.revlog:305(rev)
+3281 0 2.2819 0.0119 +mercurial.revlog:847(_chunkraw)
+3281 0 0.0603 0.0083 +mercurial.revlog:945(_checkhash)
+3281 0 0.0051 0.0051 +mercurial.revlog:349(flags)
+3281 0 0.0040 0.0040 +<mercurial.mpatch.patches>
13682 0 0.0479 0.0248 <method 'decode' of 'str' objects>
+7418 0 0.0228 0.0076 +encodings.utf_8:15(decode)
+1 0 0.0003 0.0000 +encodings:71(search_function)
3248 0 1.3995 0.0246 mercurial.scmutil:218(__call__)
+3248 0 1.3222 1.3222 +<open>
+3248 0 0.0235 0.0184 +os.path:80(split)
+3248 0 0.0084 0.0068 +mercurial.scmutil:92(__call__)
Time: real 2.750 secs (user 0.680+0.000 sys 0.360+0.000)
down to:
CallCount Recursive Total(ms) Inline(ms) module:lineno(function)
55 31 0.0197 0.0163 <__import__>
+1 0 0.0006 0.0002 +mercurial.context:8(<module>)
+1 0 0.0042 0.0001 +mercurial.revlog:12(<module>)
+1 0 0.0002 0.0001 +mercurial.match:8(<module>)
+1 0 0.0003 0.0001 +mercurial.dirstate:7(<module>)
+1 0 0.0057 0.0001 +mercurial.changelog:8(<module>)
1 0 0.0117 0.0032 mercurial.localrepo:525(_readbranchcache)
+844 0 0.0015 0.0015 +<binascii.unhexlify>
+845 0 0.0010 0.0010 +<method 'split' of 'str' objects>
+843 0 0.0045 0.0009 +mercurial.encoding:61(tolocal)
+843 0 0.0004 0.0004 +<method 'setdefault' of 'dict' objects>
+1 0 0.0003 0.0003 +<method 'close' of 'file' objects>
3 0 0.0029 0.0029 <method 'read' of 'file' objects>
9 0 0.0018 0.0018 <open>
990 0 0.0017 0.0017 <binascii.unhexlify>
53 0 0.0016 0.0016 mercurial.demandimport:43(__init__)
862 0 0.0015 0.0015 <_codecs.utf_8_decode>
862 0 0.0037 0.0014 <method 'decode' of 'str' objects>
+862 0 0.0023 0.0008 +encodings.utf_8:15(decode)
981 0 0.0011 0.0011 <method 'split' of 'str' objects>
861 0 0.0046 0.0009 mercurial.encoding:61(tolocal)
+861 0 0.0037 0.0014 +<method 'decode' of 'str' objects>
862 0 0.0023 0.0008 encodings.utf_8:15(decode)
+862 0 0.0015 0.0015 +<_codecs.utf_8_decode>
4 0 0.0008 0.0008 <method 'close' of 'file' objects>
179 154 0.0202 0.0004 mercurial.demandimport:83(__getattribute__)
+36 11 0.0199 0.0003 +mercurial.demandimport:55(_load)
+72 0 0.0001 0.0001 +mercurial.demandimport:83(__getattribute__)
+36 0 0.0000 0.0000 +<getattr>
1 0 0.0015 0.0004 mercurial.tags:148(_readtagcache)
Time: real 0.060 secs (user 0.030+0.000 sys 0.010+0.000)
author | Brodie Rao <brodie@sf.io> |
---|---|
date | Sun, 13 May 2012 14:04:04 +0200 |
parents | 766bbe587545 |
children | 38caf405d010 |
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 |
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 |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
15 def fetch(ui, repo, source='default', **opts): |
7598 | 16 '''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
|
17 |
9258
1aeb22492b25
fetch: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
18 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
|
19 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
|
20 |
9258
1aeb22492b25
fetch: wrap docstrings at 70 characters
Martin Geisler <mg@lazybytes.net>
parents:
9219
diff
changeset
|
21 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
|
22 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
|
23 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
|
24 changes. |
6206
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
25 |
16476
83622954b64d
fetch: remove confusing reference to "authoritative" changes
Kevin Bullock <kbullock@ringworld.org>
parents:
16091
diff
changeset
|
26 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
|
27 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
|
28 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
|
29 |
10973
49a07f441496
Use hg role in help strings
Martin Geisler <mg@aragost.com>
parents:
10580
diff
changeset
|
30 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
|
31 |
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
32 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
|
33 ''' |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
34 |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
35 date = opts.get('date') |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
36 if date: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
37 opts['date'] = util.parsedate(date) |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
38 |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
39 parent, p2 = repo.dirstate.parents() |
7049
6489ee64b522
fetch: use dirstate branch instead of first parents
Sune Foldager <cryo@cyanite.org>
parents:
7007
diff
changeset
|
40 branch = repo.dirstate.branch() |
16719
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
41 try: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
42 branchnode = repo.branchtip(branch) |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
43 except error.RepoLookupError: |
e7bf09acd410
localrepo: add branchtip() method for faster single-branch lookups
Brodie Rao <brodie@sf.io>
parents:
16669
diff
changeset
|
44 branchnode = None |
7049
6489ee64b522
fetch: use dirstate branch instead of first parents
Sune Foldager <cryo@cyanite.org>
parents:
7007
diff
changeset
|
45 if parent != branchnode: |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
46 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
|
47 '(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
|
48 |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
49 if p2 != nullid: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
50 raise util.Abort(_('outstanding uncommitted merge')) |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
51 |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
52 wlock = lock = None |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
53 try: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
54 wlock = repo.wlock() |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
55 lock = repo.lock() |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
56 mod, add, rem, del_ = repo.status()[:4] |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
57 |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
58 if mod or add or rem: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
59 raise util.Abort(_('outstanding uncommitted changes')) |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
60 if del_: |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
61 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
|
62 bheads = repo.branchheads(branch) |
423b4482c5cb
fetch: do not count inactive branches when inferring a merge
Benjamin Pollack <benjamin@bitquabit.com>
parents:
7598
diff
changeset
|
63 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
|
64 if len(bheads) > 1: |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
65 raise util.Abort(_('multiple heads in this branch ' |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
66 '(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
|
67 |
14556
517e1d88bf7e
hg: change various repository() users to use peer() where appropriate
Matt Mackall <mpm@selenic.com>
parents:
14076
diff
changeset
|
68 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
|
69 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
|
70 util.hidepassword(ui.expandpath(source))) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
71 revs = None |
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
72 if opts['rev']: |
8532
b97e2417ae53
fetch: allow -r for remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8407
diff
changeset
|
73 try: |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
74 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
|
75 except error.CapabilityError: |
b97e2417ae53
fetch: allow -r for remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8407
diff
changeset
|
76 err = _("Other repository doesn't support revision lookup, " |
b97e2417ae53
fetch: allow -r for remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8407
diff
changeset
|
77 "so a rev cannot be specified.") |
b97e2417ae53
fetch: allow -r for remote repos
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
8407
diff
changeset
|
78 raise util.Abort(err) |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
79 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
80 # Are there any changes at all? |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
81 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
|
82 if modheads == 0: |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
83 return 0 |
6941
b2bc2d984bac
fetch: linearize code by eliminating nested functions
Dirkjan Ochtman <dirkjan@ochtman.nl>
parents:
6666
diff
changeset
|
84 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
85 # 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
|
86 newheads = repo.branchheads(branch) |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
87 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
|
88 if len(newheads) == 1 and len(newchildren): |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
89 if newchildren[0] != parent: |
16091
f6e9c731dd3f
fetch: use update rather than clean when updating (issue3246)
Matt Mackall <mpm@selenic.com>
parents:
15749
diff
changeset
|
90 return hg.update(repo, newchildren[0]) |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
91 else: |
12711
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
92 return 0 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
93 |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
94 # Are there more than one additional branch heads? |
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
95 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
|
96 newparent = parent |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
97 if newchildren: |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
98 newparent = newchildren[0] |
4917
126f527b3ba3
Make repo locks recursive, eliminate all passing of lock/wlock
Matt Mackall <mpm@selenic.com>
parents:
4915
diff
changeset
|
99 hg.clean(repo, newparent) |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
100 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
|
101 if len(newheads) > 1: |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
102 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
|
103 '(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
|
104 (len(newheads) - 1)) |
12711
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
105 return 1 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
106 |
15749
6b84cdcb05b9
fetch: fix unneeded commit when no merge attempted (issue2847)
Matt Mackall <mpm@selenic.com>
parents:
15748
diff
changeset
|
107 if not newheads: |
6b84cdcb05b9
fetch: fix unneeded commit when no merge attempted (issue2847)
Matt Mackall <mpm@selenic.com>
parents:
15748
diff
changeset
|
108 return 0 |
6b84cdcb05b9
fetch: fix unneeded commit when no merge attempted (issue2847)
Matt Mackall <mpm@selenic.com>
parents:
15748
diff
changeset
|
109 |
7007
a6b74fbb5ce0
fetch: added support for named branches
Sune Foldager <cryo@cyanite.org>
parents:
6941
diff
changeset
|
110 # 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
|
111 err = False |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
112 if newheads: |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
113 # 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
|
114 # *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
|
115 # theirs. |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
116 if opts['switch_parent']: |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
117 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
|
118 else: |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
119 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
|
120 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
|
121 (repo.changelog.rev(firstparent), |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
122 short(firstparent))) |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
123 hg.clean(repo, firstparent) |
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
124 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
|
125 (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
|
126 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
|
127 |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
128 if not err: |
9183
d0225fa2f6c4
do not translate commit messages
Martin Geisler <mg@lazybytes.net>
parents:
8894
diff
changeset
|
129 # 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
|
130 message = (cmdutil.logmessage(ui, opts) or |
9183
d0225fa2f6c4
do not translate commit messages
Martin Geisler <mg@lazybytes.net>
parents:
8894
diff
changeset
|
131 ('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
|
132 util.removeauth(other.url()))) |
8407
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8228
diff
changeset
|
133 editor = cmdutil.commiteditor |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8228
diff
changeset
|
134 if opts.get('force_editor') or opts.get('edit'): |
223000a687b0
commit: move commit editor to cmdutil, pass as function
Matt Mackall <mpm@selenic.com>
parents:
8228
diff
changeset
|
135 editor = cmdutil.commitforceeditor |
9185
d9a2e6327949
fetch: drop force arg for commit (issue1752)
Matt Mackall <mpm@selenic.com>
parents:
8894
diff
changeset
|
136 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
|
137 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
|
138 '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
|
139 short(n))) |
6206
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
140 |
12711
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
141 return err |
b885f28fa4fa
fetch: fix and document exit codes (issue2356)
Matt Mackall <mpm@selenic.com>
parents:
11321
diff
changeset
|
142 |
2825
0496cfb05243
fetch: lock repo across pull and commit
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2824
diff
changeset
|
143 finally: |
8112
6ee71f78497c
switch lock releasing in the extensions from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7991
diff
changeset
|
144 release(lock, wlock) |
2800
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
145 |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
146 cmdtable = { |
135823f37304
new extension: fetch -> combine pull and merge/update
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
diff
changeset
|
147 'fetch': |
4730
eadfaa9ec487
Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4549
diff
changeset
|
148 (fetch, |
11321
40c06bbf58be
help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
11273
diff
changeset
|
149 [('r', 'rev', [], |
40c06bbf58be
help: show value requirement and multiple occurrence of options
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
11273
diff
changeset
|
150 _('a specific revision you would like to pull'), _('REV')), |
6225
595a69a01129
fetch: rename --force-editor option to --edit, for consistency
Bryan O'Sullivan <bos@serpentine.com>
parents:
6212
diff
changeset
|
151 ('e', 'edit', None, _('edit commit message')), |
595a69a01129
fetch: rename --force-editor option to --edit, for consistency
Bryan O'Sullivan <bos@serpentine.com>
parents:
6212
diff
changeset
|
152 ('', 'force-editor', None, _('edit commit message (DEPRECATED)')), |
6206
0b6f12495276
fetch: switch the default parent used for a merge
Bryan O'Sullivan <bos@serpentine.com>
parents:
6163
diff
changeset
|
153 ('', 'switch-parent', None, _('switch parents when merging')), |
5147
c80af96943aa
refactor options from cmdtable
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
4917
diff
changeset
|
154 ] + commands.commitopts + commands.commitopts2 + commands.remoteopts, |
4730
eadfaa9ec487
Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4549
diff
changeset
|
155 _('hg fetch [SOURCE]')), |
eadfaa9ec487
Updated command tables in commands.py and hgext extensions.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4549
diff
changeset
|
156 } |