annotate mercurial/hg.py @ 49692:ebb5e38fdafc

peer-or-repo: build a repo directly in the `repo` function We skip the ambiguous _peerorrepo function to explicitly build a repo within the dedicated function. The peer scheme are therefore no longer considered to build the object.
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Tue, 29 Nov 2022 22:21:19 +0100
parents c0acf5440fe1
children c4731eee1c8f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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: 46794
diff changeset
3 # Copyright 2005-2007 Olivia Mackall <olivia@selenic.com>
2859
345bac2bc4ec update copyrights.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2847
diff changeset
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
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 10099
diff changeset
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
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
10 import os
48551
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
11 import posixpath
25939
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
12 import shutil
36781
ffa3026d4196 cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents: 36702
diff changeset
13 import stat
48494
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
14 import weakref
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 _
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
17 from .node import (
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
18 hex,
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46953
diff changeset
19 sha1nodeconstants,
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
20 short,
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
21 )
43089
c59eb1560c44 py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43077
diff changeset
22 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
23
25939
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
24 from . import (
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
25 bookmarks,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
26 bundlerepo,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
27 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
28 destutil,
25939
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
29 discovery,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
30 error,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
31 exchange,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
32 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
33 graphmod,
25939
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
34 httppeer,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
35 localrepo,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
36 lock,
35888
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35766
diff changeset
37 logcmdutil,
35347
a29fe459fc49 remotenames: rename related file and storage dir to logexchange
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35331
diff changeset
38 logexchange,
25939
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
39 merge as mergemod,
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44657
diff changeset
40 mergestate as mergestatemod,
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
41 narrowspec,
25939
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
42 phases,
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45106
diff changeset
43 requirements,
25939
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
44 scmutil,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
45 sshpeer,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
46 statichttprepo,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
47 ui as uimod,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
48 unionrepo,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
49 url,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
50 util,
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
51 verify as verifymod,
31218
4cc3797aa59c vfs: use 'vfs' module directly in 'mercurial.hg'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31168
diff changeset
52 vfs as vfsmod,
25939
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
53 )
47299
7edaf91c7886 updatecaches: use the `caches` argument instead of a special `full` value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47233
diff changeset
54 from .interfaces import repository as repositorymod
46691
1099541b6462 hg: convert an exception to bytes in the repo creation exception handler
Matt Harbison <matt_harbison@yahoo.com>
parents: 46314
diff changeset
55 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
56 hashutil,
1099541b6462 hg: convert an exception to bytes in the repo creation exception handler
Matt Harbison <matt_harbison@yahoo.com>
parents: 46314
diff changeset
57 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
58 urlutil,
46691
1099541b6462 hg: convert an exception to bytes in the repo creation exception handler
Matt Harbison <matt_harbison@yahoo.com>
parents: 46314
diff changeset
59 )
1099541b6462 hg: convert an exception to bytes in the repo creation exception handler
Matt Harbison <matt_harbison@yahoo.com>
parents: 46314
diff changeset
60
42813
268662aac075 interfaces: create a new folder for interfaces and move repository.py in it
Pulkit Goyal <pulkit@yandex-team.ru>
parents: 42604
diff changeset
61
25939
130c0b83e963 hg: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25761
diff changeset
62 release = lock.release
0
9117c6561b0b Add back links from file revisions to changeset revisions
mpm@selenic.com
parents:
diff changeset
63
29424
f21e0d91d386 share: move magic string to a constant
Martijn Pieters <mjpieters@fb.com>
parents: 29389
diff changeset
64 # shared features
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
65 sharedbookmarks = b'bookmarks'
29424
f21e0d91d386 share: move magic string to a constant
Martijn Pieters <mjpieters@fb.com>
parents: 29389
diff changeset
66
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
67
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
68 def addbranchrevs(lrepo, other, branches, revs):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
69 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
70 hashbranch, branches = branches
3d6915f5a2bb improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents: 11312
diff changeset
71 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
72 x = revs or None
37481
7c848ab13eff addbranchrevs: no longer accept revset as "revs" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 37480
diff changeset
73 if revs:
22818
d7b114493315 repair: use `first` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22648
diff changeset
74 y = revs[0]
d7b114493315 repair: use `first` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22648
diff changeset
75 else:
d7b114493315 repair: use `first` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22648
diff changeset
76 y = None
d7b114493315 repair: use `first` instead of direct indexing
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 22648
diff changeset
77 return x, y
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24290
diff changeset
78 if revs:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24290
diff changeset
79 revs = list(revs)
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24290
diff changeset
80 else:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24290
diff changeset
81 revs = []
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 24290
diff changeset
82
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
83 if not peer.capable(b'branchmap'):
11322
3d6915f5a2bb improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents: 11312
diff changeset
84 if branches:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
85 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
86 revs.append(hashbranch)
10380
ee72d89c0d9f addbranchrevs: fallback for older servers
Sune Foldager <cryo@cyanite.org>
parents: 10379
diff changeset
87 return revs, revs[0]
37640
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
88
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
89 with peer.commandexecutor() as e:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
90 branchmap = e.callcommand(b'branchmap', {}).result()
11322
3d6915f5a2bb improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents: 11312
diff changeset
91
13047
6c375e07d673 branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents: 12735
diff changeset
92 def primary(branch):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
93 if branch == b'.':
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
94 if not lrepo:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
95 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
96 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
97 if branch in branchmap:
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
98 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
99 return True
10365
d757bc0c7865 interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents: 10358
diff changeset
100 else:
11322
3d6915f5a2bb improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents: 11312
diff changeset
101 return False
3d6915f5a2bb improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents: 11312
diff changeset
102
3d6915f5a2bb improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents: 11312
diff changeset
103 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
104 if not primary(branch):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
105 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
106 if hashbranch:
13047
6c375e07d673 branch: operate on branch names in local string space where possible
Matt Mackall <mpm@selenic.com>
parents: 12735
diff changeset
107 if not primary(hashbranch):
11322
3d6915f5a2bb improve --branch processing (and differentiate from # syntax)
Sune Foldager <cryo@cyanite.org>
parents: 11312
diff changeset
108 revs.append(hashbranch)
10365
d757bc0c7865 interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents: 10358
diff changeset
109 return revs, revs[0]
d757bc0c7865 interpret repo#name url syntax as branch instead of revision
Sune Foldager <cryo@cyanite.org>
parents: 10358
diff changeset
110
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
111
49683
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
112 def _isfile(path):
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
113 try:
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
114 # we use os.stat() directly here instead of os.path.isfile()
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
115 # because the latter started returning `False` on invalid path
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
116 # exceptions starting in 3.8 and we care about handling
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
117 # invalid paths specially here.
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
118 st = os.stat(path)
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
119 except ValueError as e:
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
120 msg = stringutil.forcebytestr(e)
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
121 raise error.Abort(_(b'invalid path %s: %s') % (path, msg))
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
122 except OSError:
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
123 return False
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
124 else:
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
125 return stat.S_ISREG(st.st_mode)
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
126
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
127
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
128 class LocalFactory:
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
129 """thin wrapper to dispatch between localrepo and bundle repo"""
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
130
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
131 @staticmethod
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
132 def islocal(path: bytes) -> bool:
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
133 path = util.expandpath(urlutil.urllocalpath(path))
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
134 return not _isfile(path)
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
135
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
136 @staticmethod
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
137 def instance(ui, path, *args, **kwargs):
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
138 path = util.expandpath(urlutil.urllocalpath(path))
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
139 if _isfile(path):
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
140 cls = bundlerepo
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
141 else:
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
142 cls = localrepo
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
143 return cls.instance(ui, path, *args, **kwargs)
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
144
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
145
49688
f73f02ef8cb6 peer-or-repo: split the scheme between repo and peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49687
diff changeset
146 repo_schemes = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
147 b'bundle': bundlerepo,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
148 b'union': unionrepo,
49683
d9791643aab7 peer-or-repo: make sure object in "scheme" have a `instance` object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49682
diff changeset
149 b'file': LocalFactory,
49688
f73f02ef8cb6 peer-or-repo: split the scheme between repo and peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49687
diff changeset
150 }
f73f02ef8cb6 peer-or-repo: split the scheme between repo and peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49687
diff changeset
151
f73f02ef8cb6 peer-or-repo: split the scheme between repo and peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49687
diff changeset
152 peer_schemes = {
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
153 b'http': httppeer,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
154 b'https': httppeer,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
155 b'ssh': sshpeer,
49690
c37287340c00 static-http: have `statichttprepo.instance` return a peer object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49688
diff changeset
156 b'static-http': statichttprepo,
14568
5f002e3336ba hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents: 14556
diff changeset
157 }
5f002e3336ba hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents: 14556
diff changeset
158
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
159
14568
5f002e3336ba hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents: 14556
diff changeset
160 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
161 u = urlutil.url(path)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
162 scheme = u.scheme or b'file'
49688
f73f02ef8cb6 peer-or-repo: split the scheme between repo and peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49687
diff changeset
163 if scheme in peer_schemes:
f73f02ef8cb6 peer-or-repo: split the scheme between repo and peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49687
diff changeset
164 return peer_schemes[scheme]
f73f02ef8cb6 peer-or-repo: split the scheme between repo and peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49687
diff changeset
165 if scheme in repo_schemes:
f73f02ef8cb6 peer-or-repo: split the scheme between repo and peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49687
diff changeset
166 return repo_schemes[scheme]
f73f02ef8cb6 peer-or-repo: split the scheme between repo and peer
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49687
diff changeset
167 return LocalFactory
14568
5f002e3336ba hg: split peer and repo lookup tables
Matt Mackall <mpm@selenic.com>
parents: 14556
diff changeset
168
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
169
14605
9f1139cf5c76 hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents: 14568
diff changeset
170 def islocal(repo):
20355
7d269e7620c4 hg: note that islocal only accepts paths pointing to repos
Siddharth Agarwal <sid0@fb.com>
parents: 20354
diff changeset
171 '''return true if repo (or path pointing to repo) is local'''
33018
071732d9c210 py3: check for bytes instead of str in isinstance
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32970
diff changeset
172 if isinstance(repo, bytes):
49687
0d5b2e010614 peer-or-repo: stop relying on AttributeError in `islocal`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49686
diff changeset
173 cls = _peerlookup(repo)
0d5b2e010614 peer-or-repo: stop relying on AttributeError in `islocal`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49686
diff changeset
174 cls.instance # make sure we load the module
0d5b2e010614 peer-or-repo: stop relying on AttributeError in `islocal`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49686
diff changeset
175 if util.safehasattr(cls, 'islocal'):
0d5b2e010614 peer-or-repo: stop relying on AttributeError in `islocal`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49686
diff changeset
176 return cls.islocal(repo) # pytype: disable=module-attr
0d5b2e010614 peer-or-repo: stop relying on AttributeError in `islocal`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49686
diff changeset
177 return False
49686
b478e1b132e9 repo-or-peer: deprecate calling `islocal` on non-path object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49684
diff changeset
178 repo.ui.deprecwarn(b"use obj.local() instead of islocal(obj)", b"6.4")
14605
9f1139cf5c76 hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents: 14568
diff changeset
179 return repo.local()
9f1139cf5c76 hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents: 14568
diff changeset
180
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
181
42109
2a3c0106ded9 import: suppress accept: header
timeless <timeless@mozdev.org>
parents: 41484
diff changeset
182 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
183 '''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
184 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
185 if pathurl.islocal():
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
186 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
187 else:
42109
2a3c0106ded9 import: suppress accept: header
timeless <timeless@mozdev.org>
parents: 41484
diff changeset
188 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
189
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
190
20858
bc56ec9e64df hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20825
diff changeset
191 # 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
192 wirepeersetupfuncs = []
bc56ec9e64df hg: introduce "wirepeersetupfuncs" to setup wire peer by extensions (issue4109)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 20825
diff changeset
193
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
194
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
195 def _peerorrepo(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
196 ui, path, create=False, presetupfuncs=None, intents=None, createopts=None
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
197 ):
14605
9f1139cf5c76 hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents: 14568
diff changeset
198 """return a repository object for the specified path"""
49682
1e6c37360527 peer-or-repo: move the object setup in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49305
diff changeset
199 cls = _peerlookup(path)
1e6c37360527 peer-or-repo: move the object setup in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49305
diff changeset
200 obj = cls.instance(ui, path, create, intents=intents, createopts=createopts)
1e6c37360527 peer-or-repo: move the object setup in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49305
diff changeset
201 _setup_repo_or_peer(ui, obj, presetupfuncs)
1e6c37360527 peer-or-repo: move the object setup in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49305
diff changeset
202 return obj
1e6c37360527 peer-or-repo: move the object setup in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49305
diff changeset
203
1e6c37360527 peer-or-repo: move the object setup in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49305
diff changeset
204
1e6c37360527 peer-or-repo: move the object setup in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49305
diff changeset
205 def _setup_repo_or_peer(ui, obj, presetupfuncs=None):
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
206 ui = getattr(obj, "ui", ui)
32379
71e735bd8170 dispatch: make request accept additional reposetups
Jun Wu <quark@fb.com>
parents: 32172
diff changeset
207 for f in presetupfuncs or []:
71e735bd8170 dispatch: make request accept additional reposetups
Jun Wu <quark@fb.com>
parents: 32172
diff changeset
208 f(ui, obj)
40996
6f2510b581a0 extensions: use ui.log() interface to provide detailed loading information
Yuya Nishihara <yuya@tcha.org>
parents: 40639
diff changeset
209 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
210 with util.timedcm('all reposetup') as allreposetupstats:
39510
340170192874 extensions: trace the total time of running all reposetup callbacks
Boris Feld <boris.feld@octobus.net>
parents: 39507
diff changeset
211 for name, module in extensions.extensions(ui):
40996
6f2510b581a0 extensions: use ui.log() interface to provide detailed loading information
Yuya Nishihara <yuya@tcha.org>
parents: 40639
diff changeset
212 ui.log(b'extension', b' - running reposetup for %s\n', name)
39510
340170192874 extensions: trace the total time of running all reposetup callbacks
Boris Feld <boris.feld@octobus.net>
parents: 39507
diff changeset
213 hook = getattr(module, 'reposetup', None)
340170192874 extensions: trace the total time of running all reposetup callbacks
Boris Feld <boris.feld@octobus.net>
parents: 39507
diff changeset
214 if hook:
43238
101ae8bbfa02 cleanup: hgdemandimport.tracing accepts strings, not bytes
Augie Fackler <augie@google.com>
parents: 43117
diff changeset
215 with util.timedcm('reposetup %r', name) as stats:
39510
340170192874 extensions: trace the total time of running all reposetup callbacks
Boris Feld <boris.feld@octobus.net>
parents: 39507
diff changeset
216 hook(ui, obj)
49682
1e6c37360527 peer-or-repo: move the object setup in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49305
diff changeset
217 msg = b' > reposetup for %s took %s\n'
1e6c37360527 peer-or-repo: move the object setup in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49305
diff changeset
218 ui.log(b'extension', msg, name, stats)
40996
6f2510b581a0 extensions: use ui.log() interface to provide detailed loading information
Yuya Nishihara <yuya@tcha.org>
parents: 40639
diff changeset
219 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
220 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
221 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
222 f(ui, obj)
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
223
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
224
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
225 def repository(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
226 ui,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
227 path=b'',
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
228 create=False,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
229 presetupfuncs=None,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
230 intents=None,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
231 createopts=None,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
232 ):
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
233 """return a repository object for the specified path"""
49692
ebb5e38fdafc peer-or-repo: build a repo directly in the `repo` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49691
diff changeset
234 scheme = urlutil.url(path).scheme
ebb5e38fdafc peer-or-repo: build a repo directly in the `repo` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49691
diff changeset
235 if scheme is None:
ebb5e38fdafc peer-or-repo: build a repo directly in the `repo` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49691
diff changeset
236 scheme = b'file'
ebb5e38fdafc peer-or-repo: build a repo directly in the `repo` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49691
diff changeset
237 cls = repo_schemes.get(scheme)
ebb5e38fdafc peer-or-repo: build a repo directly in the `repo` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49691
diff changeset
238 if cls is None:
ebb5e38fdafc peer-or-repo: build a repo directly in the `repo` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49691
diff changeset
239 if scheme in peer_schemes:
ebb5e38fdafc peer-or-repo: build a repo directly in the `repo` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49691
diff changeset
240 raise error.Abort(_(b"repository '%s' is not local") % path)
ebb5e38fdafc peer-or-repo: build a repo directly in the `repo` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49691
diff changeset
241 cls = LocalFactory
ebb5e38fdafc peer-or-repo: build a repo directly in the `repo` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49691
diff changeset
242 repo = cls.instance(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
243 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
244 path,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
245 create,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
246 intents=intents,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
247 createopts=createopts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
248 )
49692
ebb5e38fdafc peer-or-repo: build a repo directly in the `repo` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49691
diff changeset
249 _setup_repo_or_peer(ui, repo, presetupfuncs=presetupfuncs)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
250 return repo.filtered(b'visible')
14605
9f1139cf5c76 hg: rearrange peer scheme lookup
Matt Mackall <mpm@selenic.com>
parents: 14568
diff changeset
251
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
252
39549
089fc0db0954 hg: allow extra arguments to be passed to repo creation (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39510
diff changeset
253 def peer(uiorrepo, opts, path, create=False, intents=None, createopts=None):
14554
68db17047637 hg: add peer method
Matt Mackall <mpm@selenic.com>
parents: 14553
diff changeset
254 '''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
255 rui = remoteui(uiorrepo, opts)
49691
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
256 scheme = urlutil.url(path).scheme
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
257 if scheme in peer_schemes:
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
258 cls = peer_schemes[scheme]
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
259 peer = cls.instance(
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
260 rui,
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
261 path,
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
262 create,
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
263 intents=intents,
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
264 createopts=createopts,
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
265 )
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
266 _setup_repo_or_peer(rui, peer)
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
267 else:
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
268 # this is a repository
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
269 repo = repository(
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
270 rui,
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
271 path,
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
272 create,
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
273 intents=intents,
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
274 createopts=createopts,
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
275 )
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
276 peer = repo.peer()
c0acf5440fe1 peer-or-repo: build a peer directly in the `peer` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49690
diff changeset
277 return peer
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
278
14554
68db17047637 hg: add peer method
Matt Mackall <mpm@selenic.com>
parents: 14553
diff changeset
279
2719
532809ba1db5 hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2631
diff changeset
280 def defaultdest(source):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
281 """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
282
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33687
diff changeset
283 >>> defaultdest(b'foo')
20799
069bf1b821c8 clone: add doctest for default destination
Yuya Nishihara <yuya@tcha.org>
parents: 20790
diff changeset
284 'foo'
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33687
diff changeset
285 >>> defaultdest(b'/foo/bar')
20799
069bf1b821c8 clone: add doctest for default destination
Yuya Nishihara <yuya@tcha.org>
parents: 20790
diff changeset
286 'bar'
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33687
diff changeset
287 >>> defaultdest(b'/')
20799
069bf1b821c8 clone: add doctest for default destination
Yuya Nishihara <yuya@tcha.org>
parents: 20790
diff changeset
288 ''
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33687
diff changeset
289 >>> defaultdest(b'')
20800
8253e55930a3 clone: abort if default destination has no meaningful name (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 20799
diff changeset
290 ''
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33687
diff changeset
291 >>> 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
292 ''
34131
0fa781320203 doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents: 33687
diff changeset
293 >>> defaultdest(b'http://example.org/foo/')
20799
069bf1b821c8 clone: add doctest for default destination
Yuya Nishihara <yuya@tcha.org>
parents: 20790
diff changeset
294 'foo'
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
295 """
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
296 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
297 if not path:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
298 return b''
20800
8253e55930a3 clone: abort if default destination has no meaningful name (BC)
Yuya Nishihara <yuya@tcha.org>
parents: 20799
diff changeset
299 return os.path.basename(os.path.normpath(path))
2774
8cd3e19bf4a5 Add a doc string
Matt Mackall <mpm@selenic.com>
parents: 2768
diff changeset
300
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
301
36159
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
302 def sharedreposource(repo):
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
303 """Returns repository object for source repository of a shared repo.
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
304
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
305 If repo is not a shared repository, returns None.
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
306 """
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
307 if repo.sharedpath == repo.path:
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
308 return None
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
309
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
310 if util.safehasattr(repo, b'srcrepo') and repo.srcrepo:
36159
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
311 return repo.srcrepo
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
312
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
313 # 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: 36049
diff changeset
314 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
315 srcurl, branches = urlutil.parseurl(source)
36159
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
316 srcrepo = repository(repo.ui, srcurl)
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
317 repo.srcrepo = srcrepo
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
318 return srcrepo
0fe7e39dc683 hg: move share._getsrcrepo into core
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36049
diff changeset
319
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
320
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
321 def share(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
322 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
323 source,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
324 dest=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
325 update=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
326 bookmarks=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
327 defaultpath=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
328 relative=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
329 ):
8800
971e38a9344b add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents: 8649
diff changeset
330 '''create a shared repository'''
971e38a9344b add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents: 8649
diff changeset
331
49684
229e0ed88895 share: stop using 'islocal' with repo instance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49683
diff changeset
332 not_local_msg = _(b'can only share local repositories')
229e0ed88895 share: stop using 'islocal' with repo instance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49683
diff changeset
333 if util.safehasattr(source, 'local'):
229e0ed88895 share: stop using 'islocal' with repo instance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49683
diff changeset
334 if source.local() is None:
229e0ed88895 share: stop using 'islocal' with repo instance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49683
diff changeset
335 raise error.Abort(not_local_msg)
229e0ed88895 share: stop using 'islocal' with repo instance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49683
diff changeset
336 elif not islocal(source):
229e0ed88895 share: stop using 'islocal' with repo instance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49683
diff changeset
337 # XXX why are we getting bytes here ?
229e0ed88895 share: stop using 'islocal' with repo instance
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 49683
diff changeset
338 raise error.Abort(not_local_msg)
8800
971e38a9344b add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents: 8649
diff changeset
339
8807
8bf6eb68ddaf share: allow dest to default to the basename of source
Matt Mackall <mpm@selenic.com>
parents: 8800
diff changeset
340 if not dest:
10099
f5e46dfb38c7 share: use defaultdest to compute unspecified destination
Brendan Cully <brendan@kublai.com>
parents: 9984
diff changeset
341 dest = defaultdest(source)
9344
eb6af02307ec Merge with i18n-stable
Matt Mackall <mpm@selenic.com>
parents: 9245
diff changeset
342 else:
46953
394cfc42c05c share: use `get_clone_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46951
diff changeset
343 dest = urlutil.get_clone_path(ui, dest)[1]
8807
8bf6eb68ddaf share: allow dest to default to the basename of source
Matt Mackall <mpm@selenic.com>
parents: 8800
diff changeset
344
36049
488e313954ea py3: check for bytes instead of str in hg.share()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 36003
diff changeset
345 if isinstance(source, bytes):
46953
394cfc42c05c share: use `get_clone_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46951
diff changeset
346 origsource, source, branches = urlutil.get_clone_path(ui, source)
8800
971e38a9344b add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents: 8649
diff changeset
347 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
348 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
349 else:
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
350 srcrepo = source.local()
8800
971e38a9344b add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents: 8649
diff changeset
351 checkout = None
971e38a9344b add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents: 8649
diff changeset
352
39849
d3d4b4b5f725 localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39848
diff changeset
353 shareditems = set()
d3d4b4b5f725 localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39848
diff changeset
354 if bookmarks:
d3d4b4b5f725 localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39848
diff changeset
355 shareditems.add(sharedbookmarks)
d3d4b4b5f725 localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39848
diff changeset
356
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
357 r = repository(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
358 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
359 dest,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
360 create=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
361 createopts={
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
362 b'sharedrepo': srcrepo,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
363 b'sharedrelative': relative,
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
364 b'shareditems': shareditems,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
365 },
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
366 )
8800
971e38a9344b add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents: 8649
diff changeset
367
39849
d3d4b4b5f725 localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39848
diff changeset
368 postshare(srcrepo, r, defaultpath=defaultpath)
40575
fb490d798be0 share: reload repo after adjusting it in postshare()
Martin von Zweigbergk <martinvonz@google.com>
parents: 40440
diff changeset
369 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
370 _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
371 return r
8800
971e38a9344b add helper function to create shared repos
Matt Mackall <mpm@selenic.com>
parents: 8649
diff changeset
372
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
373
45485
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
374 def _prependsourcehgrc(repo):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
375 """copies the source repo config and prepend it in current repo .hg/hgrc
45485
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
376 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: 45386
diff changeset
377 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: 45386
diff changeset
378 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: 45386
diff changeset
379 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: 45386
diff changeset
380
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
381 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: 45386
diff changeset
382 return
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
383
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
384 currentconfig = b''
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
385 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: 45386
diff changeset
386 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: 45386
diff changeset
387
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
388 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: 45386
diff changeset
389 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: 45386
diff changeset
390 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: 45386
diff changeset
391 fp.write(sourceconfig)
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
392 fp.write(b'\n')
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
393 fp.write(currentconfig)
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
394
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
395
34878
9f7ecc5bbc28 share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents: 34815
diff changeset
396 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
397 """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
398
9f7ecc5bbc28 share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents: 34815
diff changeset
399 Copy the store data to the repo and remove the sharedpath data.
39606
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39555
diff changeset
400
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39555
diff changeset
401 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: 39555
diff changeset
402
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39555
diff changeset
403 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: 39555
diff changeset
404 called.
34878
9f7ecc5bbc28 share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents: 34815
diff changeset
405 """
9f7ecc5bbc28 share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents: 34815
diff changeset
406
41391
bc843e251134 unshare: use context manager for locks
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
407 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
408 # 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
409 # 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
410 # 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
411 # fail
9f7ecc5bbc28 share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents: 34815
diff changeset
412 destlock = copystore(ui, repo, repo.path)
41391
bc843e251134 unshare: use context manager for locks
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
413 with destlock or util.nullcontextmanager():
45485
b71858b42963 localrepo: load the share source .hg/hgrc also in share-safe mode (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45386
diff changeset
414 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: 45386
diff changeset
415 # 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: 45386
diff changeset
416 # 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: 45386
diff changeset
417 # 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: 45386
diff changeset
418 _prependsourcehgrc(repo)
34878
9f7ecc5bbc28 share: move the implementation of 'unshare' to the 'hg' module
Matt Harbison <matt_harbison@yahoo.com>
parents: 34815
diff changeset
419
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
420 sharefile = repo.vfs.join(b'sharedpath')
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
421 util.rename(sharefile, sharefile + b'.old')
41391
bc843e251134 unshare: use context manager for locks
Martin von Zweigbergk <martinvonz@google.com>
parents: 41365
diff changeset
422
45386
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
423 repo.requirements.discard(requirements.SHARED_REQUIREMENT)
034d94f8761b requirements: introduce constants for `shared` and `relshared` requirements
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45372
diff changeset
424 repo.requirements.discard(requirements.RELATIVE_SHARED_REQUIREMENT)
45106
a03c177a4679 scmutil: add writereporequirements() and route requires writing through it
Pulkit Goyal <7895pulkit@gmail.com>
parents: 44856
diff changeset
425 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
426
39606
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39555
diff changeset
427 # 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: 39555
diff changeset
428 # 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: 39555
diff changeset
429 # try to keep the existing repo usable.
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39555
diff changeset
430 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
431
34879
7d51a7792f52 subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents: 34878
diff changeset
432 # 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
433 # removed from .hgsub
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
434 c = newrepo[b'.']
34879
7d51a7792f52 subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents: 34878
diff changeset
435 subs = c.substate
7d51a7792f52 subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents: 34878
diff changeset
436 for s in sorted(subs):
7d51a7792f52 subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents: 34878
diff changeset
437 c.sub(s).unshare()
7d51a7792f52 subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents: 34878
diff changeset
438
39606
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39555
diff changeset
439 localrepo.poisonrepository(repo)
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39555
diff changeset
440
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39555
diff changeset
441 return newrepo
c5e6c1ba1c79 hg: don't reuse repo instance after unshare()
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39555
diff changeset
442
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
443
39849
d3d4b4b5f725 localrepo: support writing shared file (API)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39848
diff changeset
444 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
445 """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
446
bced7180db19 hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27344
diff changeset
447 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
448 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
449
bced7180db19 hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27344
diff changeset
450 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
451 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
452 """
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
453 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
454 if default:
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43089
diff changeset
455 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
456 destrepo.vfs.write(b'hgrc', util.tonativeeol(template % default))
45372
77b8588dd84e requirements: introduce new requirements related module
Pulkit Goyal <7895pulkit@gmail.com>
parents: 45106
diff changeset
457 if requirements.NARROW_REQUIREMENT in sourcerepo.requirements:
41043
ce0bc2952e2a narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents: 40996
diff changeset
458 with destrepo.wlock():
41229
50ca531f1f24 narrow: copy store narrowspec to working copy immediately
Martin von Zweigbergk <martinvonz@google.com>
parents: 41043
diff changeset
459 narrowspec.copytoworkingcopy(destrepo)
27354
bced7180db19 hg: establish function for performing post-share actions
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27344
diff changeset
460
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
461
28632
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
462 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
463 """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
464
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
465 ``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
466 """
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
467 if not update:
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
468 return
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
469
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
470 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
471 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
472 checkout = update
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
473 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
474 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
475 continue
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
476 try:
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
477 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
478 break
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
479 except error.RepoLookupError:
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
480 continue
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
481 _update(repo, uprev)
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
482
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
483
15078
193e7018dc8c hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents: 14952
diff changeset
484 def copystore(ui, srcrepo, destpath):
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
485 """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
486
193e7018dc8c hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents: 14952
diff changeset
487 returns destlock
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
488 """
15078
193e7018dc8c hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents: 14952
diff changeset
489 destlock = None
193e7018dc8c hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents: 14952
diff changeset
490 try:
193e7018dc8c hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents: 14952
diff changeset
491 hardlink = None
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
492 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
493 with ui.makeprogress(topic, unit=_(b'files')) as progress:
39388
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
494 num = 0
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
495 srcpublishing = srcrepo.publishing()
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
496 srcvfs = vfsmod.vfs(srcrepo.sharedpath)
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
497 dstvfs = vfsmod.vfs(destpath)
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
498 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
499 if srcpublishing and f.endswith(b'phaseroots'):
39388
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
500 continue
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
501 dstbase = os.path.dirname(f)
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
502 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: 39186
diff changeset
503 dstvfs.mkdir(dstbase)
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
504 if srcvfs.exists(f):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
505 if f.endswith(b'data'):
39388
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
506 # '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
507 lockfile = os.path.join(dstbase, b"lock")
39388
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
508 # 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: 39186
diff changeset
509 destlock = lock.lock(dstvfs, lockfile)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
510 hardlink, n = util.copyfiles(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
511 srcvfs.join(f), dstvfs.join(f), hardlink, progress
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
512 )
39388
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
513 num += n
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
514 if hardlink:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
515 ui.debug(b"linked %d files\n" % num)
39388
ddfd80029306 hg: ensure the progress bar is completed when copying the store
Matt Harbison <matt_harbison@yahoo.com>
parents: 39186
diff changeset
516 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
517 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
518 return destlock
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
519 except: # re-raises
15078
193e7018dc8c hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents: 14952
diff changeset
520 release(destlock)
193e7018dc8c hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents: 14952
diff changeset
521 raise
193e7018dc8c hg: extract copying the store out of clone
Simon Heimberg <simohe@besonet.ch>
parents: 14952
diff changeset
522
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
523
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
524 def clonewithshare(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
525 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
526 peeropts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
527 sharepath,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
528 source,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
529 srcpeer,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
530 dest,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
531 pull=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
532 rev=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
533 update=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
534 stream=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
535 ):
25761
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
536 """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
537
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
538 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
539 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
540 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
541 True.
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
542 """
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
543 revs = None
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
544 if rev:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
545 if not srcpeer.capable(b'lookup'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
546 raise error.Abort(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
547 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
548 b"src repository does not support "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
549 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
550 b"support clone by revision"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
551 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
552 )
37640
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
553
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
554 # TODO this is batchable.
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
555 remoterevs = []
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
556 for r in rev:
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
557 with srcpeer.commandexecutor() as e:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
558 remoterevs.append(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
559 e.callcommand(
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
560 b'lookup',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
561 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
562 b'key': r,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
563 },
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
564 ).result()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
565 )
37640
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
566 revs = remoterevs
25761
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
567
28289
d493d64757eb hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27637
diff changeset
568 # 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
569 # 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
570 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
571 # 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
572 try:
d493d64757eb hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27637
diff changeset
573 util.makedir(pooldir, False)
49305
53e9422a9b45 py3: catch FileExistsError instead of checking errno == EEXIST
Manuel Jacob <me@manueljacob.de>
parents: 49301
diff changeset
574 except FileExistsError:
53e9422a9b45 py3: catch FileExistsError instead of checking errno == EEXIST
Manuel Jacob <me@manueljacob.de>
parents: 49301
diff changeset
575 pass
28289
d493d64757eb hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27637
diff changeset
576
31218
4cc3797aa59c vfs: use 'vfs' module directly in 'mercurial.hg'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents: 31168
diff changeset
577 poolvfs = vfsmod.vfs(pooldir)
25761
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
578 basename = os.path.basename(sharepath)
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
579
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
580 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
581 if os.path.exists(sharepath):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
582 ui.status(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
583 _(b'(sharing from existing pooled repository %s)\n') % basename
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
584 )
28289
d493d64757eb hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27637
diff changeset
585 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
586 ui.status(
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
587 _(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
588 )
28289
d493d64757eb hg: obtain lock when creating share from pooled repo (issue5104)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 27637
diff changeset
589 # 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
590 # 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
591 # share mode.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
592 clone(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
593 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
594 peeropts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
595 source,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
596 dest=sharepath,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
597 pull=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
598 revs=rev,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
599 update=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
600 stream=stream,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
601 )
25761
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
602
30041
1779dde4c9ef hg: set default path correctly when doing a clone+share (issue5378)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29902
diff changeset
603 # 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: 29902
diff changeset
604 if islocal(source):
47626
1fdf315eff66 windows: use abspath in mercurial/hg.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47447
diff changeset
605 defaultpath = util.abspath(urlutil.urllocalpath(source))
30041
1779dde4c9ef hg: set default path correctly when doing a clone+share (issue5378)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29902
diff changeset
606 else:
1779dde4c9ef hg: set default path correctly when doing a clone+share (issue5378)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29902
diff changeset
607 defaultpath = source
1779dde4c9ef hg: set default path correctly when doing a clone+share (issue5378)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 29902
diff changeset
608
25761
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
609 sharerepo = repository(ui, path=sharepath)
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
610 destrepo = share(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
611 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
612 sharerepo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
613 dest=dest,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
614 update=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
615 bookmarks=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
616 defaultpath=defaultpath,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
617 )
25761
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
618
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
619 # 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
620 # 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
621 # 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
622 # 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
623 # 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
624 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
625
28632
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
626 _postshareupdate(destrepo, update)
a2c2dd399f3b hg: perform update after pulling during clone with share (issue5103)
Gregory Szorc <gregory.szorc@gmail.com>
parents: 28289
diff changeset
627
25761
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
628 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
629
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
630
46123
5b9bb4e9a3bf share: properly copy cache files when cloning from a share
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
631 # Recomputing caches is often slow on big repos, so copy them.
32492
963de566de2f local-clone: extract the closure copying caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32379
diff changeset
632 def _copycache(srcrepo, dstcachedir, fname):
963de566de2f local-clone: extract the closure copying caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32379
diff changeset
633 """copy a cache from srcrepo to destcachedir (if it exists)"""
46123
5b9bb4e9a3bf share: properly copy cache files when cloning from a share
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
634 srcfname = srcrepo.cachevfs.join(fname)
5b9bb4e9a3bf share: properly copy cache files when cloning from a share
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
635 dstfname = os.path.join(dstcachedir, fname)
5b9bb4e9a3bf share: properly copy cache files when cloning from a share
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
636 if os.path.exists(srcfname):
32492
963de566de2f local-clone: extract the closure copying caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32379
diff changeset
637 if not os.path.exists(dstcachedir):
963de566de2f local-clone: extract the closure copying caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32379
diff changeset
638 os.mkdir(dstcachedir)
46123
5b9bb4e9a3bf share: properly copy cache files when cloning from a share
Joerg Sonnenberger <joerg@bec.de>
parents: 46113
diff changeset
639 util.copyfile(srcfname, dstfname)
32492
963de566de2f local-clone: extract the closure copying caches
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 32379
diff changeset
640
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
641
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
642 def clone(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
643 ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
644 peeropts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
645 source,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
646 dest=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
647 pull=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
648 revs=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
649 update=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
650 stream=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
651 branch=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
652 shareopts=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
653 storeincludepats=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
654 storeexcludepats=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
655 depth=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
656 ):
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
657 """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
658
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
659 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
660 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
661 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
662 newly created destination.
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
663
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
664 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
665 .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
666 pushes.
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
667
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
668 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
669 repository will be deleted.
2600
c4325f0a9b91 clean up trailing white space.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2597
diff changeset
670
2719
532809ba1db5 hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2631
diff changeset
671 Arguments:
532809ba1db5 hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2631
diff changeset
672
532809ba1db5 hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2631
diff changeset
673 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
674
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
675 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
676 name of source repository)
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
677
23545
68c434799559 hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents: 23139
diff changeset
678 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
679 server prefers streaming
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
680
2621
5a5852a417b1 clone: disable stream support on server side by default.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2613
diff changeset
681 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
682 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
683
37262
54435fd09f1d clone: rename "rev" to "revs" since there can be many
Martin von Zweigbergk <martinvonz@google.com>
parents: 37261
diff changeset
684 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
685
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
686 update: update working directory after clone completes, if
6526
cfeeac24fc1e repo: add rjoin method
Bryan O'Sullivan <bos@serpentine.com>
parents: 6525
diff changeset
687 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
688 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
689
a78bfaf988e1 add -b/--branch option to clone, bundle, incoming, outgoing, pull, push
Sune Foldager <cryo@cyanite.org>
parents: 10365
diff changeset
690 branch: branches to clone
25761
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
691
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
692 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
693 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
694 "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
695 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
696 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
697 remote's path/URL. Defaults to "identity."
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
698
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
699 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: 39549
diff changeset
700 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: 39549
diff changeset
701 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: 39549
diff changeset
702 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: 39549
diff changeset
703 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: 39549
diff changeset
704 ``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
705 """
4478
b2b55acbacdd Add support for url#id syntax
Matt Mackall <mpm@selenic.com>
parents: 4477
diff changeset
706
32970
11c0bb4ccc76 py3: replace str with bytes in isinstance()
Pulkit Goyal <7895pulkit@gmail.com>
parents: 32495
diff changeset
707 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
708 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
709 origsource, source, branches = src
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
710 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
711 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
712 srcpeer = source.peer() # in case we were called with a localrepo
37261
3809eafedf2c parseurl: consistently call second output "branches"
Martin von Zweigbergk <martinvonz@google.com>
parents: 37125
diff changeset
713 branches = (None, branch or [])
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
714 origsource = source = srcpeer.url()
48494
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
715 srclock = destlock = destwlock = cleandir = None
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
716 destpeer = None
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
717 try:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
718 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
719
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
720 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
721 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
722 if dest:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
723 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
724 else:
46951
338ab1d89ddb clone: use `get_clone_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46950
diff changeset
725 dest = urlutil.get_clone_path(ui, dest)[0]
2719
532809ba1db5 hg.py: add islocal() and defaultdest() functions, refactor
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2631
diff changeset
726
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
727 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
728 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
729
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
730 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
731 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
732
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
733 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
734 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
735 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
736 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
737 _(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
738 )
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
739 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
740 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
741 _(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
742 )
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
743
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
744 createopts = {}
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
745 narrow = False
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
746
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
747 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
748 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
749 narrow = True
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
750
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
751 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
752 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
753 narrow = True
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
754
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
755 if narrow:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
756 # 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
757 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
758 storeincludepats = {b'path:.'}
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
759
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
760 createopts[b'narrowfiles'] = True
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
761
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
762 if depth:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
763 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
764
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
765 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
766 # 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
767 # 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
768 # 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
769 # 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
770 # 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
771 # 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
772 # data.
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
773 createopts[b'lfs'] = True
40324
6637b079ae45 lfs: autoload the extension when cloning from repo with lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 39849
diff changeset
774
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
775 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
776 ui.status(
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
777 _(
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
778 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
779 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
780 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
781 )
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
782 else:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
783 ui.status(
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 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
786 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
787 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
788 )
40324
6637b079ae45 lfs: autoload the extension when cloning from repo with lfs enabled
Matt Harbison <matt_harbison@yahoo.com>
parents: 39849
diff changeset
789
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
790 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
791 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
792 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
793 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
794 sharepath = None
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
795 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
796 # 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
797 # 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
798 # 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
799 # 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
800 try:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
801 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
802 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
803 b'lookup',
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
804 {
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
805 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
806 },
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
807 ).result()
37640
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
808
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46953
diff changeset
809 if rootnode != sha1nodeconstants.nullid:
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
810 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
811 else:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
812 ui.status(
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
813 _(
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
814 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
815 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
816 )
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
817 )
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
818 except error.RepoLookupError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
819 ui.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
820 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
821 b'(not using pooled storage: '
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
822 b'unable to resolve identity of remote)\n'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
823 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
824 )
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
825 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
826 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
827 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
828 )
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
829 else:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
830 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
831 _(b'unknown share naming mode: %s') % sharenamemode
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
832 )
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
833
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
834 # 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
835 if narrow:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
836 ui.status(
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
837 _(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
838 )
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
839 sharepath = None
25761
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
840
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
841 if sharepath:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
842 return clonewithshare(
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
843 ui,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
844 peeropts,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
845 sharepath,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
846 source,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
847 srcpeer,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
848 dest,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
849 pull=pull,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
850 rev=revs,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
851 update=update,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
852 stream=stream,
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
853 )
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
854
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
855 srcrepo = srcpeer.local()
25761
0d37b9b21467 hg: support for auto sharing stores when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25660
diff changeset
856
14377
f90d5641c78b clone: make default path absolute for all local paths
Brendan Cully <brendan@kublai.com>
parents: 14213
diff changeset
857 abspath = origsource
f90d5641c78b clone: make default path absolute for all local paths
Brendan Cully <brendan@kublai.com>
parents: 14213
diff changeset
858 if islocal(origsource):
47626
1fdf315eff66 windows: use abspath in mercurial/hg.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47447
diff changeset
859 abspath = util.abspath(urlutil.urllocalpath(origsource))
14377
f90d5641c78b clone: make default path absolute for all local paths
Brendan Cully <brendan@kublai.com>
parents: 14213
diff changeset
860
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
861 if islocal(dest):
47416
1c7f3d911d0f clone: cleanup the "cleanup dir" logic used during local clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
862 if os.path.exists(dest):
1c7f3d911d0f clone: cleanup the "cleanup dir" logic used during local clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
863 # only clean up directories we create ourselves
1c7f3d911d0f clone: cleanup the "cleanup dir" logic used during local clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
864 hgdir = os.path.realpath(os.path.join(dest, b".hg"))
1c7f3d911d0f clone: cleanup the "cleanup dir" logic used during local clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
865 cleandir = hgdir
1c7f3d911d0f clone: cleanup the "cleanup dir" logic used during local clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
866 else:
1c7f3d911d0f clone: cleanup the "cleanup dir" logic used during local clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47299
diff changeset
867 cleandir = dest
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
868
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
869 copy = False
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
870 if (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
871 srcrepo
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
872 and srcrepo.cancopy()
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
873 and islocal(dest)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
874 and not phases.hassecret(srcrepo)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
875 ):
37262
54435fd09f1d clone: rename "rev" to "revs" since there can be many
Martin von Zweigbergk <martinvonz@google.com>
parents: 37261
diff changeset
876 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
877
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
878 # TODO this is a somewhat arbitrary restriction.
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
879 if narrow:
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
880 copy = False
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
881
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
882 if copy:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
883 try:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
884 # 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
885 # 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
886 # 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
887 # fail
14463
81f559d1b9b2 hg: remove underscores in clone function
Martin Geisler <mg@aragost.com>
parents: 14377
diff changeset
888 srclock = srcrepo.lock(wait=False)
7640
7197812e8d44 error: move lock errors
Matt Mackall <mpm@selenic.com>
parents: 7546
diff changeset
889 except error.LockError:
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
890 copy = False
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
891
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
892 if copy:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
893 srcrepo.hook(b'preoutgoing', throw=True, source=b'clone')
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
894
47442
d1c1fd7ac46d clone: use "official" API to create local clone destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47416
diff changeset
895 destrootpath = urlutil.urllocalpath(dest)
d1c1fd7ac46d clone: use "official" API to create local clone destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47416
diff changeset
896 dest_reqs = localrepo.clone_requirements(ui, createopts, srcrepo)
d1c1fd7ac46d clone: use "official" API to create local clone destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47416
diff changeset
897 localrepo.createrepository(
d1c1fd7ac46d clone: use "official" API to create local clone destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47416
diff changeset
898 ui,
d1c1fd7ac46d clone: use "official" API to create local clone destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47416
diff changeset
899 destrootpath,
d1c1fd7ac46d clone: use "official" API to create local clone destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47416
diff changeset
900 requirements=dest_reqs,
d1c1fd7ac46d clone: use "official" API to create local clone destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47416
diff changeset
901 )
d1c1fd7ac46d clone: use "official" API to create local clone destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47416
diff changeset
902 destrepo = localrepo.makelocalrepository(ui, destrootpath)
48494
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
903
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
904 destwlock = destrepo.wlock()
47447
377d8fc20e34 clone: reuse the stream clone logic for local clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47442
diff changeset
905 destlock = destrepo.lock()
377d8fc20e34 clone: reuse the stream clone logic for local clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47442
diff changeset
906 from . import streamclone # avoid cycle
47442
d1c1fd7ac46d clone: use "official" API to create local clone destination
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47416
diff changeset
907
47447
377d8fc20e34 clone: reuse the stream clone logic for local clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47442
diff changeset
908 streamclone.local_copy(srcrepo, destrepo)
17740
e6067bec18da branchcache: fetch source branchcache during clone (issue3378)
Tomasz Kleczek <tomasz.kleczek@fb.com>
parents: 17704
diff changeset
909
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
910 # 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
911 # 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
912 destpeer = peer(srcrepo, peeropts, dest)
48494
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
913
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
914 # make the peer aware that is it already locked
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
915 #
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
916 # important:
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
917 #
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
918 # We still need to release that lock at the end of the function
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
919 destpeer.local()._lockref = weakref.ref(destlock)
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
920 destpeer.local()._wlockref = weakref.ref(destwlock)
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
921 # dirstate also needs to be copied because `_wlockref` has a reference
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
922 # to it: this dirstate is saved to disk when the wlock is released
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
923 destpeer.local().dirstate = destrepo.dirstate
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
924
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46953
diff changeset
925 srcrepo.hook(
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46953
diff changeset
926 b'outgoing', source=b'clone', node=srcrepo.nodeconstants.nullhex
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46953
diff changeset
927 )
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
928 else:
5569
9e209193f18d clone: fix race with same target directory (issue716)
Matt Mackall <mpm@selenic.com>
parents: 5277
diff changeset
929 try:
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
930 # only pass ui when no srcrepo
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
931 destpeer = peer(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
932 srcrepo or ui,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
933 peeropts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
934 dest,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
935 create=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
936 createopts=createopts,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
937 )
49305
53e9422a9b45 py3: catch FileExistsError instead of checking errno == EEXIST
Manuel Jacob <me@manueljacob.de>
parents: 49301
diff changeset
938 except FileExistsError:
53e9422a9b45 py3: catch FileExistsError instead of checking errno == EEXIST
Manuel Jacob <me@manueljacob.de>
parents: 49301
diff changeset
939 cleandir = None
53e9422a9b45 py3: catch FileExistsError instead of checking errno == EEXIST
Manuel Jacob <me@manueljacob.de>
parents: 49301
diff changeset
940 raise error.Abort(_(b"destination '%s' already exists") % dest)
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
941
37262
54435fd09f1d clone: rename "rev" to "revs" since there can be many
Martin von Zweigbergk <martinvonz@google.com>
parents: 37261
diff changeset
942 if revs:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
943 if not srcpeer.capable(b'lookup'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
944 raise error.Abort(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
945 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
946 b"src repository does not support "
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
947 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
948 b"support clone by revision"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
949 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
950 )
37640
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
951
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
952 # TODO this is batchable.
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
953 remoterevs = []
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
954 for rev in revs:
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
955 with srcpeer.commandexecutor() as e:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
956 remoterevs.append(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
957 e.callcommand(
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
958 b'lookup',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
959 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
960 b'key': rev,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
961 },
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
962 ).result()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
963 )
37640
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
964 revs = remoterevs
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
965
8417
39cf453da958 clone: try updating to the actual changeset specified in options
Brett Carter <brett@rdnzl.net>
parents: 8312
diff changeset
966 checkout = revs[0]
37262
54435fd09f1d clone: rename "rev" to "revs" since there can be many
Martin von Zweigbergk <martinvonz@google.com>
parents: 37261
diff changeset
967 else:
54435fd09f1d clone: rename "rev" to "revs" since there can be many
Martin von Zweigbergk <martinvonz@google.com>
parents: 37261
diff changeset
968 revs = None
27165
70884715725e localrepo: remove clone method by hoisting into hg.py
Augie Fackler <augie@google.com>
parents: 26781
diff changeset
969 local = destpeer.local()
70884715725e localrepo: remove clone method by hoisting into hg.py
Augie Fackler <augie@google.com>
parents: 26781
diff changeset
970 if local:
39555
cb675e95a2c2 hg: write narrow patterns after repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39553
diff changeset
971 if narrow:
41043
ce0bc2952e2a narrow: detect if narrowspec was changed in a different share
Martin von Zweigbergk <martinvonz@google.com>
parents: 40996
diff changeset
972 with local.wlock(), local.lock():
39555
cb675e95a2c2 hg: write narrow patterns after repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39553
diff changeset
973 local.setnarrowpats(storeincludepats, storeexcludepats)
41236
44a51c1c8e17 narrow: move copytonarrowspec() out of setnarrowpats()
Martin von Zweigbergk <martinvonz@google.com>
parents: 41229
diff changeset
974 narrowspec.copytoworkingcopy(local)
39555
cb675e95a2c2 hg: write narrow patterns after repo creation
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39553
diff changeset
975
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
976 u = urlutil.url(abspath)
35565
bdae51a83dfb clonebundle: make it possible to retrieve the initial bundle through largefile
Boris Feld <boris.feld@octobus.net>
parents: 35438
diff changeset
977 defaulturl = bytes(u)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
978 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
979 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
980 if pull:
68c434799559 hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents: 23139
diff changeset
981 stream = False
68c434799559 hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents: 23139
diff changeset
982 else:
68c434799559 hg.clone: set 'stream' depending on whether --pull was requested or not
Siddharth Agarwal <sid0@fb.com>
parents: 23139
diff changeset
983 stream = None
27165
70884715725e localrepo: remove clone method by hoisting into hg.py
Augie Fackler <augie@google.com>
parents: 26781
diff changeset
984 # internal config: ui.quietbookmarkmove
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
985 overrides = {(b'ui', b'quietbookmarkmove'): True}
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
986 with local.ui.configoverride(overrides, b'clone'):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
987 exchange.pull(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
988 local,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
989 srcpeer,
48241
7d1e60244561 path: keep the path instance in the `pulloperation`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48240
diff changeset
990 heads=revs,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
991 streamclonerequested=stream,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
992 includepats=storeincludepats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
993 excludepats=storeexcludepats,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
994 depth=depth,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
995 )
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
996 elif srcrepo:
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
997 # TODO lift restriction once exchange.push() accepts narrow
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
998 # push.
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
999 if narrow:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1000 raise error.Abort(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1001 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1002 b'narrow clone not available for '
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1003 b'remote destinations'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1004 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1005 )
39550
65b5900f30be hg: recognize include and exclude patterns when cloning
Gregory Szorc <gregory.szorc@gmail.com>
parents: 39549
diff changeset
1006
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1007 exchange.push(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1008 srcrepo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1009 destpeer,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1010 revs=revs,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1011 bookmarks=srcrepo._bookmarks.keys(),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1012 )
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
1013 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1014 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1015 _(b"clone from remote to remote not supported")
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1016 )
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
1017
18441
1f794204abbd hg: replace DirCleanup class with normal try/finally use
Augie Fackler <raf@durin42.com>
parents: 18382
diff changeset
1018 cleandir = None
2597
5ba8be56fa8f clone: move code into hg module. make doc better.
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 2595
diff changeset
1019
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
1020 destrepo = destpeer.local()
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
1021 if destrepo:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1022 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
1023 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
1024 u.passwd = None
33687
6294654453ee py3: use bytes IO to write sample hgrc
Yuya Nishihara <yuya@tcha.org>
parents: 33018
diff changeset
1025 defaulturl = bytes(u)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1026 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
1027 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
1028
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1029 if ui.configbool(b'experimental', b'remotenames'):
35347
a29fe459fc49 remotenames: rename related file and storage dir to logexchange
Pulkit Goyal <7895pulkit@gmail.com>
parents: 35331
diff changeset
1030 logexchange.pullremotenames(destrepo, srcpeer)
35331
773a9a06047c clone: add support for storing remotenames while cloning
Pulkit Goyal <7895pulkit@gmail.com>
parents: 34979
diff changeset
1031
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
1032 if update:
6526
cfeeac24fc1e repo: add rjoin method
Bryan O'Sullivan <bos@serpentine.com>
parents: 6525
diff changeset
1033 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
1034 with srcpeer.commandexecutor() as e:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1035 checkout = e.callcommand(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
1036 b'lookup',
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
1037 {
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
1038 b'key': update,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
1039 },
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1040 ).result()
37640
ce8828217369 hg: use command executor for wire protocol commands
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37579
diff changeset
1041
17867
c9339efed653 clone: make sure to use "@" as bookmark and "default" as branch (issue3677)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 17844
diff changeset
1042 uprev = None
17882
36ed69d4593d clone: show status "updating to bookmark @"
Adrian Buehlmann <adrian@cadifra.com>
parents: 17875
diff changeset
1043 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
1044 if checkout is not None:
38753
e06a10d3b926 clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents: 38380
diff changeset
1045 # 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: 38380
diff changeset
1046 # 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: 38380
diff changeset
1047 # 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: 38380
diff changeset
1048 # out a better solution.
e06a10d3b926 clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents: 38380
diff changeset
1049 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
1050 uprev = checkout
38753
e06a10d3b926 clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents: 38380
diff changeset
1051 elif scmutil.isrevsymbol(destrepo, checkout):
e06a10d3b926 clone: process 'lookup' return as an arbitrary symbol
Boris Feld <boris.feld@octobus.net>
parents: 38380
diff changeset
1052 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
1053 else:
26354
c1fb2cab6260 clone: check update rev for being True
Sean Farley <sean@farley.io>
parents: 26353
diff changeset
1054 if update is not True:
c1fb2cab6260 clone: check update rev for being True
Sean Farley <sean@farley.io>
parents: 26353
diff changeset
1055 try:
c1fb2cab6260 clone: check update rev for being True
Sean Farley <sean@farley.io>
parents: 26353
diff changeset
1056 uprev = destrepo.lookup(update)
c1fb2cab6260 clone: check update rev for being True
Sean Farley <sean@farley.io>
parents: 26353
diff changeset
1057 except error.RepoLookupError:
c1fb2cab6260 clone: check update rev for being True
Sean Farley <sean@farley.io>
parents: 26353
diff changeset
1058 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
1059 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
1060 try:
46198
72007a9ac064 clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46123
diff changeset
1061 if destrepo._activebookmark:
72007a9ac064 clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46123
diff changeset
1062 uprev = destrepo.lookup(destrepo._activebookmark)
72007a9ac064 clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46123
diff changeset
1063 update = destrepo._activebookmark
72007a9ac064 clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46123
diff changeset
1064 else:
72007a9ac064 clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46123
diff changeset
1065 uprev = destrepo._bookmarks[b'@']
72007a9ac064 clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46123
diff changeset
1066 update = b'@'
17882
36ed69d4593d clone: show status "updating to bookmark @"
Adrian Buehlmann <adrian@cadifra.com>
parents: 17875
diff changeset
1067 bn = destrepo[uprev].branch()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1068 if bn == b'default':
46198
72007a9ac064 clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46123
diff changeset
1069 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
1070 else:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1071 status = (
46198
72007a9ac064 clone: update to active bookmark, if set
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents: 46123
diff changeset
1072 _(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: 46123
diff changeset
1073 ) % (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
1074 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
1075 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1076 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
1077 except error.RepoLookupError:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1078 uprev = destrepo.lookup(b'tip')
17882
36ed69d4593d clone: show status "updating to bookmark @"
Adrian Buehlmann <adrian@cadifra.com>
parents: 17875
diff changeset
1079 if not status:
36ed69d4593d clone: show status "updating to bookmark @"
Adrian Buehlmann <adrian@cadifra.com>
parents: 17875
diff changeset
1080 bn = destrepo[uprev].branch()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1081 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
1082 destrepo.ui.status(status)
14463
81f559d1b9b2 hg: remove underscores in clone function
Martin Geisler <mg@aragost.com>
parents: 14377
diff changeset
1083 _update(destrepo, uprev)
17703
4a07d2ff7c66 clone: activate bookmark specified with --updaterev
Thomas Arendsen Hein <thomas@intevation.de>
parents: 17342
diff changeset
1084 if update in destrepo._bookmarks:
24945
e0b0fbd47491 bookmarks: rename setcurrent to activate (API)
Ryan McElroy <rmcelroy@fb.com>
parents: 24440
diff changeset
1085 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
1086 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
1087 release(destlock)
48494
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
1088 if destwlock is not None:
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
1089 release(destlock)
46314
95a615dd77bf clone: make sure we warm the cache after a clone
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46198
diff changeset
1090 # 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
1091 # 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
1092 # 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
1093 # 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
1094 with destrepo.lock():
47299
7edaf91c7886 updatecaches: use the `caches` argument instead of a special `full` value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 47233
diff changeset
1095 destrepo.updatecaches(caches=repositorymod.CACHES_POST_CLONE)
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4853
diff changeset
1096 finally:
48494
b74ee41addee sparse: lock the store when updating requirements config
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents: 48241
diff changeset
1097 release(srclock, destlock, destwlock)
18441
1f794204abbd hg: replace DirCleanup class with normal try/finally use
Augie Fackler <raf@durin42.com>
parents: 18382
diff changeset
1098 if cleandir is not None:
1f794204abbd hg: replace DirCleanup class with normal try/finally use
Augie Fackler <raf@durin42.com>
parents: 18382
diff changeset
1099 shutil.rmtree(cleandir, True)
17191
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
1100 if srcpeer is not None:
5884812686f7 peer: introduce peer methods to prepare for peer classes
Sune Foldager <cryo@cyanite.org>
parents: 17159
diff changeset
1101 srcpeer.close()
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
1102 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
1103 destpeer.close()
19313
3b96d6e44a4d hg: move return statement after finally block
simon@laptop-tosh
parents: 18944
diff changeset
1104 return srcpeer, destpeer
2775
b550cd82f92a Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents: 2774
diff changeset
1105
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1106
27402
5184089f5d30 hg: add quietempty flag to _showstats
timeless <timeless@mozdev.org>
parents: 27354
diff changeset
1107 def _showstats(repo, stats, quietempty=False):
37125
6f570c501e3e merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37107
diff changeset
1108 if quietempty and stats.isempty():
27402
5184089f5d30 hg: add quietempty flag to _showstats
timeless <timeless@mozdev.org>
parents: 27354
diff changeset
1109 return
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1110 repo.ui.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1111 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1112 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
1113 b"%d files removed, %d files unresolved\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1114 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1115 % (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1116 stats.updatedcount,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1117 stats.mergedcount,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1118 stats.removedcount,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1119 stats.unresolvedcount,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1120 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1121 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1122
3316
39fd6e82ea38 merge: pull user messages out to hg.py
Matt Mackall <mpm@selenic.com>
parents: 3195
diff changeset
1123
31166
fad5e299cfc7 update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents: 31133
diff changeset
1124 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
1125 """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
1126
17c030014ddf subrepo: only do clean update when overwrite is set (issue3276)
Simon Heimberg <simohe@besonet.ch>
parents: 17887
diff changeset
1127 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
1128
17c030014ddf subrepo: only do clean update when overwrite is set (issue3276)
Simon Heimberg <simohe@besonet.ch>
parents: 17887
diff changeset
1129 returns stats (see pydoc mercurial.merge.applyupdates)"""
45605
00402df57db7 updaterepo: add deprecation warning
Martin von Zweigbergk <martinvonz@google.com>
parents: 45577
diff changeset
1130 repo.ui.deprecwarn(
00402df57db7 updaterepo: add deprecation warning
Martin von Zweigbergk <martinvonz@google.com>
parents: 45577
diff changeset
1131 b'prefer merge.update() or merge.clean_update() over hg.updaterepo()',
00402df57db7 updaterepo: add deprecation warning
Martin von Zweigbergk <martinvonz@google.com>
parents: 45577
diff changeset
1132 b'5.7',
00402df57db7 updaterepo: add deprecation warning
Martin von Zweigbergk <martinvonz@google.com>
parents: 45577
diff changeset
1133 )
45557
2c86b9587740 merge: make low-level update() private (API)
Martin von Zweigbergk <martinvonz@google.com>
parents: 45556
diff changeset
1134 return mergemod._update(
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1135 repo,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1136 node,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1137 branchmerge=False,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1138 force=overwrite,
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1139 labels=[b'working copy', b'destination'],
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1140 updatecheck=updatecheck,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1141 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1142
17895
17c030014ddf subrepo: only do clean update when overwrite is set (issue3276)
Simon Heimberg <simohe@besonet.ch>
parents: 17887
diff changeset
1143
31166
fad5e299cfc7 update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents: 31133
diff changeset
1144 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: 31133
diff changeset
1145 """update the working directory to node"""
45577
5c8230ca37f2 merge: replace calls to hg.updaterepo() by merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents: 45557
diff changeset
1146 stats = mergemod.update(repo[node], updatecheck=updatecheck)
27404
1cf3543cc780 update: add quietempty flag to _showstats
timeless <timeless@mozdev.org>
parents: 27403
diff changeset
1147 _showstats(repo, stats, quietempty)
37125
6f570c501e3e merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37107
diff changeset
1148 if stats.unresolvedcount:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1149 repo.ui.status(_(b"use 'hg resolve' to retry unresolved file merges\n"))
37125
6f570c501e3e merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37107
diff changeset
1150 return stats.unresolvedcount > 0
2775
b550cd82f92a Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents: 2774
diff changeset
1151
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1152
7546
c7f48414f3ad add a comment about the need of hg._update()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7280
diff changeset
1153 # 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
1154 _update = update
c7f48414f3ad add a comment about the need of hg._update()
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7280
diff changeset
1155
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1156
27403
50b6a04f817f histedit: omit useless message from abort
timeless <timeless@mozdev.org>
parents: 27402
diff changeset
1157 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
1158 """forcibly switch the working directory to node, clobbering changes"""
45556
03726f5b6092 merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents: 45485
diff changeset
1159 stats = mergemod.clean_update(repo[node])
44160
abcc82bf0717 clean: check that there are no conflicts after
Martin von Zweigbergk <martinvonz@google.com>
parents: 44060
diff changeset
1160 assert stats.unresolvedcount == 0
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
1161 if show_stats:
27403
50b6a04f817f histedit: omit useless message from abort
timeless <timeless@mozdev.org>
parents: 27402
diff changeset
1162 _showstats(repo, stats, quietempty)
46761
af7535249ea9 hg: make `clean` return consistent with the `update` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46720
diff changeset
1163 return False
2775
b550cd82f92a Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents: 2774
diff changeset
1164
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1165
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
1166 # 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
1167 _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
1168
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1169 _VALID_UPDATECHECKS = {
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1170 mergemod.UPDATECHECK_ABORT,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1171 mergemod.UPDATECHECK_NONE,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1172 mergemod.UPDATECHECK_LINEAR,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1173 mergemod.UPDATECHECK_NO_CONFLICT,
42971
ee1ef76d7339 hg: have `updatetotally` more thoroughly check updatecheck argument (API)
Augie Fackler <augie@google.com>
parents: 42970
diff changeset
1174 }
ee1ef76d7339 hg: have `updatetotally` more thoroughly check updatecheck argument (API)
Augie Fackler <augie@google.com>
parents: 42970
diff changeset
1175
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1176
31166
fad5e299cfc7 update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents: 31133
diff changeset
1177 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
1178 """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
1179
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 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
1181
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 :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
1183
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 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
1185
66513f6ca038 commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28324
diff changeset
1186 :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
1187 :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
1188 :clean: whether changes in the working directory can be discarded
31166
fad5e299cfc7 update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents: 31133
diff changeset
1189 :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: 31133
diff changeset
1190
42970
1ad3ebb39c61 merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents: 42813
diff changeset
1191 Valid values for updatecheck are the UPDATECHECK_* constants
1ad3ebb39c61 merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents: 42813
diff changeset
1192 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: 42813
diff changeset
1193 configured default.
31166
fad5e299cfc7 update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents: 31133
diff changeset
1194
42970
1ad3ebb39c61 merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents: 42813
diff changeset
1195 * ABORT: abort if the working directory is dirty
1ad3ebb39c61 merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents: 42813
diff changeset
1196 * 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: 42813
diff changeset
1197 * LINEAR: check that update is linear before merging working directory
31166
fad5e299cfc7 update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents: 31133
diff changeset
1198 changes into destination
42970
1ad3ebb39c61 merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents: 42813
diff changeset
1199 * 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
1200
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 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
1202 """
31166
fad5e299cfc7 update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents: 31133
diff changeset
1203 if updatecheck is None:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1204 updatecheck = ui.config(b'commands', b'update.check')
42971
ee1ef76d7339 hg: have `updatetotally` more thoroughly check updatecheck argument (API)
Augie Fackler <augie@google.com>
parents: 42970
diff changeset
1205 if updatecheck not in _VALID_UPDATECHECKS:
31167
696e321b304d update: add experimental config for default way of handling dirty wdir
Martin von Zweigbergk <martinvonz@google.com>
parents: 31166
diff changeset
1206 # If not configured, or invalid value configured
42970
1ad3ebb39c61 merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents: 42813
diff changeset
1207 updatecheck = mergemod.UPDATECHECK_LINEAR
42971
ee1ef76d7339 hg: have `updatetotally` more thoroughly check updatecheck argument (API)
Augie Fackler <augie@google.com>
parents: 42970
diff changeset
1208 if updatecheck not in _VALID_UPDATECHECKS:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1209 raise ValueError(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1210 r'Invalid updatecheck value %r (can accept %r)'
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1211 % (updatecheck, _VALID_UPDATECHECKS)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1212 )
28503
138ec8835e63 hg: acquire wlock while updating the working directory via updatetotally
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28501
diff changeset
1213 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
1214 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
1215 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
1216 if checkout is None:
30962
11c253997b0e destutil: drop now-unused "check" parameter from destupdate()
Martin von Zweigbergk <martinvonz@google.com>
parents: 30062
diff changeset
1217 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
1218 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
1219 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
1220
66513f6ca038 commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28324
diff changeset
1221 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
1222 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
1223 else:
42970
1ad3ebb39c61 merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents: 42813
diff changeset
1224 if updatecheck == mergemod.UPDATECHECK_ABORT:
30963
7beb3ec34443 update: move check for dirty wdir into hg.updatetotally()
Martin von Zweigbergk <martinvonz@google.com>
parents: 30962
diff changeset
1225 cmdutil.bailifchanged(repo, merge=False)
42970
1ad3ebb39c61 merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents: 42813
diff changeset
1226 updatecheck = mergemod.UPDATECHECK_NONE
31166
fad5e299cfc7 update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents: 31133
diff changeset
1227 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
1228
66513f6ca038 commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28324
diff changeset
1229 if not ret and movemarkfrom:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1230 if movemarkfrom == repo[b'.'].node():
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1231 pass # no-op update
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1232 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
1233 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
1234 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
1235 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
1236 # 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
1237 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
1238 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
1239 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
1240 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
1241 if brev != repo._activebookmark:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1242 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
1243 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
1244 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
1245 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
1246 if repo._activebookmark:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1247 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
1248 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
1249 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
1250
66513f6ca038 commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28324
diff changeset
1251 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
1252 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
1253
66513f6ca038 commands: centralize code to update with extra care for non-file components
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28324
diff changeset
1254 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
1255
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1256
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1257 def merge(
45942
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
1258 ctx,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
1259 force=False,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
1260 remind=True,
89a2afe31e82 formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents: 45847
diff changeset
1261 labels=None,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1262 ):
13162
115a9760c382 merge: document some internal return values.
Greg Ward <greg-hg@gerg.ca>
parents: 13047
diff changeset
1263 """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
1264 unresolved conflicts."""
44434
2f290136b7d6 merge: make hg.merge() take a context instead of a node
Martin von Zweigbergk <martinvonz@google.com>
parents: 44399
diff changeset
1265 repo = ctx.repo()
2f290136b7d6 merge: make hg.merge() take a context instead of a node
Martin von Zweigbergk <martinvonz@google.com>
parents: 44399
diff changeset
1266 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
1267 _showstats(repo, stats)
37125
6f570c501e3e merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37107
diff changeset
1268 if stats.unresolvedcount:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1269 repo.ui.status(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1270 _(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1271 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
1272 b"or 'hg merge --abort' to abandon\n"
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1273 )
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1274 )
42600
3bc400ccbf99 abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents: 42155
diff changeset
1275 elif remind:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1276 repo.ui.status(_(b"(branch merge, don't forget to commit)\n"))
37125
6f570c501e3e merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents: 37107
diff changeset
1277 return stats.unresolvedcount > 0
2808
30f59f4a327e Introduce update helper functions: update, merge, clean, and revert
Matt Mackall <mpm@selenic.com>
parents: 2778
diff changeset
1278
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1279
42604
209f2b8a50dc abort: removed labels argument from abortmerge()
Taapas Agrawal <taapas2897@gmail.com>
parents: 42600
diff changeset
1280 def abortmerge(ui, repo):
44856
b7808443ed6a mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents: 44657
diff changeset
1281 ms = mergestatemod.mergestate.read(repo)
42600
3bc400ccbf99 abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents: 42155
diff changeset
1282 if ms.active():
3bc400ccbf99 abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents: 42155
diff changeset
1283 # there were conflicts
3bc400ccbf99 abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents: 42155
diff changeset
1284 node = ms.localctx.hex()
3bc400ccbf99 abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents: 42155
diff changeset
1285 else:
3bc400ccbf99 abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents: 42155
diff changeset
1286 # 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
1287 node = repo[b'.'].hex()
42600
3bc400ccbf99 abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents: 42155
diff changeset
1288
43117
8ff1ecfadcd1 cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents: 43089
diff changeset
1289 repo.ui.status(_(b"aborting the merge, updating back to %s\n") % node[:12])
44270
f546d2170b0f merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents: 44178
diff changeset
1290 stats = mergemod.clean_update(repo[node])
44175
2b6632d64328 merge: check that there are no conflicts after --abort
Martin von Zweigbergk <martinvonz@google.com>
parents: 44160
diff changeset
1291 assert stats.unresolvedcount == 0
42600
3bc400ccbf99 abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents: 42155
diff changeset
1292 _showstats(repo, stats)
3bc400ccbf99 abort: added support for merge
Taapas Agrawal <taapas2897@gmail.com>
parents: 42155
diff changeset
1293
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1294
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1295 def _incoming(
46950
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1296 displaychlist,
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1297 subreporecurse,
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1298 ui,
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1299 repo,
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1300 source,
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1301 opts,
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1302 buffered=False,
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1303 subpath=None,
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1304 ):
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1305 """
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1306 Helper for incoming / gincoming.
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1307 displaychlist gets called with
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1308 (remoterepo, incomingchangesetlist, displayer) parameters,
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1309 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
1310 """
48240
607e9322fc89 path: return path instance directly from get_pull_paths
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48173
diff changeset
1311 srcs = urlutil.get_pull_paths(repo, ui, [source])
46932
dec31caf5fd6 incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46931
diff changeset
1312 srcs = list(srcs)
dec31caf5fd6 incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46931
diff changeset
1313 if len(srcs) != 1:
47005
27602e030a1f incoming: use bytes for an error message
Matt Harbison <matt_harbison@yahoo.com>
parents: 46953
diff changeset
1314 msg = _(b'for now, incoming supports only a single source, %d provided')
46932
dec31caf5fd6 incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46931
diff changeset
1315 msg %= len(srcs)
dec31caf5fd6 incoming: use `urlutil.get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46931
diff changeset
1316 raise error.Abort(msg)
48240
607e9322fc89 path: return path instance directly from get_pull_paths
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48173
diff changeset
1317 path = srcs[0]
607e9322fc89 path: return path instance directly from get_pull_paths
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 48173
diff changeset
1318 source, branches = urlutil.parseurl(path.rawloc, opts.get(b'branch'))
46950
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1319 if subpath is not None:
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1320 subpath = urlutil.url(subpath)
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1321 if subpath.isabs():
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1322 source = bytes(subpath)
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1323 else:
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1324 p = urlutil.url(source)
48551
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
1325 if p.islocal():
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
1326 normpath = os.path.normpath
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
1327 else:
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
1328 normpath = posixpath.normpath
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
1329 p.path = normpath(b'%s/%s' % (p.path, subpath))
46950
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1330 source = bytes(p)
14556
517e1d88bf7e hg: change various repository() users to use peer() where appropriate
Matt Mackall <mpm@selenic.com>
parents: 14555
diff changeset
1331 other = peer(repo, opts, source)
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
1332 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
1333 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
1334 ui.status(_(b'comparing with %s\n') % urlutil.hidepassword(source))
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
1335 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
1336
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
1337 if revs:
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
1338 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
1339 other, chlist, cleanupfn = bundlerepo.getremotechanges(
48173
1d70fb83ff4a hg: let extensions call the func without populating opts keys
Sushil khanchi <sushilkhanchi97@gmail.com>
parents: 48116
diff changeset
1340 ui, repo, other, revs, opts.get(b"bundle"), opts.get(b"force")
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
1341 )
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
1342
14161
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14156
diff changeset
1343 if not chlist:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1344 ui.status(_(b"no changes found\n"))
14161
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14156
diff changeset
1345 return subreporecurse()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1346 ui.pager(b'incoming')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1347 displayer = logcmdutil.changesetdisplayer(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1348 ui, other, opts, buffered=buffered
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1349 )
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1350 displaychlist(other, chlist, displayer)
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1351 displayer.close()
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1352 finally:
14161
8a0fca925992 bundlerepo: fix and improve getremotechanges
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 14156
diff changeset
1353 cleanupfn()
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1354 subreporecurse()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1355 return 0 # exit code is zero since we found incoming changes
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1356
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1357
46950
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1358 def incoming(ui, repo, source, opts, subpath=None):
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1359 def subreporecurse():
12400
40852b4b910c incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents: 12314
diff changeset
1360 ret = 1
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1361 if opts.get(b'subrepos'):
12400
40852b4b910c incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents: 12314
diff changeset
1362 ctx = repo[None]
40852b4b910c incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents: 12314
diff changeset
1363 for subpath in sorted(ctx.substate):
40852b4b910c incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents: 12314
diff changeset
1364 sub = ctx.sub(subpath)
40852b4b910c incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents: 12314
diff changeset
1365 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
1366 return ret
40852b4b910c incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents: 12314
diff changeset
1367
12730
33e1fd2aeb3c incoming: unify code for incoming and graphlog.incoming
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12729
diff changeset
1368 def display(other, chlist, displayer):
35888
c8e2d6ed1f9e cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents: 35766
diff changeset
1369 limit = logcmdutil.getlimit(opts)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1370 if opts.get(b'newest_first'):
12729
55f0648c7e2d incoming: rename variable
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12400
diff changeset
1371 chlist.reverse()
12273
e392d00ab5b0 incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents: 12271
diff changeset
1372 count = 0
12729
55f0648c7e2d incoming: rename variable
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12400
diff changeset
1373 for n in chlist:
12273
e392d00ab5b0 incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents: 12271
diff changeset
1374 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
1375 break
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46953
diff changeset
1376 parents = [
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46953
diff changeset
1377 p for p in other.changelog.parents(n) if p != repo.nullid
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46953
diff changeset
1378 ]
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1379 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
1380 continue
e392d00ab5b0 incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents: 12271
diff changeset
1381 count += 1
e392d00ab5b0 incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents: 12271
diff changeset
1382 displayer.show(other[n])
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1383
46950
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1384 return _incoming(
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1385 display, subreporecurse, ui, repo, source, opts, subpath=subpath
279df499511e incoming: kill the `repo._subtoppath =` hack
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46934
diff changeset
1386 )
12273
e392d00ab5b0 incoming: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents: 12271
diff changeset
1387
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1388
46931
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1389 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
1390 out = set()
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1391 others = []
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1392 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
1393 dest = path.pushloc or path.loc
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1394 if subpath is not None:
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1395 subpath = urlutil.url(subpath)
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1396 if subpath.isabs():
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1397 dest = bytes(subpath)
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1398 else:
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1399 p = urlutil.url(dest)
48551
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
1400 if p.islocal():
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
1401 normpath = os.path.normpath
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
1402 else:
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
1403 normpath = posixpath.normpath
f98d4d0a299a subrepo: make -S work again on Windows for incoming/outgoing to remote repos
Matt Harbison <matt_harbison@yahoo.com>
parents: 48494
diff changeset
1404 p.path = normpath(b'%s/%s' % (p.path, subpath))
46931
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1405 dest = bytes(p)
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1406 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
1407
46931
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1408 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
1409 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
1410 if revs:
48116
5ced12cfa41b errors: raise InputError on bad revset to revrange() iff provided by the user
Martin von Zweigbergk <martinvonz@google.com>
parents: 47626
diff changeset
1411 revs = [repo[rev].node() for rev in logcmdutil.revrange(repo, revs)]
12735
8888e56ac417 outgoing: unify common graphlog.outgoing and hg.outgoing code
Nicolas Dumazet <nicdumz.commits@gmail.com>
parents: 12734
diff changeset
1412
46931
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1413 other = peer(repo, opts, dest)
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1414 try:
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1415 outgoing = discovery.findcommonoutgoing(
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1416 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
1417 )
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1418 o = outgoing.missing
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1419 out.update(o)
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1420 if not o:
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1421 scmutil.nochangesfound(repo.ui, repo, outgoing.excluded)
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1422 others.append(other)
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1423 except: # re-raises
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1424 other.close()
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1425 raise
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1426 # 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
1427 outgoing_revs = list(out)
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1428 cl = repo.changelog
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1429 outgoing_revs.sort(key=cl.rev)
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1430 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
1431
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1432
46931
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1433 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
1434 ret = 1
b2740c547243 outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46912
diff changeset
1435 if opts.get(b'subrepos'):
b2740c547243 outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46912
diff changeset
1436 ctx = repo[None]
b2740c547243 outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46912
diff changeset
1437 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
1438 sub = ctx.sub(subpath)
46931
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1439 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
1440 return ret
b2740c547243 outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46912
diff changeset
1441
b2740c547243 outgoing: make `recurse` a real function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46912
diff changeset
1442
46914
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1443 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
1444 """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
1445 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
1446 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
1447 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
1448 revs.reverse()
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1449 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
1450 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
1451 yield r
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1452 return
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1453
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1454 count = 0
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1455 cl = repo.changelog
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1456 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
1457 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
1458 break
47012
d55b71393907 node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents: 46953
diff changeset
1459 parents = [p for p in cl.parents(n) if p != repo.nullid]
46914
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1460 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
1461 continue
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1462 count += 1
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1463 yield n
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1464
50b79f8b802d outgoing: move filtering logic in its own function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46913
diff changeset
1465
46931
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1466 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
1467 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
1468 logcmdutil.checkunsupportedgraphflags([], opts)
46931
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1469 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
1470 ret = 1
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
1471 try:
46912
627bb1875fee outgoing: remove some early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46908
diff changeset
1472 if o:
627bb1875fee outgoing: remove some early return
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46908
diff changeset
1473 ret = 0
12400
40852b4b910c incoming/outgoing: Fix recursion on sub repositories
Erik Zielke <ez@aragost.com>
parents: 12314
diff changeset
1474
46915
efc6f6a794bd outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46914
diff changeset
1475 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
1476 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
1477 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
1478 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
1479 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
1480 )
efc6f6a794bd outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46914
diff changeset
1481 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
1482 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
1483 )
efc6f6a794bd outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46914
diff changeset
1484 else:
efc6f6a794bd outgoing: merge the code handling --graph with the main one
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46914
diff changeset
1485 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
1486 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
1487 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
1488 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
1489 displayer.close()
46931
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1490 for oth in others:
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1491 cmdutil.outgoinghooks(ui, repo, oth, opts, o)
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1492 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
1493 return ret # exit code is zero since we found outgoing changes
46663
a4c19a162615 sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents: 46314
diff changeset
1494 finally:
46931
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1495 for oth in others:
d4e4ccb75f99 outgoing: accept multiple destinations
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 46930
diff changeset
1496 oth.close()
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1497
12271
01dc8ba3e032 outgoing: move code from commands to cmdutil
Martin Geisler <mg@lazybytes.net>
parents: 12144
diff changeset
1498
42155
57539e5ea2e0 verify: introduce a notion of "level"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42109
diff changeset
1499 def verify(repo, level=None):
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents: 2775
diff changeset
1500 """verify the consistency of a repository"""
42155
57539e5ea2e0 verify: introduce a notion of "level"
Pierre-Yves David <pierre-yves.david@octobus.net>
parents: 42109
diff changeset
1501 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
1502
f1d46075b13a verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents: 25365
diff changeset
1503 # 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
1504 # 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
1505 # concern.
f1d46075b13a verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents: 25365
diff changeset
1506
f1d46075b13a verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents: 25365
diff changeset
1507 # pathto() is needed for -R case
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1508 revs = repo.revs(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1509 b"filelog(%s)", util.pathto(repo.root, repo.getcwd(), b'.hgsubstate')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1510 )
25591
f1d46075b13a verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents: 25365
diff changeset
1511
f1d46075b13a verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents: 25365
diff changeset
1512 if revs:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1513 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
1514 for rev in revs:
f1d46075b13a verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents: 25365
diff changeset
1515 ctx = repo[rev]
f1d46075b13a verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents: 25365
diff changeset
1516 try:
f1d46075b13a verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents: 25365
diff changeset
1517 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
1518 try:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1519 ret = (
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1520 ctx.sub(subpath, allowcreate=False).verify() or ret
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1521 )
29021
92d37fb3f1aa verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents: 28655
diff changeset
1522 except error.RepoError as e:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1523 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
1524 except Exception:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1525 repo.ui.warn(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1526 _(b'.hgsubstate is corrupt in revision %s\n')
46113
59fa3890d40a node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents: 45942
diff changeset
1527 % short(ctx.node())
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1528 )
25591
f1d46075b13a verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents: 25365
diff changeset
1529
f1d46075b13a verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents: 25365
diff changeset
1530 return ret
11273
d1908cb95a82 remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents: 11256
diff changeset
1531
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1532
11273
d1908cb95a82 remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents: 11256
diff changeset
1533 def remoteui(src, opts):
43787
be8552f25cab cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents: 43238
diff changeset
1534 """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
1535 if util.safehasattr(src, b'baseui'): # looks like a repository
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1536 dst = src.baseui.copy() # drop repo-specific config
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1537 src = src.ui # copy target options from repo
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1538 else: # assume it's a global ui object
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1539 dst = src.copy() # keep all global options
11273
d1908cb95a82 remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents: 11256
diff changeset
1540
d1908cb95a82 remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents: 11256
diff changeset
1541 # copy ssh-specific options
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1542 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
1543 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
1544 if v:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1545 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
1546
d1908cb95a82 remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents: 11256
diff changeset
1547 # copy bundle-specific options
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1548 r = src.config(b'bundle', b'mainreporoot')
11273
d1908cb95a82 remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents: 11256
diff changeset
1549 if r:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1550 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
1551
13192
4d03707916d3 https: use web.cacerts configuration from local repo to validate remote repo
Mads Kiilerich <mads@kiilerich.com>
parents: 12735
diff changeset
1552 # 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
1553 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
1554 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
1555 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
1556 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
1557 if v:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1558 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
1559
d1908cb95a82 remoteui: move from cmdutil to hg
Matt Mackall <mpm@selenic.com>
parents: 11256
diff changeset
1560 return dst
26219
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1561
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1562
26219
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1563 # Files of interest
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1564 # 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
1565 # these files.
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1566 foi = [
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1567 (b'spath', b'00changelog.i'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1568 (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
1569 (b'spath', b'obsstore'),
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
1570 (b'path', b'bookmarks'), # ! bookmark can change content at the same size
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1571 ]
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42971
diff changeset
1572
26219
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1573
48946
642e31cb55f0 py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents: 48875
diff changeset
1574 class cachedlocalrepo:
26219
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1575 """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
1576
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1577 def __init__(self, repo):
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1578 """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
1579
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1580 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
1581 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
1582 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
1583 """
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1584 assert isinstance(repo, localrepo.localrepository)
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1585 self._repo = repo
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1586 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
1587 self._filtername = repo.filtername
26219
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1588
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1589 def fetch(self):
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1590 """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
1591
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1592 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
1593 automatically and returned.
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1594
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1595 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
1596 repo instance was created.
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1597 """
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1598 # 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
1599 # 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
1600 # 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
1601 # 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
1602
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1603 state, mtime = self._repostate()
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1604 if state == self._state:
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1605 return self._repo, False
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1606
28119
91a827e760df hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28020
diff changeset
1607 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
1608 if self._filtername:
91a827e760df hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28020
diff changeset
1609 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
1610 else:
91a827e760df hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28020
diff changeset
1611 self._repo = repo.unfiltered()
26219
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1612 self._state = state
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1613 self.mtime = mtime
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1614
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1615 return self._repo, True
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1616
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1617 def _repostate(self):
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1618 state = []
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1619 maxmtime = -1
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1620 for attr, fname in foi:
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1621 prefix = getattr(self._repo, attr)
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1622 p = os.path.join(prefix, fname)
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1623 try:
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1624 st = os.stat(p)
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1625 except OSError:
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1626 st = os.stat(prefix)
36781
ffa3026d4196 cleanup: use stat_result[stat.ST_MTIME] instead of stat_result.st_mtime
Augie Fackler <augie@google.com>
parents: 36702
diff changeset
1627 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: 36702
diff changeset
1628 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
1629
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1630 return tuple(state), maxmtime
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1631
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1632 def copy(self):
26240
2b1434e5eaa0 hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26219
diff changeset
1633 """Obtain a copy of this class instance.
2b1434e5eaa0 hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26219
diff changeset
1634
2b1434e5eaa0 hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26219
diff changeset
1635 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
1636 completely independent of the original.
2b1434e5eaa0 hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26219
diff changeset
1637 """
2b1434e5eaa0 hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26219
diff changeset
1638 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
1639 if self._filtername:
91a827e760df hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28020
diff changeset
1640 repo = repo.filtered(self._filtername)
91a827e760df hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28020
diff changeset
1641 else:
91a827e760df hg: make cachedlocalrepo cache appropriate repoview object
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 28020
diff changeset
1642 repo = repo.unfiltered()
26240
2b1434e5eaa0 hg: always create new localrepository instance
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26219
diff changeset
1643 c = cachedlocalrepo(repo)
26219
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1644 c._state = self._state
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1645 c.mtime = self.mtime
ae33fff17c1e hg: establish a cache for localrepository instances
Gregory Szorc <gregory.szorc@gmail.com>
parents: 26103
diff changeset
1646 return c