Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/hg.py @ 46934:ebb13f9a9ba8
urlutil: add a `get_clone_path` function
We add a new function with a semantic focussed on `clone` operation (so without
an existing repository). I am not certain the return type is the best, but this
is what we need for now. Once all caller are migrated we might start thinking
about that the API should be. For now that will do.
Differential Revision: https://phab.mercurial-scm.org/D10401
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Wed, 14 Apr 2021 10:35:40 +0200 |
parents | dec31caf5fd6 |
children | 279df499511e |
rev | line source |
---|---|
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
1 # hg.py - repository classes for mercurial |
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Rapha?l Gom?s <rgomes@octobus.net>
parents:
46796
diff
changeset
|
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com> |
2859 | 4 # Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com> |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
5 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8179
diff
changeset
|
6 # This software may be used and distributed according to the terms of the |
10263 | 7 # GNU General Public License version 2 or any later version. |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
8 |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
9 from __future__ import absolute_import |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
10 |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
11 import errno |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
12 import os |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
13 import shutil |
36789
ffa3026d4196
cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents:
36725
diff
changeset
|
14 import stat |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
15 |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
16 from .i18n import _ |
46114
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45957
diff
changeset
|
17 from .node import ( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45957
diff
changeset
|
18 hex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45957
diff
changeset
|
19 nullhex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45957
diff
changeset
|
20 nullid, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45957
diff
changeset
|
21 short, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45957
diff
changeset
|
22 ) |
43089
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
23 from .pycompat import getattr |
22837
2be7d5ebd4d0
config: use the same hgrc for a cloned repo as for an uninitted repo
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
22818
diff
changeset
|
24 |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
25 from . import ( |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
26 bookmarks, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
27 bundlerepo, |
35766
72fdd99eb526
caches: make 'cachetocopy' available in scmutil
Boris Feld <boris.feld@octobus.net>
parents:
35713
diff
changeset
|
28 cacheutil, |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
29 cmdutil, |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
30 destutil, |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
31 discovery, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
32 error, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
33 exchange, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
34 extensions, |
46915
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
35 graphmod, |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
36 httppeer, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
37 localrepo, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
38 lock, |
35928
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35766
diff
changeset
|
39 logcmdutil, |
35356
a29fe459fc49
remotenames: rename related file and storage dir to logexchange
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35340
diff
changeset
|
40 logexchange, |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
41 merge as mergemod, |
44915
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44659
diff
changeset
|
42 mergestate as mergestatemod, |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
43 narrowspec, |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
44 phases, |
45392
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
45 requirements, |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
46 scmutil, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
47 sshpeer, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
48 statichttprepo, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
49 ui as uimod, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
50 unionrepo, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
51 url, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
52 util, |
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
53 verify as verifymod, |
31228
4cc3797aa59c
vfs: use 'vfs' module directly in 'mercurial.hg'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31178
diff
changeset
|
54 vfs as vfsmod, |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
55 ) |
46398
1099541b6462
hg: convert an exception to bytes in the repo creation exception handler
Matt Harbison <matt_harbison@yahoo.com>
parents:
46314
diff
changeset
|
56 from .utils import ( |
1099541b6462
hg: convert an exception to bytes in the repo creation exception handler
Matt Harbison <matt_harbison@yahoo.com>
parents:
46314
diff
changeset
|
57 hashutil, |
1099541b6462
hg: convert an exception to bytes in the repo creation exception handler
Matt Harbison <matt_harbison@yahoo.com>
parents:
46314
diff
changeset
|
58 stringutil, |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
59 urlutil, |
46398
1099541b6462
hg: convert an exception to bytes in the repo creation exception handler
Matt Harbison <matt_harbison@yahoo.com>
parents:
46314
diff
changeset
|
60 ) |
1099541b6462
hg: convert an exception to bytes in the repo creation exception handler
Matt Harbison <matt_harbison@yahoo.com>
parents:
46314
diff
changeset
|
61 |
42823
268662aac075
interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
42604
diff
changeset
|
62 |
25939
130c0b83e963
hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25761
diff
changeset
|
63 release = lock.release |
0
9117c6561b0b
Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff
changeset
|
64 |
29424
f21e0d91d386
share: move magic string to a constant
Martijn Pieters <mjpieters@fb.com>
parents:
29389
diff
changeset
|
65 # shared features |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
66 sharedbookmarks = b'bookmarks' |
29424
f21e0d91d386
share: move magic string to a constant
Martijn Pieters <mjpieters@fb.com>
parents:
29389
diff
changeset
|
67 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
68 |
2740
386f04d6ecb3
clean up hg.py: move repo constructor code into each repo module
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2738
diff
changeset
|
69 def _local(path): |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
70 path = util.expandpath(urlutil.urllocalpath(path)) |
41498
7f366dd3df1f
hg: raise Abort on invalid path
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41413
diff
changeset
|
71 |
7f366dd3df1f
hg: raise Abort on invalid path
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41413
diff
changeset
|
72 try: |
44580
6a8738dc4a01
hg: make _local() behave consistently on Python 3.8 (issue6287)
Augie Fackler <augie@google.com>
parents:
44454
diff
changeset
|
73 # we use os.stat() directly here instead of os.path.isfile() |
6a8738dc4a01
hg: make _local() behave consistently on Python 3.8 (issue6287)
Augie Fackler <augie@google.com>
parents:
44454
diff
changeset
|
74 # because the latter started returning `False` on invalid path |
6a8738dc4a01
hg: make _local() behave consistently on Python 3.8 (issue6287)
Augie Fackler <augie@google.com>
parents:
44454
diff
changeset
|
75 # exceptions starting in 3.8 and we care about handling |
6a8738dc4a01
hg: make _local() behave consistently on Python 3.8 (issue6287)
Augie Fackler <augie@google.com>
parents:
44454
diff
changeset
|
76 # invalid paths specially here. |
6a8738dc4a01
hg: make _local() behave consistently on Python 3.8 (issue6287)
Augie Fackler <augie@google.com>
parents:
44454
diff
changeset
|
77 st = os.stat(path) |
6a8738dc4a01
hg: make _local() behave consistently on Python 3.8 (issue6287)
Augie Fackler <augie@google.com>
parents:
44454
diff
changeset
|
78 isfile = stat.S_ISREG(st.st_mode) |
41498
7f366dd3df1f
hg: raise Abort on invalid path
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41413
diff
changeset
|
79 # Python 2 raises TypeError, Python 3 ValueError. |
7f366dd3df1f
hg: raise Abort on invalid path
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41413
diff
changeset
|
80 except (TypeError, ValueError) as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
81 raise error.Abort( |
46398
1099541b6462
hg: convert an exception to bytes in the repo creation exception handler
Matt Harbison <matt_harbison@yahoo.com>
parents:
46314
diff
changeset
|
82 _(b'invalid path %s: %s') % (path, stringutil.forcebytestr(e)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
83 ) |
44580
6a8738dc4a01
hg: make _local() behave consistently on Python 3.8 (issue6287)
Augie Fackler <augie@google.com>
parents:
44454
diff
changeset
|
84 except OSError: |
6a8738dc4a01
hg: make _local() behave consistently on Python 3.8 (issue6287)
Augie Fackler <augie@google.com>
parents:
44454
diff
changeset
|
85 isfile = False |
41498
7f366dd3df1f
hg: raise Abort on invalid path
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41413
diff
changeset
|
86 |
7f366dd3df1f
hg: raise Abort on invalid path
Gregory Szorc <gregory.szorc@gmail.com>
parents:
41413
diff
changeset
|
87 return isfile and bundlerepo or localrepo |
2469
2e91ba371c4c
hg.repository: make protocol table driven.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2431
diff
changeset
|
88 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
89 |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
90 def addbranchrevs(lrepo, other, branches, revs): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
91 peer = other.peer() # a courtesy to callers using a localrepo for other |
11322
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
92 hashbranch, branches = branches |
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
93 if not hashbranch and not branches: |
22818
d7b114493315
repair: use `first` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22648
diff
changeset
|
94 x = revs or None |
37481
7c848ab13eff
addbranchrevs: no longer accept revset as "revs" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
37480
diff
changeset
|
95 if revs: |
22818
d7b114493315
repair: use `first` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22648
diff
changeset
|
96 y = revs[0] |
d7b114493315
repair: use `first` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22648
diff
changeset
|
97 else: |
d7b114493315
repair: use `first` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22648
diff
changeset
|
98 y = None |
d7b114493315
repair: use `first` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22648
diff
changeset
|
99 return x, y |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24290
diff
changeset
|
100 if revs: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24290
diff
changeset
|
101 revs = list(revs) |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24290
diff
changeset
|
102 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24290
diff
changeset
|
103 revs = [] |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Guti?rrez Hermoso <jordigh@octave.org>
parents:
24290
diff
changeset
|
104 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
105 if not peer.capable(b'branchmap'): |
11322
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
106 if branches: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
107 raise error.Abort(_(b"remote branch lookup not supported")) |
11322
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
108 revs.append(hashbranch) |
10380
ee72d89c0d9f
addbranchrevs: fallback for older servers
Sune Foldager <cryo@cyanite.org>
parents:
10379
diff
changeset
|
109 return revs, revs[0] |
37640
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
110 |
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
111 with peer.commandexecutor() as e: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
112 branchmap = e.callcommand(b'branchmap', {}).result() |
11322
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
113 |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
12735
diff
changeset
|
114 def primary(branch): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
115 if branch == b'.': |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
116 if not lrepo: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
117 raise error.Abort(_(b"dirstate branch not accessible")) |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
12735
diff
changeset
|
118 branch = lrepo.dirstate.branch() |
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
12735
diff
changeset
|
119 if branch in branchmap: |
46114
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45957
diff
changeset
|
120 revs.extend(hex(r) for r in reversed(branchmap[branch])) |
11322
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
121 return True |
10365
d757bc0c7865
interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents:
10358
diff
changeset
|
122 else: |
11322
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
123 return False |
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
124 |
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
125 for branch in branches: |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
12735
diff
changeset
|
126 if not primary(branch): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
127 raise error.RepoLookupError(_(b"unknown branch '%s'") % branch) |
11322
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
128 if hashbranch: |
13047
6c375e07d673
branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents:
12735
diff
changeset
|
129 if not primary(hashbranch): |
11322
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
130 revs.append(hashbranch) |
10365
d757bc0c7865
interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents:
10358
diff
changeset
|
131 return revs, revs[0] |
d757bc0c7865
interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents:
10358
diff
changeset
|
132 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
133 |
13824
ec1695350361
hg: use url.url to parse branch names in parseurl()
Brodie Rao <brodie@bitheap.org>
parents:
13823
diff
changeset
|
134 def parseurl(path, branches=None): |
11322
3d6915f5a2bb
improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents:
11312
diff
changeset
|
135 '''parse url#branch, returning (url, (branch, branches))''' |
46908
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
136 msg = b'parseurl(...) moved to mercurial.utils.urlutil' |
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
137 util.nouideprecwarn(msg, b'6.0', stacklevel=2) |
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
138 return urlutil.parseurl(path, branches=branches) |
5177
92236732d5a1
move parseurl from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
4917
diff
changeset
|
139 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
140 |
14606
6e631c24c6d9
hg: move peerschemes back to schemes
Matt Mackall <mpm@selenic.com>
parents:
14605
diff
changeset
|
141 schemes = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
142 b'bundle': bundlerepo, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
143 b'union': unionrepo, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
144 b'file': _local, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 b'http': httppeer, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 b'https': httppeer, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
147 b'ssh': sshpeer, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
148 b'static-http': statichttprepo, |
14568
5f002e3336ba
hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents:
14556
diff
changeset
|
149 } |
5f002e3336ba
hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents:
14556
diff
changeset
|
150 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
151 |
14568
5f002e3336ba
hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents:
14556
diff
changeset
|
152 def _peerlookup(path): |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
153 u = urlutil.url(path) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
154 scheme = u.scheme or b'file' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
155 thing = schemes.get(scheme) or schemes[b'file'] |
14568
5f002e3336ba
hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents:
14556
diff
changeset
|
156 try: |
5f002e3336ba
hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents:
14556
diff
changeset
|
157 return thing(path) |
5f002e3336ba
hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents:
14556
diff
changeset
|
158 except TypeError: |
25365
4cc3fb23881d
hg: explicitly check that peer lookup object has instance() if call failed
Yuya Nishihara <yuya@tcha.org>
parents:
24945
diff
changeset
|
159 # we can't test callable(thing) because 'thing' can be an unloaded |
4cc3fb23881d
hg: explicitly check that peer lookup object has instance() if call failed
Yuya Nishihara <yuya@tcha.org>
parents:
24945
diff
changeset
|
160 # module that implements __call__ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
161 if not util.safehasattr(thing, b'instance'): |
25365
4cc3fb23881d
hg: explicitly check that peer lookup object has instance() if call failed
Yuya Nishihara <yuya@tcha.org>
parents:
24945
diff
changeset
|
162 raise |
14568
5f002e3336ba
hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents:
14556
diff
changeset
|
163 return thing |
5f002e3336ba
hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents:
14556
diff
changeset
|
164 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
165 |
14605
9f1139cf5c76
hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents:
14568
diff
changeset
|
166 def islocal(repo): |
20355
7d269e7620c4
hg: note that islocal only accepts paths pointing to repos
Siddharth Agarwal <sid0@fb.com>
parents:
20354
diff
changeset
|
167 '''return true if repo (or path pointing to repo) is local''' |
33034
071732d9c210
py3: check for bytes instead of str in isinstance
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32988
diff
changeset
|
168 if isinstance(repo, bytes): |
14605
9f1139cf5c76
hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents:
14568
diff
changeset
|
169 try: |
9f1139cf5c76
hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents:
14568
diff
changeset
|
170 return _peerlookup(repo).islocal(repo) |
9f1139cf5c76
hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents:
14568
diff
changeset
|
171 except AttributeError: |
9f1139cf5c76
hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents:
14568
diff
changeset
|
172 return False |
9f1139cf5c76
hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents:
14568
diff
changeset
|
173 return repo.local() |
9f1139cf5c76
hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents:
14568
diff
changeset
|
174 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
175 |
42109
2a3c0106ded9
import: suppress accept: header
timeless <timeless@mozdev.org>
parents:
41498
diff
changeset
|
176 def openpath(ui, path, sendaccept=True): |
17887
0e2846b2482c
url: use open and not url.open for local files (issue3624)
Siddharth Agarwal <sid0@fb.com>
parents:
17882
diff
changeset
|
177 '''open path with open if local, url.open if remote''' |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
178 pathurl = urlutil.url(path, parsequery=False, parsefragment=False) |
20354
b433b43364e4
hg.openpath: use url.islocal to tell if the path is local (issue3624)
Siddharth Agarwal <sid0@fb.com>
parents:
20185
diff
changeset
|
179 if pathurl.islocal(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
180 return util.posixfile(pathurl.localpath(), b'rb') |
17887
0e2846b2482c
url: use open and not url.open for local files (issue3624)
Siddharth Agarwal <sid0@fb.com>
parents:
17882
diff
changeset
|
181 else: |
42109
2a3c0106ded9
import: suppress accept: header
timeless <timeless@mozdev.org>
parents:
41498
diff
changeset
|
182 return url.open(ui, path, sendaccept=sendaccept) |
17887
0e2846b2482c
url: use open and not url.open for local files (issue3624)
Siddharth Agarwal <sid0@fb.com>
parents:
17882
diff
changeset
|
183 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
184 |
20858
bc56ec9e64df
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20825
diff
changeset
|
185 # a list of (ui, repo) functions called for wire peer initialization |
bc56ec9e64df
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20825
diff
changeset
|
186 wirepeersetupfuncs = [] |
bc56ec9e64df
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20825
diff
changeset
|
187 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
188 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
189 def _peerorrepo( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
190 ui, path, create=False, presetupfuncs=None, intents=None, createopts=None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
191 ): |
14605
9f1139cf5c76
hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents:
14568
diff
changeset
|
192 """return a repository object for the specified path""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
193 obj = _peerlookup(path).instance( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
194 ui, path, create, intents=intents, createopts=createopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
195 ) |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
196 ui = getattr(obj, "ui", ui) |
32418
71e735bd8170
dispatch: make request accept additional reposetups
Jun Wu <quark@fb.com>
parents:
32221
diff
changeset
|
197 for f in presetupfuncs or []: |
71e735bd8170
dispatch: make request accept additional reposetups
Jun Wu <quark@fb.com>
parents:
32221
diff
changeset
|
198 f(ui, obj) |
41006
6f2510b581a0
extensions: use ui.log() interface to provide detailed loading information
Yuya Nishihara <yuya@tcha.org>
parents:
40682
diff
changeset
|
199 ui.log(b'extension', b'- executing reposetup hooks\n') |
43238
101ae8bbfa02
cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
200 with util.timedcm('all reposetup') as allreposetupstats: |
39527
340170192874
extensions: trace the total time of running all reposetup callbacks
Boris Feld <boris.feld@octobus.net>
parents:
39524
diff
changeset
|
201 for name, module in extensions.extensions(ui): |
41006
6f2510b581a0
extensions: use ui.log() interface to provide detailed loading information
Yuya Nishihara <yuya@tcha.org>
parents:
40682
diff
changeset
|
202 ui.log(b'extension', b' - running reposetup for %s\n', name) |
39527
340170192874
extensions: trace the total time of running all reposetup callbacks
Boris Feld <boris.feld@octobus.net>
parents:
39524
diff
changeset
|
203 hook = getattr(module, 'reposetup', None) |
340170192874
extensions: trace the total time of running all reposetup callbacks
Boris Feld <boris.feld@octobus.net>
parents:
39524
diff
changeset
|
204 if hook: |
43238
101ae8bbfa02
cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
205 with util.timedcm('reposetup %r', name) as stats: |
39527
340170192874
extensions: trace the total time of running all reposetup callbacks
Boris Feld <boris.feld@octobus.net>
parents:
39524
diff
changeset
|
206 hook(ui, obj) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
207 ui.log( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
208 b'extension', b' > reposetup for %s took %s\n', name, stats |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
209 ) |
41006
6f2510b581a0
extensions: use ui.log() interface to provide detailed loading information
Yuya Nishihara <yuya@tcha.org>
parents:
40682
diff
changeset
|
210 ui.log(b'extension', b'> all reposetup took %s\n', allreposetupstats) |
20858
bc56ec9e64df
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20825
diff
changeset
|
211 if not obj.local(): |
bc56ec9e64df
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20825
diff
changeset
|
212 for f in wirepeersetupfuncs: |
bc56ec9e64df
hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20825
diff
changeset
|
213 f(ui, obj) |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
214 return obj |
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
215 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
216 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
217 def repository( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
218 ui, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 path=b'', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
220 create=False, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
221 presetupfuncs=None, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
222 intents=None, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
223 createopts=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
224 ): |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
225 """return a repository object for the specified path""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
226 peer = _peerorrepo( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
227 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
228 path, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
229 create, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
230 presetupfuncs=presetupfuncs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
231 intents=intents, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
232 createopts=createopts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
233 ) |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
234 repo = peer.local() |
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
235 if not repo: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
236 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
237 _(b"repository '%s' is not local") % (path or peer.url()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
238 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
239 return repo.filtered(b'visible') |
14605
9f1139cf5c76
hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents:
14568
diff
changeset
|
240 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
241 |
39565
089fc0db0954
hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39527
diff
changeset
|
242 def peer(uiorrepo, opts, path, create=False, intents=None, createopts=None): |
14554 | 243 '''return a repository peer for the specified path''' |
14839
510c893a726f
peer: change arg name to convey it can be a repo as well
Idan Kamara <idankk86@gmail.com>
parents:
14825
diff
changeset
|
244 rui = remoteui(uiorrepo, opts) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
245 return _peerorrepo( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
246 rui, path, create, intents=intents, createopts=createopts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
247 ).peer() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
248 |
14554 | 249 |
2719
532809ba1db5
hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2631
diff
changeset
|
250 def defaultdest(source): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
251 """return default destination of clone if none is given |
20799
069bf1b821c8
clone: add doctest for default destination
Yuya Nishihara <yuya@tcha.org>
parents:
20790
diff
changeset
|
252 |
34146
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
33713
diff
changeset
|
253 >>> defaultdest(b'foo') |
20799
069bf1b821c8
clone: add doctest for default destination
Yuya Nishihara <yuya@tcha.org>
parents:
20790
diff
changeset
|
254 'foo' |
34146
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
33713
diff
changeset
|
255 >>> defaultdest(b'/foo/bar') |
20799
069bf1b821c8
clone: add doctest for default destination
Yuya Nishihara <yuya@tcha.org>
parents:
20790
diff
changeset
|
256 'bar' |
34146
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
33713
diff
changeset
|
257 >>> defaultdest(b'/') |
20799
069bf1b821c8
clone: add doctest for default destination
Yuya Nishihara <yuya@tcha.org>
parents:
20790
diff
changeset
|
258 '' |
34146
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
33713
diff
changeset
|
259 >>> defaultdest(b'') |
20800
8253e55930a3
clone: abort if default destination has no meaningful name (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
20799
diff
changeset
|
260 '' |
34146
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
33713
diff
changeset
|
261 >>> defaultdest(b'http://example.org/') |
20800
8253e55930a3
clone: abort if default destination has no meaningful name (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
20799
diff
changeset
|
262 '' |
34146
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
33713
diff
changeset
|
263 >>> defaultdest(b'http://example.org/foo/') |
20799
069bf1b821c8
clone: add doctest for default destination
Yuya Nishihara <yuya@tcha.org>
parents:
20790
diff
changeset
|
264 'foo' |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
265 """ |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
266 path = urlutil.url(source).path |
20800
8253e55930a3
clone: abort if default destination has no meaningful name (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
20799
diff
changeset
|
267 if not path: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
268 return b'' |
20800
8253e55930a3
clone: abort if default destination has no meaningful name (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
20799
diff
changeset
|
269 return os.path.basename(os.path.normpath(path)) |
2774 | 270 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
271 |
36197
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
272 def sharedreposource(repo): |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
273 """Returns repository object for source repository of a shared repo. |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
274 |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
275 If repo is not a shared repository, returns None. |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
276 """ |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
277 if repo.sharedpath == repo.path: |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
278 return None |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
279 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
280 if util.safehasattr(repo, b'srcrepo') and repo.srcrepo: |
36197
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
281 return repo.srcrepo |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
282 |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
283 # the sharedpath always ends in the .hg; we want the path to the repo |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
284 source = repo.vfs.split(repo.sharedpath)[0] |
46908
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
285 srcurl, branches = urlutil.parseurl(source) |
36197
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
286 srcrepo = repository(repo.ui, srcurl) |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
287 repo.srcrepo = srcrepo |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
288 return srcrepo |
0fe7e39dc683
hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36087
diff
changeset
|
289 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
290 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
291 def share( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
292 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
293 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
294 dest=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
295 update=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
296 bookmarks=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
297 defaultpath=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
298 relative=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
299 ): |
8800
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
300 '''create a shared repository''' |
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
301 |
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
302 if not islocal(source): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
303 raise error.Abort(_(b'can only share local repositories')) |
8800
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
304 |
8807
8bf6eb68ddaf
share: allow dest to default to the basename of source
Matt Mackall <mpm@selenic.com>
parents:
8800
diff
changeset
|
305 if not dest: |
10099
f5e46dfb38c7
share: use defaultdest to compute unspecified destination
Brendan Cully <brendan@kublai.com>
parents:
9984
diff
changeset
|
306 dest = defaultdest(source) |
9344 | 307 else: |
308 dest = ui.expandpath(dest) | |
8807
8bf6eb68ddaf
share: allow dest to default to the basename of source
Matt Mackall <mpm@selenic.com>
parents:
8800
diff
changeset
|
309 |
36087
488e313954ea
py3: check for bytes instead of str in hg.share()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
36041
diff
changeset
|
310 if isinstance(source, bytes): |
8800
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
311 origsource = ui.expandpath(source) |
46908
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
312 source, branches = urlutil.parseurl(origsource) |
8800
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
313 srcrepo = repository(ui, source) |
10365
d757bc0c7865
interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents:
10358
diff
changeset
|
314 rev, checkout = addbranchrevs(srcrepo, srcrepo, branches, None) |
8800
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
315 else: |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
316 srcrepo = source.local() |
8800
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
317 checkout = None |
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
318 |
39854
d3d4b4b5f725
localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39853
diff
changeset
|
319 shareditems = set() |
d3d4b4b5f725
localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39853
diff
changeset
|
320 if bookmarks: |
d3d4b4b5f725
localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39853
diff
changeset
|
321 shareditems.add(sharedbookmarks) |
d3d4b4b5f725
localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39853
diff
changeset
|
322 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
323 r = repository( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
324 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
325 dest, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
326 create=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
327 createopts={ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
328 b'sharedrepo': srcrepo, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
329 b'sharedrelative': relative, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
330 b'shareditems': shareditems, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
331 }, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
332 ) |
8800
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
333 |
39854
d3d4b4b5f725
localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39853
diff
changeset
|
334 postshare(srcrepo, r, defaultpath=defaultpath) |
40622
fb490d798be0
share: reload repo after adjusting it in postshare()
Martin von Zweigbergk <martinvonz@google.com>
parents:
40505
diff
changeset
|
335 r = repository(ui, dest) |
28632
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
336 _postshareupdate(r, update, checkout=checkout) |
34815
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34805
diff
changeset
|
337 return r |
8800
971e38a9344b
add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents:
8649
diff
changeset
|
338 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
339 |
45496
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
340 def _prependsourcehgrc(repo): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
341 """copies the source repo config and prepend it in current repo .hg/hgrc |
45496
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
342 on unshare. This is only done if the share was perfomed using share safe |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
343 method where we share config of source in shares""" |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
344 srcvfs = vfsmod.vfs(repo.sharedpath) |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
345 dstvfs = vfsmod.vfs(repo.path) |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
346 |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
347 if not srcvfs.exists(b'hgrc'): |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
348 return |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
349 |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
350 currentconfig = b'' |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
351 if dstvfs.exists(b'hgrc'): |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
352 currentconfig = dstvfs.read(b'hgrc') |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
353 |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
354 with dstvfs(b'hgrc', b'wb') as fp: |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
355 sourceconfig = srcvfs.read(b'hgrc') |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
356 fp.write(b"# Config copied from shared source\n") |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
357 fp.write(sourceconfig) |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
358 fp.write(b'\n') |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
359 fp.write(currentconfig) |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
360 |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
361 |
34878
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
362 def unshare(ui, repo): |
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
363 """convert a shared repository to a normal one |
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
364 |
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
365 Copy the store data to the repo and remove the sharedpath data. |
39622
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
366 |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
367 Returns a new repository object representing the unshared repository. |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
368 |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
369 The passed repository object is not usable after this function is |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
370 called. |
34878
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
371 """ |
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
372 |
41413
bc843e251134
unshare: use context manager for locks
Martin von Zweigbergk <martinvonz@google.com>
parents:
41387
diff
changeset
|
373 with repo.lock(): |
34878
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
374 # we use locks here because if we race with commit, we |
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
375 # can end up with extra data in the cloned revlogs that's |
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
376 # not pointed to by changesets, thus causing verify to |
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
377 # fail |
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
378 destlock = copystore(ui, repo, repo.path) |
41413
bc843e251134
unshare: use context manager for locks
Martin von Zweigbergk <martinvonz@google.com>
parents:
41387
diff
changeset
|
379 with destlock or util.nullcontextmanager(): |
45496
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
380 if requirements.SHARESAFE_REQUIREMENT in repo.requirements: |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
381 # we were sharing .hg/hgrc of the share source with the current |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
382 # repo. We need to copy that while unsharing otherwise it can |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
383 # disable hooks and other checks |
b71858b42963
localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45406
diff
changeset
|
384 _prependsourcehgrc(repo) |
34878
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
385 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
386 sharefile = repo.vfs.join(b'sharedpath') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
387 util.rename(sharefile, sharefile + b'.old') |
41413
bc843e251134
unshare: use context manager for locks
Martin von Zweigbergk <martinvonz@google.com>
parents:
41387
diff
changeset
|
388 |
45406
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
389 repo.requirements.discard(requirements.SHARED_REQUIREMENT) |
034d94f8761b
requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45392
diff
changeset
|
390 repo.requirements.discard(requirements.RELATIVE_SHARED_REQUIREMENT) |
45106
a03c177a4679
scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44915
diff
changeset
|
391 scmutil.writereporequirements(repo) |
34878
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
392 |
39622
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
393 # Removing share changes some fundamental properties of the repo instance. |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
394 # So we instantiate a new repo object and operate on it rather than |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
395 # try to keep the existing repo usable. |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
396 newrepo = repository(repo.baseui, repo.root, create=False) |
34878
9f7ecc5bbc28
share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
397 |
34879
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34878
diff
changeset
|
398 # TODO: figure out how to access subrepos that exist, but were previously |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34878
diff
changeset
|
399 # removed from .hgsub |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
400 c = newrepo[b'.'] |
34879
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34878
diff
changeset
|
401 subs = c.substate |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34878
diff
changeset
|
402 for s in sorted(subs): |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34878
diff
changeset
|
403 c.sub(s).unshare() |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34878
diff
changeset
|
404 |
39622
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
405 localrepo.poisonrepository(repo) |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
406 |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
407 return newrepo |
c5e6c1ba1c79
hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39571
diff
changeset
|
408 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
409 |
39854
d3d4b4b5f725
localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39853
diff
changeset
|
410 def postshare(sourcerepo, destrepo, defaultpath=None): |
27354
bced7180db19
hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27344
diff
changeset
|
411 """Called after a new shared repo is created. |
bced7180db19
hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27344
diff
changeset
|
412 |
bced7180db19
hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27344
diff
changeset
|
413 The new repo only has a requirements file and pointer to the source. |
bced7180db19
hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27344
diff
changeset
|
414 This function configures additional shared data. |
bced7180db19
hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27344
diff
changeset
|
415 |
bced7180db19
hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27344
diff
changeset
|
416 Extensions can wrap this function and write additional entries to |
bced7180db19
hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27344
diff
changeset
|
417 destrepo/.hg/shared to indicate additional pieces of data to be shared. |
bced7180db19
hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27344
diff
changeset
|
418 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
419 default = defaultpath or sourcerepo.ui.config(b'paths', b'default') |
27354
bced7180db19
hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27344
diff
changeset
|
420 if default: |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43089
diff
changeset
|
421 template = b'[paths]\ndefault = %s\n' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
422 destrepo.vfs.write(b'hgrc', util.tonativeeol(template % default)) |
45392
77b8588dd84e
requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45106
diff
changeset
|
423 if requirements.NARROW_REQUIREMENT in sourcerepo.requirements: |
41046
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41006
diff
changeset
|
424 with destrepo.wlock(): |
41229
50ca531f1f24
narrow: copy store narrowspec to working copy immediately
Martin von Zweigbergk <martinvonz@google.com>
parents:
41046
diff
changeset
|
425 narrowspec.copytoworkingcopy(destrepo) |
27354
bced7180db19
hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27344
diff
changeset
|
426 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
427 |
28632
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
428 def _postshareupdate(repo, update, checkout=None): |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
429 """Maybe perform a working directory update after a shared repo is created. |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
430 |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
431 ``update`` can be a boolean or a revision to update to. |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
432 """ |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
433 if not update: |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
434 return |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
435 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
436 repo.ui.status(_(b"updating working directory\n")) |
28632
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
437 if update is not True: |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
438 checkout = update |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
439 for test in (checkout, b'default', b'tip'): |
28632
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
440 if test is None: |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
441 continue |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
442 try: |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
443 uprev = repo.lookup(test) |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
444 break |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
445 except error.RepoLookupError: |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
446 continue |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
447 _update(repo, uprev) |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
448 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
449 |
15078
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
450 def copystore(ui, srcrepo, destpath): |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
451 """copy files from store of srcrepo in destpath |
15078
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
452 |
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
453 returns destlock |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
454 """ |
15078
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
455 destlock = None |
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
456 try: |
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
457 hardlink = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
458 topic = _(b'linking') if hardlink else _(b'copying') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
459 with ui.makeprogress(topic, unit=_(b'files')) as progress: |
39415
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
460 num = 0 |
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
461 srcpublishing = srcrepo.publishing() |
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
462 srcvfs = vfsmod.vfs(srcrepo.sharedpath) |
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
463 dstvfs = vfsmod.vfs(destpath) |
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
464 for f in srcrepo.store.copylist(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
465 if srcpublishing and f.endswith(b'phaseroots'): |
39415
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
466 continue |
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
467 dstbase = os.path.dirname(f) |
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
468 if dstbase and not dstvfs.exists(dstbase): |
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
469 dstvfs.mkdir(dstbase) |
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
470 if srcvfs.exists(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
471 if f.endswith(b'data'): |
39415
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
472 # 'dstbase' may be empty (e.g. revlog format 0) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
473 lockfile = os.path.join(dstbase, b"lock") |
39415
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
474 # lock to avoid premature writing to the target |
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
475 destlock = lock.lock(dstvfs, lockfile) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
476 hardlink, n = util.copyfiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
477 srcvfs.join(f), dstvfs.join(f), hardlink, progress |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
478 ) |
39415
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
479 num += n |
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
480 if hardlink: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
481 ui.debug(b"linked %d files\n" % num) |
39415
ddfd80029306
hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents:
39219
diff
changeset
|
482 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
483 ui.debug(b"copied %d files\n" % num) |
15078
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
484 return destlock |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
485 except: # re-raises |
15078
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
486 release(destlock) |
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
487 raise |
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
488 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
489 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
490 def clonewithshare( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
491 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
492 peeropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
493 sharepath, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
494 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
495 srcpeer, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
496 dest, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
497 pull=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
498 rev=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
499 update=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
500 stream=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
501 ): |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
502 """Perform a clone using a shared repo. |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
503 |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
504 The store for the repository will be located at <sharepath>/.hg. The |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
505 specified revisions will be cloned or pulled from "source". A shared repo |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
506 will be created at "dest" and a working copy will be created if "update" is |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
507 True. |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
508 """ |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
509 revs = None |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
510 if rev: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
511 if not srcpeer.capable(b'lookup'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
512 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
513 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
514 b"src repository does not support " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
515 b"revision lookup and so doesn't " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
516 b"support clone by revision" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
517 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
518 ) |
37640
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
519 |
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
520 # TODO this is batchable. |
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
521 remoterevs = [] |
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
522 for r in rev: |
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
523 with srcpeer.commandexecutor() as e: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
524 remoterevs.append( |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
525 e.callcommand( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
526 b'lookup', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
527 { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
528 b'key': r, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
529 }, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
530 ).result() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
531 ) |
37640
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
532 revs = remoterevs |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
533 |
28289
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
534 # Obtain a lock before checking for or cloning the pooled repo otherwise |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
535 # 2 clients may race creating or populating it. |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
536 pooldir = os.path.dirname(sharepath) |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
537 # lock class requires the directory to exist. |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
538 try: |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
539 util.makedir(pooldir, False) |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
540 except OSError as e: |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
541 if e.errno != errno.EEXIST: |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
542 raise |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
543 |
31228
4cc3797aa59c
vfs: use 'vfs' module directly in 'mercurial.hg'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31178
diff
changeset
|
544 poolvfs = vfsmod.vfs(pooldir) |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
545 basename = os.path.basename(sharepath) |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
546 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
547 with lock.lock(poolvfs, b'%s.lock' % basename): |
28289
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
548 if os.path.exists(sharepath): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
549 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
550 _(b'(sharing from existing pooled repository %s)\n') % basename |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
551 ) |
28289
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
552 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
553 ui.status( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
554 _(b'(sharing from new pooled repository %s)\n') % basename |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
555 ) |
28289
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
556 # Always use pull mode because hardlinks in share mode don't work |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
557 # well. Never update because working copies aren't necessary in |
d493d64757eb
hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27637
diff
changeset
|
558 # share mode. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
559 clone( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
560 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
561 peeropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
562 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
563 dest=sharepath, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
564 pull=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
565 revs=rev, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
566 update=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
567 stream=stream, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
568 ) |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
569 |
30041
1779dde4c9ef
hg: set default path correctly when doing a clone+share (issue5378)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29906
diff
changeset
|
570 # Resolve the value to put in [paths] section for the source. |
1779dde4c9ef
hg: set default path correctly when doing a clone+share (issue5378)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29906
diff
changeset
|
571 if islocal(source): |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
572 defaultpath = os.path.abspath(urlutil.urllocalpath(source)) |
30041
1779dde4c9ef
hg: set default path correctly when doing a clone+share (issue5378)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29906
diff
changeset
|
573 else: |
1779dde4c9ef
hg: set default path correctly when doing a clone+share (issue5378)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29906
diff
changeset
|
574 defaultpath = source |
1779dde4c9ef
hg: set default path correctly when doing a clone+share (issue5378)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
29906
diff
changeset
|
575 |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
576 sharerepo = repository(ui, path=sharepath) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
577 destrepo = share( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
578 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
579 sharerepo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
580 dest=dest, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
581 update=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
582 bookmarks=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
583 defaultpath=defaultpath, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
584 ) |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
585 |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
586 # We need to perform a pull against the dest repo to fetch bookmarks |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
587 # and other non-store data that isn't shared by default. In the case of |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
588 # non-existing shared repo, this means we pull from the remote twice. This |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
589 # is a bit weird. But at the time it was implemented, there wasn't an easy |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
590 # way to pull just non-changegroup data. |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
591 exchange.pull(destrepo, srcpeer, heads=revs) |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
592 |
28632
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
593 _postshareupdate(destrepo, update) |
a2c2dd399f3b
hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28289
diff
changeset
|
594 |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
595 return srcpeer, peer(ui, peeropts, dest) |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
596 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
597 |
46124
5b9bb4e9a3bf
share: properly copy cache files when cloning from a share
Joerg Sonnenberger <joerg@bec.de>
parents:
46114
diff
changeset
|
598 # Recomputing caches is often slow on big repos, so copy them. |
32525
963de566de2f
local-clone: extract the closure copying caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32418
diff
changeset
|
599 def _copycache(srcrepo, dstcachedir, fname): |
963de566de2f
local-clone: extract the closure copying caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32418
diff
changeset
|
600 """copy a cache from srcrepo to destcachedir (if it exists)""" |
46124
5b9bb4e9a3bf
share: properly copy cache files when cloning from a share
Joerg Sonnenberger <joerg@bec.de>
parents:
46114
diff
changeset
|
601 srcfname = srcrepo.cachevfs.join(fname) |
5b9bb4e9a3bf
share: properly copy cache files when cloning from a share
Joerg Sonnenberger <joerg@bec.de>
parents:
46114
diff
changeset
|
602 dstfname = os.path.join(dstcachedir, fname) |
5b9bb4e9a3bf
share: properly copy cache files when cloning from a share
Joerg Sonnenberger <joerg@bec.de>
parents:
46114
diff
changeset
|
603 if os.path.exists(srcfname): |
32525
963de566de2f
local-clone: extract the closure copying caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32418
diff
changeset
|
604 if not os.path.exists(dstcachedir): |
963de566de2f
local-clone: extract the closure copying caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32418
diff
changeset
|
605 os.mkdir(dstcachedir) |
46124
5b9bb4e9a3bf
share: properly copy cache files when cloning from a share
Joerg Sonnenberger <joerg@bec.de>
parents:
46114
diff
changeset
|
606 util.copyfile(srcfname, dstfname) |
32525
963de566de2f
local-clone: extract the closure copying caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32418
diff
changeset
|
607 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
608 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
609 def clone( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
610 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
611 peeropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
612 source, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
613 dest=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
614 pull=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
615 revs=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
616 update=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
617 stream=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
618 branch=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
619 shareopts=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
620 storeincludepats=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
621 storeexcludepats=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
622 depth=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
623 ): |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
624 """Make a copy of an existing repository. |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
625 |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
626 Create a copy of an existing repository in a new directory. The |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
627 source and destination are URLs, as passed to the repository |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
628 function. Returns a pair of repository peers, the source and |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
629 newly created destination. |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
630 |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
631 The location of the source is added to the new repository's |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
632 .hg/hgrc file, as the default to be used for future pulls and |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
633 pushes. |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
634 |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
635 If an exception is raised, the partly cloned/updated destination |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
636 repository will be deleted. |
2600
c4325f0a9b91
clean up trailing white space.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2597
diff
changeset
|
637 |
2719
532809ba1db5
hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2631
diff
changeset
|
638 Arguments: |
532809ba1db5
hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2631
diff
changeset
|
639 |
532809ba1db5
hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2631
diff
changeset
|
640 source: repository object or URL |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
641 |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
642 dest: URL of destination repository to create (defaults to base |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
643 name of source repository) |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
644 |
23545
68c434799559
hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents:
23139
diff
changeset
|
645 pull: always pull from source repository, even in local case or if the |
68c434799559
hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents:
23139
diff
changeset
|
646 server prefers streaming |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
647 |
2621
5a5852a417b1
clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2613
diff
changeset
|
648 stream: stream raw data uncompressed from repository (fast over |
5a5852a417b1
clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2613
diff
changeset
|
649 LAN, slow over WAN) |
2613
479e26afa10f
clone: do not make streaming default. add --stream option instead.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2612
diff
changeset
|
650 |
37264
54435fd09f1d
clone: rename "rev" to "revs" since there can be many
Martin von Zweigbergk <martinvonz@google.com>
parents:
37263
diff
changeset
|
651 revs: revision to clone up to (implies pull=True) |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
652 |
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
653 update: update working directory after clone completes, if |
6526
cfeeac24fc1e
repo: add rjoin method
Bryan O'Sullivan <bos@serpentine.com>
parents:
6525
diff
changeset
|
654 destination is local repository (True means update to default rev, |
cfeeac24fc1e
repo: add rjoin method
Bryan O'Sullivan <bos@serpentine.com>
parents:
6525
diff
changeset
|
655 anything else is treated as a revision) |
10379
a78bfaf988e1
add -b/--branch option to clone, bundle, incoming, outgoing, pull, push
Sune Foldager <cryo@cyanite.org>
parents:
10365
diff
changeset
|
656 |
a78bfaf988e1
add -b/--branch option to clone, bundle, incoming, outgoing, pull, push
Sune Foldager <cryo@cyanite.org>
parents:
10365
diff
changeset
|
657 branch: branches to clone |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
658 |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
659 shareopts: dict of options to control auto sharing behavior. The "pool" key |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
660 activates auto sharing mode and defines the directory for stores. The |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
661 "mode" key determines how to construct the directory name of the shared |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
662 repository. "identity" means the name is derived from the node of the first |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
663 changeset in the repository. "remote" means the name is derived from the |
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
664 remote's path/URL. Defaults to "identity." |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
665 |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
666 storeincludepats and storeexcludepats: sets of file patterns to include and |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
667 exclude in the repository copy, respectively. If not defined, all files |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
668 will be included (a "full" clone). Otherwise a "narrow" clone containing |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
669 only the requested files will be performed. If ``storeincludepats`` is not |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
670 defined but ``storeexcludepats`` is, ``storeincludepats`` is assumed to be |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
671 ``path:.``. If both are empty sets, no files will be cloned. |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
672 """ |
4478
b2b55acbacdd
Add support for url#id syntax
Matt Mackall <mpm@selenic.com>
parents:
4477
diff
changeset
|
673 |
32988
11c0bb4ccc76
py3: replace str with bytes in isinstance()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32528
diff
changeset
|
674 if isinstance(source, bytes): |
46934
ebb13f9a9ba8
urlutil: add a `get_clone_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46932
diff
changeset
|
675 src = urlutil.get_clone_path(ui, source, branch) |
ebb13f9a9ba8
urlutil: add a `get_clone_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46932
diff
changeset
|
676 origsource, source, branches = src |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
677 srcpeer = peer(ui, peeropts, source) |
2719
532809ba1db5
hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2631
diff
changeset
|
678 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
679 srcpeer = source.peer() # in case we were called with a localrepo |
37263
3809eafedf2c
parseurl: consistently call second output "branches"
Martin von Zweigbergk <martinvonz@google.com>
parents:
37128
diff
changeset
|
680 branches = (None, branch or []) |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
681 origsource = source = srcpeer.url() |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
682 srclock = destlock = cleandir = None |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
683 destpeer = None |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
684 try: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
685 revs, checkout = addbranchrevs(srcpeer, srcpeer, branches, revs) |
2719
532809ba1db5
hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2631
diff
changeset
|
686 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
687 if dest is None: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
688 dest = defaultdest(source) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
689 if dest: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
690 ui.status(_(b"destination directory: %s\n") % dest) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
691 else: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
692 dest = ui.expandpath(dest) |
2719
532809ba1db5
hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2631
diff
changeset
|
693 |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
694 dest = urlutil.urllocalpath(dest) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
695 source = urlutil.urllocalpath(source) |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
696 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
697 if not dest: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
698 raise error.InputError(_(b"empty destination path is not valid")) |
21803
62cc4055c6c8
hg: use vfs functions in clone
Chinmay Joshi <c@chinmayjoshi.com>
parents:
21802
diff
changeset
|
699 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
700 destvfs = vfsmod.vfs(dest, expandpath=True) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
701 if destvfs.lexists(): |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
702 if not destvfs.isdir(): |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
703 raise error.InputError( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
704 _(b"destination '%s' already exists") % dest |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
705 ) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
706 elif destvfs.listdir(): |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
707 raise error.InputError( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
708 _(b"destination '%s' is not empty") % dest |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
709 ) |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
710 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
711 createopts = {} |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
712 narrow = False |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
713 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
714 if storeincludepats is not None: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
715 narrowspec.validatepatterns(storeincludepats) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
716 narrow = True |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
717 |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
718 if storeexcludepats is not None: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
719 narrowspec.validatepatterns(storeexcludepats) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
720 narrow = True |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
721 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
722 if narrow: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
723 # Include everything by default if only exclusion patterns defined. |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
724 if storeexcludepats and not storeincludepats: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
725 storeincludepats = {b'path:.'} |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
726 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
727 createopts[b'narrowfiles'] = True |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
728 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
729 if depth: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
730 createopts[b'shallowfilestore'] = True |
40390
7e3b6c4f01a2
localrepo: support marking repos as having shallow file storage
Gregory Szorc <gregory.szorc@gmail.com>
parents:
40366
diff
changeset
|
731 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
732 if srcpeer.capable(b'lfs-serve'): |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
733 # Repository creation honors the config if it disabled the extension, so |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
734 # we can't just announce that lfs will be enabled. This check avoids |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
735 # saying that lfs will be enabled, and then saying it's an unknown |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
736 # feature. The lfs creation option is set in either case so that a |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
737 # requirement is added. If the extension is explicitly disabled but the |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
738 # requirement is set, the clone aborts early, before transferring any |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
739 # data. |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
740 createopts[b'lfs'] = True |
40324
6637b079ae45
lfs: autoload the extension when cloning from repo with lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
39854
diff
changeset
|
741 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
742 if extensions.disabled_help(b'lfs'): |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
743 ui.status( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
744 _( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
745 b'(remote is using large file support (lfs), but it is ' |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
746 b'explicitly disabled in the local configuration)\n' |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
747 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
748 ) |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
749 else: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
750 ui.status( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
751 _( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
752 b'(remote is using large file support (lfs); lfs will ' |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
753 b'be enabled for this repository)\n' |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
754 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
755 ) |
40324
6637b079ae45
lfs: autoload the extension when cloning from repo with lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents:
39854
diff
changeset
|
756 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
757 shareopts = shareopts or {} |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
758 sharepool = shareopts.get(b'pool') |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
759 sharenamemode = shareopts.get(b'mode') |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
760 if sharepool and islocal(dest): |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
761 sharepath = None |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
762 if sharenamemode == b'identity': |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
763 # Resolve the name from the initial changeset in the remote |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
764 # repository. This returns nullid when the remote is empty. It |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
765 # raises RepoLookupError if revision 0 is filtered or otherwise |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
766 # not available. If we fail to resolve, sharing is not enabled. |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
767 try: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
768 with srcpeer.commandexecutor() as e: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
769 rootnode = e.callcommand( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
770 b'lookup', |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
771 { |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
772 b'key': b'0', |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
773 }, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
774 ).result() |
37640
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
775 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
776 if rootnode != nullid: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
777 sharepath = os.path.join(sharepool, hex(rootnode)) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
778 else: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
779 ui.status( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
780 _( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
781 b'(not using pooled storage: ' |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
782 b'remote appears to be empty)\n' |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
783 ) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
784 ) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
785 except error.RepoLookupError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
786 ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
787 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
788 b'(not using pooled storage: ' |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
789 b'unable to resolve identity of remote)\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
790 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
791 ) |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
792 elif sharenamemode == b'remote': |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
793 sharepath = os.path.join( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
794 sharepool, hex(hashutil.sha1(source).digest()) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
795 ) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
796 else: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
797 raise error.Abort( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
798 _(b'unknown share naming mode: %s') % sharenamemode |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
799 ) |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
800 |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
801 # TODO this is a somewhat arbitrary restriction. |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
802 if narrow: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
803 ui.status( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
804 _(b'(pooled storage not supported for narrow clones)\n') |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
805 ) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
806 sharepath = None |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
807 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
808 if sharepath: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
809 return clonewithshare( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
810 ui, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
811 peeropts, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
812 sharepath, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
813 source, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
814 srcpeer, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
815 dest, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
816 pull=pull, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
817 rev=revs, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
818 update=update, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
819 stream=stream, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
820 ) |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
821 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
822 srcrepo = srcpeer.local() |
25761
0d37b9b21467
hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25660
diff
changeset
|
823 |
14377
f90d5641c78b
clone: make default path absolute for all local paths
Brendan Cully <brendan@kublai.com>
parents:
14213
diff
changeset
|
824 abspath = origsource |
f90d5641c78b
clone: make default path absolute for all local paths
Brendan Cully <brendan@kublai.com>
parents:
14213
diff
changeset
|
825 if islocal(origsource): |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
826 abspath = os.path.abspath(urlutil.urllocalpath(origsource)) |
14377
f90d5641c78b
clone: make default path absolute for all local paths
Brendan Cully <brendan@kublai.com>
parents:
14213
diff
changeset
|
827 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
828 if islocal(dest): |
18441
1f794204abbd
hg: replace DirCleanup class with normal try/finally use
Augie Fackler <raf@durin42.com>
parents:
18382
diff
changeset
|
829 cleandir = dest |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
830 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
831 copy = False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
832 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
833 srcrepo |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
834 and srcrepo.cancopy() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
835 and islocal(dest) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
836 and not phases.hassecret(srcrepo) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
837 ): |
37264
54435fd09f1d
clone: rename "rev" to "revs" since there can be many
Martin von Zweigbergk <martinvonz@google.com>
parents:
37263
diff
changeset
|
838 copy = not pull and not revs |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
839 |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
840 # TODO this is a somewhat arbitrary restriction. |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
841 if narrow: |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
842 copy = False |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
843 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
844 if copy: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
845 try: |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
846 # we use a lock here because if we race with commit, we |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
847 # can end up with extra data in the cloned revlogs that's |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
848 # not pointed to by changesets, thus causing verify to |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
849 # fail |
14463
81f559d1b9b2
hg: remove underscores in clone function
Martin Geisler <mg@aragost.com>
parents:
14377
diff
changeset
|
850 srclock = srcrepo.lock(wait=False) |
7640 | 851 except error.LockError: |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
852 copy = False |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
853 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
854 if copy: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
855 srcrepo.hook(b'preoutgoing', throw=True, source=b'clone') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
856 hgdir = os.path.realpath(os.path.join(dest, b".hg")) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
857 if not os.path.exists(dest): |
39218
143efea71c2a
clone: allow local cloning to create more than one level of directories
Matt Harbison <matt_harbison@yahoo.com>
parents:
38838
diff
changeset
|
858 util.makedirs(dest) |
7935
39566bb99a9c
on clone failure, only remove directories we created
Steve Borho <steve@borho.org>
parents:
7927
diff
changeset
|
859 else: |
39566bb99a9c
on clone failure, only remove directories we created
Steve Borho <steve@borho.org>
parents:
7927
diff
changeset
|
860 # only clean up directories we create ourselves |
18441
1f794204abbd
hg: replace DirCleanup class with normal try/finally use
Augie Fackler <raf@durin42.com>
parents:
18382
diff
changeset
|
861 cleandir = hgdir |
5569
9e209193f18d
clone: fix race with same target directory (issue716)
Matt Mackall <mpm@selenic.com>
parents:
5277
diff
changeset
|
862 try: |
14463
81f559d1b9b2
hg: remove underscores in clone function
Martin Geisler <mg@aragost.com>
parents:
14377
diff
changeset
|
863 destpath = hgdir |
81f559d1b9b2
hg: remove underscores in clone function
Martin Geisler <mg@aragost.com>
parents:
14377
diff
changeset
|
864 util.makedir(destpath, notindexed=True) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25624
diff
changeset
|
865 except OSError as inst: |
5569
9e209193f18d
clone: fix race with same target directory (issue716)
Matt Mackall <mpm@selenic.com>
parents:
5277
diff
changeset
|
866 if inst.errno == errno.EEXIST: |
18441
1f794204abbd
hg: replace DirCleanup class with normal try/finally use
Augie Fackler <raf@durin42.com>
parents:
18382
diff
changeset
|
867 cleandir = None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
868 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
869 _(b"destination '%s' already exists") % dest |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
870 ) |
5569
9e209193f18d
clone: fix race with same target directory (issue716)
Matt Mackall <mpm@selenic.com>
parents:
5277
diff
changeset
|
871 raise |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
872 |
15078
193e7018dc8c
hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents:
14952
diff
changeset
|
873 destlock = copystore(ui, srcrepo, destpath) |
22646
d6ecdb8bfa16
clone: copy `.hg/bookmarks` during copy clone
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22618
diff
changeset
|
874 # copy bookmarks over |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
875 srcbookmarks = srcrepo.vfs.join(b'bookmarks') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
876 dstbookmarks = os.path.join(destpath, b'bookmarks') |
22646
d6ecdb8bfa16
clone: copy `.hg/bookmarks` during copy clone
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22618
diff
changeset
|
877 if os.path.exists(srcbookmarks): |
d6ecdb8bfa16
clone: copy `.hg/bookmarks` during copy clone
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22618
diff
changeset
|
878 util.copyfile(srcbookmarks, dstbookmarks) |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
879 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
880 dstcachedir = os.path.join(destpath, b'cache') |
35766
72fdd99eb526
caches: make 'cachetocopy' available in scmutil
Boris Feld <boris.feld@octobus.net>
parents:
35713
diff
changeset
|
881 for cache in cacheutil.cachetocopy(srcrepo): |
32526
3c8a71a8df11
local-clone: extract the listing of caches to copy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
32525
diff
changeset
|
882 _copycache(srcrepo, dstcachedir, cache) |
17740
e6067bec18da
branchcache: fetch source branchcache during clone (issue3378)
Tomasz Kleczek <tomasz.kleczek@fb.com>
parents:
17704
diff
changeset
|
883 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
884 # we need to re-init the repo after manually copying the data |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
885 # into it |
17874
2ba70eec1cf0
peer: subrepo isolation, pass repo instead of repo.ui to hg.peer
Simon Heimberg <simohe@besonet.ch>
parents:
17872
diff
changeset
|
886 destpeer = peer(srcrepo, peeropts, dest) |
46114
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45957
diff
changeset
|
887 srcrepo.hook(b'outgoing', source=b'clone', node=nullhex) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
888 else: |
5569
9e209193f18d
clone: fix race with same target directory (issue716)
Matt Mackall <mpm@selenic.com>
parents:
5277
diff
changeset
|
889 try: |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
890 # only pass ui when no srcrepo |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
891 destpeer = peer( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
892 srcrepo or ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
893 peeropts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
894 dest, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
895 create=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
896 createopts=createopts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
897 ) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25624
diff
changeset
|
898 except OSError as inst: |
5569
9e209193f18d
clone: fix race with same target directory (issue716)
Matt Mackall <mpm@selenic.com>
parents:
5277
diff
changeset
|
899 if inst.errno == errno.EEXIST: |
18441
1f794204abbd
hg: replace DirCleanup class with normal try/finally use
Augie Fackler <raf@durin42.com>
parents:
18382
diff
changeset
|
900 cleandir = None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
901 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
902 _(b"destination '%s' already exists") % dest |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
903 ) |
5569
9e209193f18d
clone: fix race with same target directory (issue716)
Matt Mackall <mpm@selenic.com>
parents:
5277
diff
changeset
|
904 raise |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
905 |
37264
54435fd09f1d
clone: rename "rev" to "revs" since there can be many
Martin von Zweigbergk <martinvonz@google.com>
parents:
37263
diff
changeset
|
906 if revs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
907 if not srcpeer.capable(b'lookup'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
908 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
909 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
910 b"src repository does not support " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
911 b"revision lookup and so doesn't " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
912 b"support clone by revision" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
913 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
914 ) |
37640
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
915 |
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
916 # TODO this is batchable. |
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
917 remoterevs = [] |
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
918 for rev in revs: |
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
919 with srcpeer.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
920 remoterevs.append( |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
921 e.callcommand( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
922 b'lookup', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
923 { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
924 b'key': rev, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
925 }, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
926 ).result() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
927 ) |
37640
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
928 revs = remoterevs |
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
929 |
8417
39cf453da958
clone: try updating to the actual changeset specified in options
Brett Carter <brett@rdnzl.net>
parents:
8312
diff
changeset
|
930 checkout = revs[0] |
37264
54435fd09f1d
clone: rename "rev" to "revs" since there can be many
Martin von Zweigbergk <martinvonz@google.com>
parents:
37263
diff
changeset
|
931 else: |
54435fd09f1d
clone: rename "rev" to "revs" since there can be many
Martin von Zweigbergk <martinvonz@google.com>
parents:
37263
diff
changeset
|
932 revs = None |
27165
70884715725e
localrepo: remove clone method by hoisting into hg.py
Augie Fackler <augie@google.com>
parents:
26781
diff
changeset
|
933 local = destpeer.local() |
70884715725e
localrepo: remove clone method by hoisting into hg.py
Augie Fackler <augie@google.com>
parents:
26781
diff
changeset
|
934 if local: |
39571
cb675e95a2c2
hg: write narrow patterns after repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39569
diff
changeset
|
935 if narrow: |
41046
ce0bc2952e2a
narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents:
41006
diff
changeset
|
936 with local.wlock(), local.lock(): |
39571
cb675e95a2c2
hg: write narrow patterns after repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39569
diff
changeset
|
937 local.setnarrowpats(storeincludepats, storeexcludepats) |
41236
44a51c1c8e17
narrow: move copytonarrowspec() out of setnarrowpats()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41229
diff
changeset
|
938 narrowspec.copytoworkingcopy(local) |
39571
cb675e95a2c2
hg: write narrow patterns after repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39569
diff
changeset
|
939 |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
940 u = urlutil.url(abspath) |
35565
bdae51a83dfb
clonebundle: make it possible to retrieve the initial bundle through largefile
Boris Feld <boris.feld@octobus.net>
parents:
35442
diff
changeset
|
941 defaulturl = bytes(u) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
942 local.ui.setconfig(b'paths', b'default', defaulturl, b'clone') |
23545
68c434799559
hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents:
23139
diff
changeset
|
943 if not stream: |
68c434799559
hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents:
23139
diff
changeset
|
944 if pull: |
68c434799559
hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents:
23139
diff
changeset
|
945 stream = False |
68c434799559
hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents:
23139
diff
changeset
|
946 else: |
68c434799559
hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents:
23139
diff
changeset
|
947 stream = None |
27165
70884715725e
localrepo: remove clone method by hoisting into hg.py
Augie Fackler <augie@google.com>
parents:
26781
diff
changeset
|
948 # internal config: ui.quietbookmarkmove |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
949 overrides = {(b'ui', b'quietbookmarkmove'): True} |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
950 with local.ui.configoverride(overrides, b'clone'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
951 exchange.pull( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
952 local, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
953 srcpeer, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
954 revs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
955 streamclonerequested=stream, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
956 includepats=storeincludepats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
957 excludepats=storeexcludepats, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
958 depth=depth, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
959 ) |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
960 elif srcrepo: |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
961 # TODO lift restriction once exchange.push() accepts narrow |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
962 # push. |
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
963 if narrow: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
964 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
965 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
966 b'narrow clone not available for ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
967 b'remote destinations' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
968 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
969 ) |
39566
65b5900f30be
hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39565
diff
changeset
|
970 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
971 exchange.push( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
972 srcrepo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
973 destpeer, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
974 revs=revs, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
975 bookmarks=srcrepo._bookmarks.keys(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
976 ) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
977 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
978 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
979 _(b"clone from remote to remote not supported") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
980 ) |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
981 |
18441
1f794204abbd
hg: replace DirCleanup class with normal try/finally use
Augie Fackler <raf@durin42.com>
parents:
18382
diff
changeset
|
982 cleandir = None |
2597
5ba8be56fa8f
clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents:
2595
diff
changeset
|
983 |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
984 destrepo = destpeer.local() |
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
985 if destrepo: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
986 template = uimod.samplehgrcs[b'cloned'] |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
987 u = urlutil.url(abspath) |
15552
62c9183a0bbb
clone: don't save user's password in .hg/hgrc (Issue3122)
Augie Fackler <durin42@gmail.com>
parents:
15381
diff
changeset
|
988 u.passwd = None |
33713
6294654453ee
py3: use bytes IO to write sample hgrc
Yuya Nishihara <yuya@tcha.org>
parents:
33034
diff
changeset
|
989 defaulturl = bytes(u) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
990 destrepo.vfs.write(b'hgrc', util.tonativeeol(template % defaulturl)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
991 destrepo.ui.setconfig(b'paths', b'default', defaulturl, b'clone') |
8814
ab668c92a036
subrepo: add update/merge logic
Matt Mackall <mpm@selenic.com>
parents:
8807
diff
changeset
|
992 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
993 if ui.configbool(b'experimental', b'remotenames'): |
35356
a29fe459fc49
remotenames: rename related file and storage dir to logexchange
Pulkit Goyal <7895pulkit@gmail.com>
parents:
35340
diff
changeset
|
994 logexchange.pullremotenames(destrepo, srcpeer) |
35340
773a9a06047c
clone: add support for storing remotenames while cloning
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34957
diff
changeset
|
995 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
996 if update: |
6526
cfeeac24fc1e
repo: add rjoin method
Bryan O'Sullivan <bos@serpentine.com>
parents:
6525
diff
changeset
|
997 if update is not True: |
37640
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
998 with srcpeer.commandexecutor() as e: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
999 checkout = e.callcommand( |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
1000 b'lookup', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
1001 { |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
1002 b'key': update, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
1003 }, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1004 ).result() |
37640
ce8828217369
hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37579
diff
changeset
|
1005 |
17867
c9339efed653
clone: make sure to use "@" as bookmark and "default" as branch (issue3677)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
17844
diff
changeset
|
1006 uprev = None |
17882
36ed69d4593d
clone: show status "updating to bookmark @"
Adrian Buehlmann <adrian@cadifra.com>
parents:
17875
diff
changeset
|
1007 status = None |
17867
c9339efed653
clone: make sure to use "@" as bookmark and "default" as branch (issue3677)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
17844
diff
changeset
|
1008 if checkout is not None: |
38753
e06a10d3b926
clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents:
38386
diff
changeset
|
1009 # Some extensions (at least hg-git and hg-subversion) have |
e06a10d3b926
clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents:
38386
diff
changeset
|
1010 # a peer.lookup() implementation that returns a name instead |
e06a10d3b926
clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents:
38386
diff
changeset
|
1011 # of a nodeid. We work around it here until we've figured |
e06a10d3b926
clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents:
38386
diff
changeset
|
1012 # out a better solution. |
e06a10d3b926
clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents:
38386
diff
changeset
|
1013 if len(checkout) == 20 and checkout in destrepo: |
37480
c569e51ee449
clone: avoid using repo.lookup() with binary nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37313
diff
changeset
|
1014 uprev = checkout |
38753
e06a10d3b926
clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents:
38386
diff
changeset
|
1015 elif scmutil.isrevsymbol(destrepo, checkout): |
e06a10d3b926
clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents:
38386
diff
changeset
|
1016 uprev = scmutil.revsymbol(destrepo, checkout).node() |
37480
c569e51ee449
clone: avoid using repo.lookup() with binary nodeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37313
diff
changeset
|
1017 else: |
26354
c1fb2cab6260
clone: check update rev for being True
Sean Farley <sean@farley.io>
parents:
26353
diff
changeset
|
1018 if update is not True: |
c1fb2cab6260
clone: check update rev for being True
Sean Farley <sean@farley.io>
parents:
26353
diff
changeset
|
1019 try: |
c1fb2cab6260
clone: check update rev for being True
Sean Farley <sean@farley.io>
parents:
26353
diff
changeset
|
1020 uprev = destrepo.lookup(update) |
c1fb2cab6260
clone: check update rev for being True
Sean Farley <sean@farley.io>
parents:
26353
diff
changeset
|
1021 except error.RepoLookupError: |
c1fb2cab6260
clone: check update rev for being True
Sean Farley <sean@farley.io>
parents:
26353
diff
changeset
|
1022 pass |
17867
c9339efed653
clone: make sure to use "@" as bookmark and "default" as branch (issue3677)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
17844
diff
changeset
|
1023 if uprev is None: |
c9339efed653
clone: make sure to use "@" as bookmark and "default" as branch (issue3677)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
17844
diff
changeset
|
1024 try: |
46198
72007a9ac064
clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
46124
diff
changeset
|
1025 if destrepo._activebookmark: |
72007a9ac064
clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
46124
diff
changeset
|
1026 uprev = destrepo.lookup(destrepo._activebookmark) |
72007a9ac064
clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
46124
diff
changeset
|
1027 update = destrepo._activebookmark |
72007a9ac064
clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
46124
diff
changeset
|
1028 else: |
72007a9ac064
clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
46124
diff
changeset
|
1029 uprev = destrepo._bookmarks[b'@'] |
72007a9ac064
clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
46124
diff
changeset
|
1030 update = b'@' |
17882
36ed69d4593d
clone: show status "updating to bookmark @"
Adrian Buehlmann <adrian@cadifra.com>
parents:
17875
diff
changeset
|
1031 bn = destrepo[uprev].branch() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1032 if bn == b'default': |
46198
72007a9ac064
clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
46124
diff
changeset
|
1033 status = _(b"updating to bookmark %s\n" % update) |
17882
36ed69d4593d
clone: show status "updating to bookmark @"
Adrian Buehlmann <adrian@cadifra.com>
parents:
17875
diff
changeset
|
1034 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1035 status = ( |
46198
72007a9ac064
clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
46124
diff
changeset
|
1036 _(b"updating to bookmark %s on branch %s\n") |
72007a9ac064
clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
46124
diff
changeset
|
1037 ) % (update, bn) |
17867
c9339efed653
clone: make sure to use "@" as bookmark and "default" as branch (issue3677)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
17844
diff
changeset
|
1038 except KeyError: |
c9339efed653
clone: make sure to use "@" as bookmark and "default" as branch (issue3677)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
17844
diff
changeset
|
1039 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1040 uprev = destrepo.branchtip(b'default') |
17867
c9339efed653
clone: make sure to use "@" as bookmark and "default" as branch (issue3677)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
17844
diff
changeset
|
1041 except error.RepoLookupError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1042 uprev = destrepo.lookup(b'tip') |
17882
36ed69d4593d
clone: show status "updating to bookmark @"
Adrian Buehlmann <adrian@cadifra.com>
parents:
17875
diff
changeset
|
1043 if not status: |
36ed69d4593d
clone: show status "updating to bookmark @"
Adrian Buehlmann <adrian@cadifra.com>
parents:
17875
diff
changeset
|
1044 bn = destrepo[uprev].branch() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1045 status = _(b"updating to branch %s\n") % bn |
17882
36ed69d4593d
clone: show status "updating to bookmark @"
Adrian Buehlmann <adrian@cadifra.com>
parents:
17875
diff
changeset
|
1046 destrepo.ui.status(status) |
14463
81f559d1b9b2
hg: remove underscores in clone function
Martin Geisler <mg@aragost.com>
parents:
14377
diff
changeset
|
1047 _update(destrepo, uprev) |
17703
4a07d2ff7c66
clone: activate bookmark specified with --updaterev
Thomas Arendsen Hein <thomas@intevation.de>
parents:
17342
diff
changeset
|
1048 if update in destrepo._bookmarks: |
24945
e0b0fbd47491
bookmarks: rename setcurrent to activate (API)
Ryan McElroy <rmcelroy@fb.com>
parents:
24440
diff
changeset
|
1049 bookmarks.activate(destrepo, update) |
46314
95a615dd77bf
clone: make sure we warm the cache after a clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46198
diff
changeset
|
1050 if destlock is not None: |
95a615dd77bf
clone: make sure we warm the cache after a clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46198
diff
changeset
|
1051 release(destlock) |
95a615dd77bf
clone: make sure we warm the cache after a clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46198
diff
changeset
|
1052 # here is a tiny windows were someone could end up writing the |
95a615dd77bf
clone: make sure we warm the cache after a clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46198
diff
changeset
|
1053 # repository before the cache are sure to be warm. This is "fine" |
95a615dd77bf
clone: make sure we warm the cache after a clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46198
diff
changeset
|
1054 # as the only "bad" outcome would be some slowness. That potential |
95a615dd77bf
clone: make sure we warm the cache after a clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46198
diff
changeset
|
1055 # slowness already affect reader. |
95a615dd77bf
clone: make sure we warm the cache after a clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46198
diff
changeset
|
1056 with destrepo.lock(): |
95a615dd77bf
clone: make sure we warm the cache after a clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46198
diff
changeset
|
1057 destrepo.updatecaches(full=True) |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4853
diff
changeset
|
1058 finally: |
15908
60cb4f381a78
bookmarks: backout locking change in 12dea4d998ec
Matt Mackall <mpm@selenic.com>
parents:
15887
diff
changeset
|
1059 release(srclock, destlock) |
18441
1f794204abbd
hg: replace DirCleanup class with normal try/finally use
Augie Fackler <raf@durin42.com>
parents:
18382
diff
changeset
|
1060 if cleandir is not None: |
1f794204abbd
hg: replace DirCleanup class with normal try/finally use
Augie Fackler <raf@durin42.com>
parents:
18382
diff
changeset
|
1061 shutil.rmtree(cleandir, True) |
17191
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
1062 if srcpeer is not None: |
5884812686f7
peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents:
17159
diff
changeset
|
1063 srcpeer.close() |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1064 if destpeer and destpeer.local() is None: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1065 destpeer.close() |
19313
3b96d6e44a4d
hg: move return statement after finally block
simon@laptop-tosh
parents:
18944
diff
changeset
|
1066 return srcpeer, destpeer |
2775
b550cd82f92a
Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents:
2774
diff
changeset
|
1067 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1068 |
27402
5184089f5d30
hg: add quietempty flag to _showstats
timeless <timeless@mozdev.org>
parents:
27354
diff
changeset
|
1069 def _showstats(repo, stats, quietempty=False): |
37128
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
1070 if quietempty and stats.isempty(): |
27402
5184089f5d30
hg: add quietempty flag to _showstats
timeless <timeless@mozdev.org>
parents:
27354
diff
changeset
|
1071 return |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1072 repo.ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1073 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1074 b"%d files updated, %d files merged, " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1075 b"%d files removed, %d files unresolved\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1076 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1077 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1078 stats.updatedcount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1079 stats.mergedcount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1080 stats.removedcount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1081 stats.unresolvedcount, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1082 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1083 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1084 |
3316
39fd6e82ea38
merge: pull user messages out to hg.py
Matt Mackall <mpm@selenic.com>
parents:
3195
diff
changeset
|
1085 |
31176
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31148
diff
changeset
|
1086 def updaterepo(repo, node, overwrite, updatecheck=None): |
17895
17c030014ddf
subrepo: only do clean update when overwrite is set (issue3276)
Simon Heimberg <simohe@besonet.ch>
parents:
17887
diff
changeset
|
1087 """Update the working directory to node. |
17c030014ddf
subrepo: only do clean update when overwrite is set (issue3276)
Simon Heimberg <simohe@besonet.ch>
parents:
17887
diff
changeset
|
1088 |
17c030014ddf
subrepo: only do clean update when overwrite is set (issue3276)
Simon Heimberg <simohe@besonet.ch>
parents:
17887
diff
changeset
|
1089 When overwrite is set, changes are clobbered, merged else |
17c030014ddf
subrepo: only do clean update when overwrite is set (issue3276)
Simon Heimberg <simohe@besonet.ch>
parents:
17887
diff
changeset
|
1090 |
17c030014ddf
subrepo: only do clean update when overwrite is set (issue3276)
Simon Heimberg <simohe@besonet.ch>
parents:
17887
diff
changeset
|
1091 returns stats (see pydoc mercurial.merge.applyupdates)""" |
45608
00402df57db7
updaterepo: add deprecation warning
Martin von Zweigbergk <martinvonz@google.com>
parents:
45580
diff
changeset
|
1092 repo.ui.deprecwarn( |
00402df57db7
updaterepo: add deprecation warning
Martin von Zweigbergk <martinvonz@google.com>
parents:
45580
diff
changeset
|
1093 b'prefer merge.update() or merge.clean_update() over hg.updaterepo()', |
00402df57db7
updaterepo: add deprecation warning
Martin von Zweigbergk <martinvonz@google.com>
parents:
45580
diff
changeset
|
1094 b'5.7', |
00402df57db7
updaterepo: add deprecation warning
Martin von Zweigbergk <martinvonz@google.com>
parents:
45580
diff
changeset
|
1095 ) |
45563
2c86b9587740
merge: make low-level update() private (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45562
diff
changeset
|
1096 return mergemod._update( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1097 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1098 node, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1099 branchmerge=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1100 force=overwrite, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1101 labels=[b'working copy', b'destination'], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1102 updatecheck=updatecheck, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1103 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1104 |
17895
17c030014ddf
subrepo: only do clean update when overwrite is set (issue3276)
Simon Heimberg <simohe@besonet.ch>
parents:
17887
diff
changeset
|
1105 |
31176
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31148
diff
changeset
|
1106 def update(repo, node, quietempty=False, updatecheck=None): |
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31148
diff
changeset
|
1107 """update the working directory to node""" |
45580
5c8230ca37f2
merge: replace calls to hg.updaterepo() by merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45563
diff
changeset
|
1108 stats = mergemod.update(repo[node], updatecheck=updatecheck) |
27404
1cf3543cc780
update: add quietempty flag to _showstats
timeless <timeless@mozdev.org>
parents:
27403
diff
changeset
|
1109 _showstats(repo, stats, quietempty) |
37128
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
1110 if stats.unresolvedcount: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1111 repo.ui.status(_(b"use 'hg resolve' to retry unresolved file merges\n")) |
37128
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
1112 return stats.unresolvedcount > 0 |
2775
b550cd82f92a
Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents:
2774
diff
changeset
|
1113 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1114 |
7546
c7f48414f3ad
add a comment about the need of hg._update()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7280
diff
changeset
|
1115 # naming conflict in clone() |
c7f48414f3ad
add a comment about the need of hg._update()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7280
diff
changeset
|
1116 _update = update |
c7f48414f3ad
add a comment about the need of hg._update()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
7280
diff
changeset
|
1117 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1118 |
27403
50b6a04f817f
histedit: omit useless message from abort
timeless <timeless@mozdev.org>
parents:
27402
diff
changeset
|
1119 def clean(repo, node, show_stats=True, quietempty=False): |
2808
30f59f4a327e
Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents:
2778
diff
changeset
|
1120 """forcibly switch the working directory to node, clobbering changes""" |
45562
03726f5b6092
merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents:
45496
diff
changeset
|
1121 stats = mergemod.clean_update(repo[node]) |
44240
abcc82bf0717
clean: check that there are no conflicts after
Martin von Zweigbergk <martinvonz@google.com>
parents:
44060
diff
changeset
|
1122 assert stats.unresolvedcount == 0 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
1123 if show_stats: |
27403
50b6a04f817f
histedit: omit useless message from abort
timeless <timeless@mozdev.org>
parents:
27402
diff
changeset
|
1124 _showstats(repo, stats, quietempty) |
46774
af7535249ea9
hg: make `clean` return consistent with the `update` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46733
diff
changeset
|
1125 return False |
2775
b550cd82f92a
Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents:
2774
diff
changeset
|
1126 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1127 |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1128 # naming conflict in updatetotally() |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1129 _clean = clean |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1130 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1131 _VALID_UPDATECHECKS = { |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1132 mergemod.UPDATECHECK_ABORT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1133 mergemod.UPDATECHECK_NONE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1134 mergemod.UPDATECHECK_LINEAR, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1135 mergemod.UPDATECHECK_NO_CONFLICT, |
42973
ee1ef76d7339
hg: have `updatetotally` more thoroughly check updatecheck argument (API)
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1136 } |
ee1ef76d7339
hg: have `updatetotally` more thoroughly check updatecheck argument (API)
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1137 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1138 |
31176
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31148
diff
changeset
|
1139 def updatetotally(ui, repo, checkout, brev, clean=False, updatecheck=None): |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1140 """Update the working directory with extra care for non-file components |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1141 |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1142 This takes care of non-file components below: |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1143 |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1144 :bookmark: might be advanced or (in)activated |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1145 |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1146 This takes arguments below: |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1147 |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1148 :checkout: to which revision the working directory is updated |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1149 :brev: a name, which might be a bookmark to be activated after updating |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1150 :clean: whether changes in the working directory can be discarded |
31176
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31148
diff
changeset
|
1151 :updatecheck: how to deal with a dirty working directory |
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31148
diff
changeset
|
1152 |
42972
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
1153 Valid values for updatecheck are the UPDATECHECK_* constants |
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
1154 defined in the merge module. Passing `None` will result in using the |
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
1155 configured default. |
31176
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31148
diff
changeset
|
1156 |
42972
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
1157 * ABORT: abort if the working directory is dirty |
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
1158 * NONE: don't check (merge working directory changes into destination) |
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
1159 * LINEAR: check that update is linear before merging working directory |
31176
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31148
diff
changeset
|
1160 changes into destination |
42972
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
1161 * NO_CONFLICT: check that the update does not result in file merges |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1162 |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1163 This returns whether conflict is detected at updating or not. |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1164 """ |
31176
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31148
diff
changeset
|
1165 if updatecheck is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1166 updatecheck = ui.config(b'commands', b'update.check') |
42973
ee1ef76d7339
hg: have `updatetotally` more thoroughly check updatecheck argument (API)
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1167 if updatecheck not in _VALID_UPDATECHECKS: |
31177
696e321b304d
update: add experimental config for default way of handling dirty wdir
Martin von Zweigbergk <martinvonz@google.com>
parents:
31176
diff
changeset
|
1168 # If not configured, or invalid value configured |
42972
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
1169 updatecheck = mergemod.UPDATECHECK_LINEAR |
42973
ee1ef76d7339
hg: have `updatetotally` more thoroughly check updatecheck argument (API)
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1170 if updatecheck not in _VALID_UPDATECHECKS: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1171 raise ValueError( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1172 r'Invalid updatecheck value %r (can accept %r)' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1173 % (updatecheck, _VALID_UPDATECHECKS) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1174 ) |
28503
138ec8835e63
hg: acquire wlock while updating the working directory via updatetotally
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28501
diff
changeset
|
1175 with repo.wlock(): |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1176 movemarkfrom = None |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1177 warndest = False |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1178 if checkout is None: |
30982
11c253997b0e
destutil: drop now-unused "check" parameter from destupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30062
diff
changeset
|
1179 updata = destutil.destupdate(repo, clean=clean) |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1180 checkout, movemarkfrom, brev = updata |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1181 warndest = True |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1182 |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1183 if clean: |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1184 ret = _clean(repo, checkout) |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1185 else: |
42972
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
1186 if updatecheck == mergemod.UPDATECHECK_ABORT: |
30983
7beb3ec34443
update: move check for dirty wdir into hg.updatetotally()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30982
diff
changeset
|
1187 cmdutil.bailifchanged(repo, merge=False) |
42972
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42823
diff
changeset
|
1188 updatecheck = mergemod.UPDATECHECK_NONE |
31176
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31148
diff
changeset
|
1189 ret = _update(repo, checkout, updatecheck=updatecheck) |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1190 |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1191 if not ret and movemarkfrom: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1192 if movemarkfrom == repo[b'.'].node(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1193 pass # no-op update |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1194 elif bookmarks.update(repo, [movemarkfrom], repo[b'.'].node()): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1195 b = ui.label(repo._activebookmark, b'bookmarks.active') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1196 ui.status(_(b"updating bookmark %s\n") % b) |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1197 else: |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1198 # this can happen with a non-linear update |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1199 b = ui.label(repo._activebookmark, b'bookmarks') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1200 ui.status(_(b"(leaving bookmark %s)\n") % b) |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1201 bookmarks.deactivate(repo) |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1202 elif brev in repo._bookmarks: |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1203 if brev != repo._activebookmark: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1204 b = ui.label(brev, b'bookmarks.active') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1205 ui.status(_(b"(activating bookmark %s)\n") % b) |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1206 bookmarks.activate(repo, brev) |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1207 elif brev: |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1208 if repo._activebookmark: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1209 b = ui.label(repo._activebookmark, b'bookmarks') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1210 ui.status(_(b"(leaving bookmark %s)\n") % b) |
28501
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1211 bookmarks.deactivate(repo) |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1212 |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1213 if warndest: |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1214 destutil.statusotherdests(ui, repo) |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1215 |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1216 return ret |
66513f6ca038
commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28324
diff
changeset
|
1217 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1218 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1219 def merge( |
45957
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
1220 ctx, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
1221 force=False, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
1222 remind=True, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45866
diff
changeset
|
1223 labels=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1224 ): |
13162
115a9760c382
merge: document some internal return values.
Greg Ward <greg-hg@gerg.ca>
parents:
13047
diff
changeset
|
1225 """Branch merge with node, resolving changes. Return true if any |
115a9760c382
merge: document some internal return values.
Greg Ward <greg-hg@gerg.ca>
parents:
13047
diff
changeset
|
1226 unresolved conflicts.""" |
44454
2f290136b7d6
merge: make hg.merge() take a context instead of a node
Martin von Zweigbergk <martinvonz@google.com>
parents:
44430
diff
changeset
|
1227 repo = ctx.repo() |
2f290136b7d6
merge: make hg.merge() take a context instead of a node
Martin von Zweigbergk <martinvonz@google.com>
parents:
44430
diff
changeset
|
1228 stats = mergemod.merge(ctx, force=force, labels=labels) |
3316
39fd6e82ea38
merge: pull user messages out to hg.py
Matt Mackall <mpm@selenic.com>
parents:
3195
diff
changeset
|
1229 _showstats(repo, stats) |
37128
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
1230 if stats.unresolvedcount: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1231 repo.ui.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1232 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1233 b"use 'hg resolve' to retry unresolved file merges " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1234 b"or 'hg merge --abort' to abandon\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1235 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1236 ) |
42600
3bc400ccbf99
abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents:
42197
diff
changeset
|
1237 elif remind: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1238 repo.ui.status(_(b"(branch merge, don't forget to commit)\n")) |
37128
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
1239 return stats.unresolvedcount > 0 |
2808
30f59f4a327e
Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents:
2778
diff
changeset
|
1240 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1241 |
42604
209f2b8a50dc
abort: removed labels argument from abortmerge()
Taapas Agrawal <taapas2897@gmail.com>
parents:
42600
diff
changeset
|
1242 def abortmerge(ui, repo): |
44915
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44659
diff
changeset
|
1243 ms = mergestatemod.mergestate.read(repo) |
42600
3bc400ccbf99
abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents:
42197
diff
changeset
|
1244 if ms.active(): |
3bc400ccbf99
abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents:
42197
diff
changeset
|
1245 # there were conflicts |
3bc400ccbf99
abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents:
42197
diff
changeset
|
1246 node = ms.localctx.hex() |
3bc400ccbf99
abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents:
42197
diff
changeset
|
1247 else: |
3bc400ccbf99
abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents:
42197
diff
changeset
|
1248 # there were no conficts, mergestate was not stored |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1249 node = repo[b'.'].hex() |
42600
3bc400ccbf99
abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents:
42197
diff
changeset
|
1250 |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43089
diff
changeset
|
1251 repo.ui.status(_(b"aborting the merge, updating back to %s\n") % node[:12]) |
44317
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44253
diff
changeset
|
1252 stats = mergemod.clean_update(repo[node]) |
44250
2b6632d64328
merge: check that there are no conflicts after --abort
Martin von Zweigbergk <martinvonz@google.com>
parents:
44240
diff
changeset
|
1253 assert stats.unresolvedcount == 0 |
42600
3bc400ccbf99
abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents:
42197
diff
changeset
|
1254 _showstats(repo, stats) |
3bc400ccbf99
abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents:
42197
diff
changeset
|
1255 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1256 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1257 def _incoming( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1258 displaychlist, subreporecurse, ui, repo, source, opts, buffered=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1259 ): |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1260 """ |
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1261 Helper for incoming / gincoming. |
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1262 displaychlist gets called with |
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1263 (remoterepo, incomingchangesetlist, displayer) parameters, |
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1264 and is supposed to contain only code that can't be unified. |
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1265 """ |
46932
dec31caf5fd6
incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46931
diff
changeset
|
1266 srcs = urlutil.get_pull_paths(repo, ui, [source], opts.get(b'branch')) |
dec31caf5fd6
incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46931
diff
changeset
|
1267 srcs = list(srcs) |
dec31caf5fd6
incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46931
diff
changeset
|
1268 if len(srcs) != 1: |
dec31caf5fd6
incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46931
diff
changeset
|
1269 msg = _('for now, incoming supports only a single source, %d provided') |
dec31caf5fd6
incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46931
diff
changeset
|
1270 msg %= len(srcs) |
dec31caf5fd6
incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46931
diff
changeset
|
1271 raise error.Abort(msg) |
dec31caf5fd6
incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46931
diff
changeset
|
1272 source, branches = srcs[0] |
14556
517e1d88bf7e
hg: change various repository() users to use peer() where appropriate
Matt Mackall <mpm@selenic.com>
parents:
14555
diff
changeset
|
1273 other = peer(repo, opts, source) |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1274 cleanupfn = other.close |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1275 try: |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
1276 ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(source)) |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1277 revs, checkout = addbranchrevs(repo, other, branches, opts.get(b'rev')) |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1278 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1279 if revs: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1280 revs = [other.lookup(rev) for rev in revs] |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1281 other, chlist, cleanupfn = bundlerepo.getremotechanges( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1282 ui, repo, other, revs, opts[b"bundle"], opts[b"force"] |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1283 ) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1284 |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14156
diff
changeset
|
1285 if not chlist: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1286 ui.status(_(b"no changes found\n")) |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14156
diff
changeset
|
1287 return subreporecurse() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1288 ui.pager(b'incoming') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1289 displayer = logcmdutil.changesetdisplayer( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1290 ui, other, opts, buffered=buffered |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1291 ) |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1292 displaychlist(other, chlist, displayer) |
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1293 displayer.close() |
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1294 finally: |
14161
8a0fca925992
bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
14156
diff
changeset
|
1295 cleanupfn() |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1296 subreporecurse() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1297 return 0 # exit code is zero since we found incoming changes |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1298 |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1299 |
12273
e392d00ab5b0
incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents:
12271
diff
changeset
|
1300 def incoming(ui, repo, source, opts): |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1301 def subreporecurse(): |
12400
40852b4b910c
incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents:
12314
diff
changeset
|
1302 ret = 1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1303 if opts.get(b'subrepos'): |
12400
40852b4b910c
incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents:
12314
diff
changeset
|
1304 ctx = repo[None] |
40852b4b910c
incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents:
12314
diff
changeset
|
1305 for subpath in sorted(ctx.substate): |
40852b4b910c
incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents:
12314
diff
changeset
|
1306 sub = ctx.sub(subpath) |
40852b4b910c
incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents:
12314
diff
changeset
|
1307 ret = min(ret, sub.incoming(ui, source, opts)) |
40852b4b910c
incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents:
12314
diff
changeset
|
1308 return ret |
40852b4b910c
incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents:
12314
diff
changeset
|
1309 |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1310 def display(other, chlist, displayer): |
35928
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35766
diff
changeset
|
1311 limit = logcmdutil.getlimit(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1312 if opts.get(b'newest_first'): |
12729
55f0648c7e2d
incoming: rename variable
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12400
diff
changeset
|
1313 chlist.reverse() |
12273
e392d00ab5b0
incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents:
12271
diff
changeset
|
1314 count = 0 |
12729
55f0648c7e2d
incoming: rename variable
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12400
diff
changeset
|
1315 for n in chlist: |
12273
e392d00ab5b0
incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents:
12271
diff
changeset
|
1316 if limit is not None and count >= limit: |
e392d00ab5b0
incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents:
12271
diff
changeset
|
1317 break |
e392d00ab5b0
incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents:
12271
diff
changeset
|
1318 parents = [p for p in other.changelog.parents(n) if p != nullid] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1319 if opts.get(b'no_merges') and len(parents) == 2: |
12273
e392d00ab5b0
incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents:
12271
diff
changeset
|
1320 continue |
e392d00ab5b0
incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents:
12271
diff
changeset
|
1321 count += 1 |
e392d00ab5b0
incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents:
12271
diff
changeset
|
1322 displayer.show(other[n]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1323 |
12730
33e1fd2aeb3c
incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12729
diff
changeset
|
1324 return _incoming(display, subreporecurse, ui, repo, source, opts) |
12273
e392d00ab5b0
incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents:
12271
diff
changeset
|
1325 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1326 |
46931
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1327 def _outgoing(ui, repo, dests, opts, subpath=None): |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1328 out = set() |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1329 others = [] |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1330 for path in urlutil.get_push_paths(repo, ui, dests): |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1331 dest = path.pushloc or path.loc |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1332 if subpath is not None: |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1333 subpath = urlutil.url(subpath) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1334 if subpath.isabs(): |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1335 dest = bytes(subpath) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1336 else: |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1337 p = urlutil.url(dest) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1338 p.path = os.path.normpath(b'%s/%s' % (p.path, subpath)) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1339 dest = bytes(p) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1340 branches = path.branch, opts.get(b'branch') or [] |
46930
0afe96e374a7
outgoing: pass subrepo path using function argument instead of abssource hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46915
diff
changeset
|
1341 |
46931
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1342 ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(dest)) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1343 revs, checkout = addbranchrevs(repo, repo, branches, opts.get(b'rev')) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1344 if revs: |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1345 revs = [repo[rev].node() for rev in scmutil.revrange(repo, revs)] |
12735
8888e56ac417
outgoing: unify common graphlog.outgoing and hg.outgoing code
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12734
diff
changeset
|
1346 |
46931
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1347 other = peer(repo, opts, dest) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1348 try: |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1349 outgoing = discovery.findcommonoutgoing( |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1350 repo, other, revs, force=opts.get(b'force') |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1351 ) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1352 o = outgoing.missing |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1353 out.update(o) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1354 if not o: |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1355 scmutil.nochangesfound(repo.ui, repo, outgoing.excluded) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1356 others.append(other) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1357 except: # re-raises |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1358 other.close() |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1359 raise |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1360 # make sure this is ordered by revision number |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1361 outgoing_revs = list(out) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1362 cl = repo.changelog |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1363 outgoing_revs.sort(key=cl.rev) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1364 return outgoing_revs, others |
12735
8888e56ac417
outgoing: unify common graphlog.outgoing and hg.outgoing code
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents:
12734
diff
changeset
|
1365 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1366 |
46931
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1367 def _outgoing_recurse(ui, repo, dests, opts): |
46913
b2740c547243
outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46912
diff
changeset
|
1368 ret = 1 |
b2740c547243
outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46912
diff
changeset
|
1369 if opts.get(b'subrepos'): |
b2740c547243
outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46912
diff
changeset
|
1370 ctx = repo[None] |
b2740c547243
outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46912
diff
changeset
|
1371 for subpath in sorted(ctx.substate): |
b2740c547243
outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46912
diff
changeset
|
1372 sub = ctx.sub(subpath) |
46931
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1373 ret = min(ret, sub.outgoing(ui, dests, opts)) |
46913
b2740c547243
outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46912
diff
changeset
|
1374 return ret |
b2740c547243
outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46912
diff
changeset
|
1375 |
b2740c547243
outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46912
diff
changeset
|
1376 |
46914
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1377 def _outgoing_filter(repo, revs, opts): |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1378 """apply revision filtering/ordering option for outgoing""" |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1379 limit = logcmdutil.getlimit(opts) |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1380 no_merges = opts.get(b'no_merges') |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1381 if opts.get(b'newest_first'): |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1382 revs.reverse() |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1383 if limit is None and not no_merges: |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1384 for r in revs: |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1385 yield r |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1386 return |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1387 |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1388 count = 0 |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1389 cl = repo.changelog |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1390 for n in revs: |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1391 if limit is not None and count >= limit: |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1392 break |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1393 parents = [p for p in cl.parents(n) if p != nullid] |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1394 if no_merges and len(parents) == 2: |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1395 continue |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1396 count += 1 |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1397 yield n |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1398 |
50b79f8b802d
outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46913
diff
changeset
|
1399 |
46931
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1400 def outgoing(ui, repo, dests, opts, subpath=None): |
46915
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1401 if opts.get(b'graph'): |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1402 logcmdutil.checkunsupportedgraphflags([], opts) |
46931
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1403 o, others = _outgoing(ui, repo, dests, opts, subpath=subpath) |
46912
627bb1875fee
outgoing: remove some early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
1404 ret = 1 |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1405 try: |
46912
627bb1875fee
outgoing: remove some early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
1406 if o: |
627bb1875fee
outgoing: remove some early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
1407 ret = 0 |
12400
40852b4b910c
incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents:
12314
diff
changeset
|
1408 |
46915
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1409 if opts.get(b'graph'): |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1410 revdag = logcmdutil.graphrevs(repo, o, opts) |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1411 ui.pager(b'outgoing') |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1412 displayer = logcmdutil.changesetdisplayer( |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1413 ui, repo, opts, buffered=True |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1414 ) |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1415 logcmdutil.displaygraph( |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1416 ui, repo, revdag, displayer, graphmod.asciiedges |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1417 ) |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1418 else: |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1419 ui.pager(b'outgoing') |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1420 displayer = logcmdutil.changesetdisplayer(ui, repo, opts) |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1421 for n in _outgoing_filter(repo, o, opts): |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1422 displayer.show(repo[n]) |
efc6f6a794bd
outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46914
diff
changeset
|
1423 displayer.close() |
46931
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1424 for oth in others: |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1425 cmdutil.outgoinghooks(ui, repo, oth, opts, o) |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1426 ret = min(ret, _outgoing_recurse(ui, repo, dests, opts)) |
46912
627bb1875fee
outgoing: remove some early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
1427 return ret # exit code is zero since we found outgoing changes |
46702
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46314
diff
changeset
|
1428 finally: |
46931
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1429 for oth in others: |
d4e4ccb75f99
outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46930
diff
changeset
|
1430 oth.close() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1431 |
12271
01dc8ba3e032
outgoing: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents:
12144
diff
changeset
|
1432 |
42197
57539e5ea2e0
verify: introduce a notion of "level"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42109
diff
changeset
|
1433 def verify(repo, level=None): |
2778 | 1434 """verify the consistency of a repository""" |
42197
57539e5ea2e0
verify: introduce a notion of "level"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
42109
diff
changeset
|
1435 ret = verifymod.verify(repo, level=level) |
25591
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1436 |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1437 # Broken subrepo references in hidden csets don't seem worth worrying about, |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1438 # since they can't be pushed/pulled, and --hidden can be used if they are a |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1439 # concern. |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1440 |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1441 # pathto() is needed for -R case |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1442 revs = repo.revs( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1443 b"filelog(%s)", util.pathto(repo.root, repo.getcwd(), b'.hgsubstate') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1444 ) |
25591
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1445 |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1446 if revs: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1447 repo.ui.status(_(b'checking subrepo links\n')) |
25591
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1448 for rev in revs: |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1449 ctx = repo[rev] |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1450 try: |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1451 for subpath in ctx.substate: |
29021
92d37fb3f1aa
verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28655
diff
changeset
|
1452 try: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1453 ret = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1454 ctx.sub(subpath, allowcreate=False).verify() or ret |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1455 ) |
29021
92d37fb3f1aa
verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28655
diff
changeset
|
1456 except error.RepoError as e: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1457 repo.ui.warn(b'%d: %s\n' % (rev, e)) |
25591
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1458 except Exception: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1459 repo.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1460 _(b'.hgsubstate is corrupt in revision %s\n') |
46114
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45957
diff
changeset
|
1461 % short(ctx.node()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1462 ) |
25591
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1463 |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25365
diff
changeset
|
1464 return ret |
11273
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1465 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1466 |
11273
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1467 def remoteui(src, opts): |
43807
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43238
diff
changeset
|
1468 """build a remote ui from ui or repo and opts""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1469 if util.safehasattr(src, b'baseui'): # looks like a repository |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1470 dst = src.baseui.copy() # drop repo-specific config |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1471 src = src.ui # copy target options from repo |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1472 else: # assume it's a global ui object |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1473 dst = src.copy() # keep all global options |
11273
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1474 |
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1475 # copy ssh-specific options |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1476 for o in b'ssh', b'remotecmd': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1477 v = opts.get(o) or src.config(b'ui', o) |
11273
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1478 if v: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1479 dst.setconfig(b"ui", o, v, b'copied') |
11273
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1480 |
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1481 # copy bundle-specific options |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1482 r = src.config(b'bundle', b'mainreporoot') |
11273
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1483 if r: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1484 dst.setconfig(b'bundle', b'mainreporoot', r, b'copied') |
11273
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1485 |
13192
4d03707916d3
https: use web.cacerts configuration from local repo to validate remote repo
Mads Kiilerich <mads@kiilerich.com>
parents:
12735
diff
changeset
|
1486 # copy selected local settings to the remote ui |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1487 for sect in (b'auth', b'hostfingerprints', b'hostsecurity', b'http_proxy'): |
11273
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1488 for key, val in src.configitems(sect): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1489 dst.setconfig(sect, key, val, b'copied') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1490 v = src.config(b'web', b'cacerts') |
29594
e417664a3339
ssl: remove special case of web.cacerts=! from remoteui()
Yuya Nishihara <yuya@tcha.org>
parents:
29424
diff
changeset
|
1491 if v: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1492 dst.setconfig(b'web', b'cacerts', util.expandpath(v), b'copied') |
11273
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1493 |
d1908cb95a82
remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents:
11256
diff
changeset
|
1494 return dst |
26219
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1495 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1496 |
26219
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1497 # Files of interest |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1498 # Used to check if the repository has changed looking at mtime and size of |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26654
diff
changeset
|
1499 # these files. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1500 foi = [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1501 (b'spath', b'00changelog.i'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1502 (b'spath', b'phaseroots'), # ! phase can change content at the same size |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1503 (b'spath', b'obsstore'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1504 (b'path', b'bookmarks'), # ! bookmark can change content at the same size |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1505 ] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42973
diff
changeset
|
1506 |
26219
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1507 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1508 class cachedlocalrepo(object): |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1509 """Holds a localrepository that can be cached and reused.""" |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1510 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1511 def __init__(self, repo): |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1512 """Create a new cached repo from an existing repo. |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1513 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1514 We assume the passed in repo was recently created. If the |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1515 repo has changed between when it was created and when it was |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1516 turned into a cache, it may not refresh properly. |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1517 """ |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1518 assert isinstance(repo, localrepo.localrepository) |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1519 self._repo = repo |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1520 self._state, self.mtime = self._repostate() |
28119
91a827e760df
hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28020
diff
changeset
|
1521 self._filtername = repo.filtername |
26219
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1522 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1523 def fetch(self): |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1524 """Refresh (if necessary) and return a repository. |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1525 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1526 If the cached instance is out of date, it will be recreated |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1527 automatically and returned. |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1528 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1529 Returns a tuple of the repo and a boolean indicating whether a new |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1530 repo instance was created. |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1531 """ |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1532 # We compare the mtimes and sizes of some well-known files to |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1533 # determine if the repo changed. This is not precise, as mtimes |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1534 # are susceptible to clock skew and imprecise filesystems and |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1535 # file content can change while maintaining the same size. |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1536 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1537 state, mtime = self._repostate() |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1538 if state == self._state: |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1539 return self._repo, False |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1540 |
28119
91a827e760df
hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28020
diff
changeset
|
1541 repo = repository(self._repo.baseui, self._repo.url()) |
91a827e760df
hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28020
diff
changeset
|
1542 if self._filtername: |
91a827e760df
hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28020
diff
changeset
|
1543 self._repo = repo.filtered(self._filtername) |
91a827e760df
hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28020
diff
changeset
|
1544 else: |
91a827e760df
hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28020
diff
changeset
|
1545 self._repo = repo.unfiltered() |
26219
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1546 self._state = state |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1547 self.mtime = mtime |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1548 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1549 return self._repo, True |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1550 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1551 def _repostate(self): |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1552 state = [] |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1553 maxmtime = -1 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1554 for attr, fname in foi: |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1555 prefix = getattr(self._repo, attr) |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1556 p = os.path.join(prefix, fname) |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1557 try: |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1558 st = os.stat(p) |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1559 except OSError: |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1560 st = os.stat(prefix) |
36789
ffa3026d4196
cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents:
36725
diff
changeset
|
1561 state.append((st[stat.ST_MTIME], st.st_size)) |
ffa3026d4196
cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents:
36725
diff
changeset
|
1562 maxmtime = max(maxmtime, st[stat.ST_MTIME]) |
26219
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1563 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1564 return tuple(state), maxmtime |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1565 |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1566 def copy(self): |
26240
2b1434e5eaa0
hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26219
diff
changeset
|
1567 """Obtain a copy of this class instance. |
2b1434e5eaa0
hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26219
diff
changeset
|
1568 |
2b1434e5eaa0
hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26219
diff
changeset
|
1569 A new localrepository instance is obtained. The new instance should be |
2b1434e5eaa0
hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26219
diff
changeset
|
1570 completely independent of the original. |
2b1434e5eaa0
hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26219
diff
changeset
|
1571 """ |
2b1434e5eaa0
hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26219
diff
changeset
|
1572 repo = repository(self._repo.baseui, self._repo.origroot) |
28119
91a827e760df
hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28020
diff
changeset
|
1573 if self._filtername: |
91a827e760df
hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28020
diff
changeset
|
1574 repo = repo.filtered(self._filtername) |
91a827e760df
hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28020
diff
changeset
|
1575 else: |
91a827e760df
hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
28020
diff
changeset
|
1576 repo = repo.unfiltered() |
26240
2b1434e5eaa0
hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26219
diff
changeset
|
1577 c = cachedlocalrepo(repo) |
26219
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1578 c._state = self._state |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1579 c.mtime = self.mtime |
ae33fff17c1e
hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents:
26103
diff
changeset
|
1580 return c |