Mercurial > hg
annotate mercurial/subrepo.py @ 46924:ca0049946e9a
split: avoid strip if split is a no-op (identical to original)
Differential Revision: https://phab.mercurial-scm.org/D10389
author | Kyle Lippincott <spectral@google.com> |
---|---|
date | Mon, 12 Apr 2021 19:25:34 -0700 |
parents | ffd3e823a7e5 |
children | 0afe96e374a7 |
rev | line source |
---|---|
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35925
diff
changeset
|
1 # subrepo.py - sub-repository classes and factory |
8812
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <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 2009-2010 Olivia Mackall <olivia@selenic.com> |
8812
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 # |
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
8812
859f841937d0
subrepo: introduce basic state parsing
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
8 from __future__ import absolute_import |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
9 |
23540
f274d27f1994
addremove: automatically process a subrepository's subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
23537
diff
changeset
|
10 import copy |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
11 import errno |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
12 import os |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
13 import re |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
14 import stat |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
15 import subprocess |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
16 import sys |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
17 import tarfile |
19788
c26690fe5f08
subrepo: move import of xml.minidom.dom to its own line for check-code
Augie Fackler <raf@durin42.com>
parents:
19637
diff
changeset
|
18 import xml.dom.minidom |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
19 |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
20 from .i18n import _ |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
21 from .node import ( |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
22 bin, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
23 hex, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
24 nullid, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
25 short, |
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
26 ) |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
27 from . import ( |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
28 cmdutil, |
30635
a150173da1c1
py3: replace os.environ with encoding.environ (part 2 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30615
diff
changeset
|
29 encoding, |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
30 error, |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
31 exchange, |
35888
c8e2d6ed1f9e
cmdutil: drop aliases for logcmdutil functions (API)
Yuya Nishihara <yuya@tcha.org>
parents:
35777
diff
changeset
|
32 logcmdutil, |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
33 match as matchmod, |
45556
03726f5b6092
merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents:
45375
diff
changeset
|
34 merge as merge, |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
35 pathutil, |
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
36 phases, |
30615
bb77654dc7ae
py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30060
diff
changeset
|
37 pycompat, |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
38 scmutil, |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35925
diff
changeset
|
39 subrepoutil, |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
40 util, |
31236
8a0687a2be75
vfs: use 'vfs' module directly in 'mercurial.subrepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31102
diff
changeset
|
41 vfs as vfsmod, |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
42 ) |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36939
diff
changeset
|
43 from .utils import ( |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36939
diff
changeset
|
44 dateutil, |
44060
a61287a95dc3
core: migrate uses of hashlib.sha1 to hashutil.sha1
Augie Fackler <augie@google.com>
parents:
44009
diff
changeset
|
45 hashutil, |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
46 procutil, |
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
|
47 urlutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36939
diff
changeset
|
48 ) |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
49 |
9092
9aebeea7ac00
subrepo: use hg.repository instead of creating localrepo directly
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
9049
diff
changeset
|
50 hg = None |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35925
diff
changeset
|
51 reporelpath = subrepoutil.reporelpath |
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35925
diff
changeset
|
52 subrelpath = subrepoutil.subrelpath |
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35925
diff
changeset
|
53 _abssource = subrepoutil._abssource |
14050
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
14025
diff
changeset
|
54 propertycache = util.propertycache |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
55 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
56 |
18940
798bdb7f1517
subrepo: do not push mercurial subrepos whose store is clean
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18939
diff
changeset
|
57 def _expandedabspath(path): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
58 """ |
18940
798bdb7f1517
subrepo: do not push mercurial subrepos whose store is clean
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18939
diff
changeset
|
59 get a path or url and if it is a path expand it and return an absolute path |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
60 """ |
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
|
61 expandedpath = urlutil.urllocalpath(util.expandpath(path)) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46819
diff
changeset
|
62 u = urlutil.url(expandedpath) |
18940
798bdb7f1517
subrepo: do not push mercurial subrepos whose store is clean
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18939
diff
changeset
|
63 if not u.scheme: |
798bdb7f1517
subrepo: do not push mercurial subrepos whose store is clean
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18939
diff
changeset
|
64 path = util.normpath(os.path.abspath(u.path)) |
798bdb7f1517
subrepo: do not push mercurial subrepos whose store is clean
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18939
diff
changeset
|
65 return path |
18936
1fa4edb8456e
subrepo: introduce storeclean helper functions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18851
diff
changeset
|
66 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
67 |
18936
1fa4edb8456e
subrepo: introduce storeclean helper functions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18851
diff
changeset
|
68 def _getstorehashcachename(remotepath): |
1fa4edb8456e
subrepo: introduce storeclean helper functions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18851
diff
changeset
|
69 '''get a unique filename for the store hash cache of a remote repository''' |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
70 return hex(hashutil.sha1(_expandedabspath(remotepath)).digest())[0:12] |
18936
1fa4edb8456e
subrepo: introduce storeclean helper functions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18851
diff
changeset
|
71 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
72 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
73 class SubrepoAbort(error.Abort): |
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
74 """Exception class used to avoid handling a subrepo error more than once""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
75 |
18263
9aa6bee6e9f9
subrepo: add subrepo property to SubrepoAbort exceptions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18109
diff
changeset
|
76 def __init__(self, *args, **kw): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
77 self.subrepo = kw.pop('subrepo', None) |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
78 self.cause = kw.pop('cause', None) |
18296
a74101cd6965
subrepo: fix python2.4 compatibility after 9aa6bee6e9f9
Brendan Cully <brendan@kublai.com>
parents:
18263
diff
changeset
|
79 error.Abort.__init__(self, *args, **kw) |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
80 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
81 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
82 def annotatesubrepoerror(func): |
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
83 def decoratedmethod(self, *args, **kargs): |
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
84 try: |
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
85 res = func(self, *args, **kargs) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25658
diff
changeset
|
86 except SubrepoAbort as ex: |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
87 # This exception has already been handled |
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
88 raise ex |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25658
diff
changeset
|
89 except error.Abort as ex: |
18263
9aa6bee6e9f9
subrepo: add subrepo property to SubrepoAbort exceptions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18109
diff
changeset
|
90 subrepo = subrelpath(self) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
91 errormsg = ( |
45682
d2e1dcd4490d
errors: name arguments to Abort constructor
Martin von Zweigbergk <martinvonz@google.com>
parents:
45577
diff
changeset
|
92 ex.message + b' ' + _(b'(in subrepository "%s")') % subrepo |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
93 ) |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
94 # avoid handling this exception by raising a SubrepoAbort exception |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
95 raise SubrepoAbort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
96 errormsg, hint=ex.hint, subrepo=subrepo, cause=sys.exc_info() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
97 ) |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
98 return res |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
99 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
100 return decoratedmethod |
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
101 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
102 |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
103 def _updateprompt(ui, sub, dirty, local, remote): |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
104 if dirty: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
105 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
106 b' subrepository sources for %s differ\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
107 b'you can use (l)ocal source (%s) or (r)emote source (%s).\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
108 b'what do you want to do?' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
109 b'$$ &Local $$ &Remote' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
110 ) % (subrelpath(sub), local, remote) |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
111 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
112 msg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
113 b' subrepository sources for %s differ (in checked out ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
114 b'version)\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
115 b'you can use (l)ocal source (%s) or (r)emote source (%s).\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
116 b'what do you want to do?' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
117 b'$$ &Local $$ &Remote' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
118 ) % (subrelpath(sub), local, remote) |
19226
c58b6ab4c26f
ui: merge prompt text components into a singe string
Matt Mackall <mpm@selenic.com>
parents:
19156
diff
changeset
|
119 return ui.promptchoice(msg, 0) |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
120 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
121 |
24724
95eb067b2b5e
subrepo: pass wvfs to _sanitize instead of absolute path to a subrepository
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24695
diff
changeset
|
122 def _sanitize(ui, vfs, ignore): |
24726
747748766421
subrepo: use vfs.walk instead of os.walk
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24724
diff
changeset
|
123 for dirname, dirs, names in vfs.walk(): |
21567
5900bc09e684
subrepo: avoid sanitizing ".hg/hgrc" in meta data area for non-hg subrepos
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21566
diff
changeset
|
124 for i, d in enumerate(dirs): |
5900bc09e684
subrepo: avoid sanitizing ".hg/hgrc" in meta data area for non-hg subrepos
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21566
diff
changeset
|
125 if d.lower() == ignore: |
5900bc09e684
subrepo: avoid sanitizing ".hg/hgrc" in meta data area for non-hg subrepos
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21566
diff
changeset
|
126 del dirs[i] |
5900bc09e684
subrepo: avoid sanitizing ".hg/hgrc" in meta data area for non-hg subrepos
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21566
diff
changeset
|
127 break |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
128 if vfs.basename(dirname).lower() != b'.hg': |
21564
2e91d4964ecd
subrepo: make "_sanitize()" work
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21041
diff
changeset
|
129 continue |
20104
224e96078708
subrepo: sanitize non-hg subrepos
Matt Mackall <mpm@selenic.com>
parents:
19811
diff
changeset
|
130 for f in names: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
131 if f.lower() == b'hgrc': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
132 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
133 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
134 b"warning: removing potentially hostile 'hgrc' " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
135 b"in '%s'\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
136 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
137 % vfs.join(dirname) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
138 ) |
24726
747748766421
subrepo: use vfs.walk instead of os.walk
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24724
diff
changeset
|
139 vfs.unlink(vfs.reljoin(dirname, f)) |
20104
224e96078708
subrepo: sanitize non-hg subrepos
Matt Mackall <mpm@selenic.com>
parents:
19811
diff
changeset
|
140 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
141 |
34984
071cbeba4212
subrepo: disallow symlink traversal across subrepo mount point (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34879
diff
changeset
|
142 def _auditsubrepopath(repo, path): |
41458
83377b4b4ae0
subrepo: reject potentially unsafe subrepo paths (BC) (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
41457
diff
changeset
|
143 # sanity check for potentially unsafe paths such as '~' and '$FOO' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
144 if path.startswith(b'~') or b'$' in path or util.expandpath(path) != path: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
145 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
146 _(b'subrepo path contains illegal component: %s') % path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
147 ) |
34984
071cbeba4212
subrepo: disallow symlink traversal across subrepo mount point (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34879
diff
changeset
|
148 # auditor doesn't check if the path itself is a symlink |
071cbeba4212
subrepo: disallow symlink traversal across subrepo mount point (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34879
diff
changeset
|
149 pathutil.pathauditor(repo.root)(path) |
071cbeba4212
subrepo: disallow symlink traversal across subrepo mount point (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34879
diff
changeset
|
150 if repo.wvfs.islink(path): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
151 raise error.Abort(_(b"subrepo '%s' traverses symbolic link") % path) |
34984
071cbeba4212
subrepo: disallow symlink traversal across subrepo mount point (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34879
diff
changeset
|
152 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
153 |
34989
1a314176da9c
subrepo: use per-type config options to enable subrepos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34987
diff
changeset
|
154 SUBREPO_ALLOWED_DEFAULTS = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
155 b'hg': True, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
156 b'git': False, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
157 b'svn': False, |
34989
1a314176da9c
subrepo: use per-type config options to enable subrepos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34987
diff
changeset
|
158 } |
1a314176da9c
subrepo: use per-type config options to enable subrepos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34987
diff
changeset
|
159 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
160 |
34985
5e27afeddaee
subrepo: add config option to reject any subrepo operations (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
161 def _checktype(ui, kind): |
34989
1a314176da9c
subrepo: use per-type config options to enable subrepos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34987
diff
changeset
|
162 # subrepos.allowed is a master kill switch. If disabled, subrepos are |
1a314176da9c
subrepo: use per-type config options to enable subrepos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34987
diff
changeset
|
163 # disabled period. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
164 if not ui.configbool(b'subrepos', b'allowed', True): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
165 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
166 _(b'subrepos not enabled'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
167 hint=_(b"see 'hg help config.subrepos' for details"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
168 ) |
34989
1a314176da9c
subrepo: use per-type config options to enable subrepos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34987
diff
changeset
|
169 |
1a314176da9c
subrepo: use per-type config options to enable subrepos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34987
diff
changeset
|
170 default = SUBREPO_ALLOWED_DEFAULTS.get(kind, False) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
171 if not ui.configbool(b'subrepos', b'%s:allowed' % kind, default): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
172 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
173 _(b'%s subrepos not allowed') % kind, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
174 hint=_(b"see 'hg help config.subrepos' for details"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
175 ) |
34989
1a314176da9c
subrepo: use per-type config options to enable subrepos
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34987
diff
changeset
|
176 |
34985
5e27afeddaee
subrepo: add config option to reject any subrepo operations (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
177 if kind not in types: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
178 raise error.Abort(_(b'unknown subrepo type %s') % kind) |
34985
5e27afeddaee
subrepo: add config option to reject any subrepo operations (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
179 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
180 |
29021
92d37fb3f1aa
verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28949
diff
changeset
|
181 def subrepo(ctx, path, allowwdir=False, allowcreate=True): |
11571 | 182 """return instance of the right subrepo class for subrepo in path""" |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
183 # subrepo inherently violates our import layering rules |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
184 # because it wants to make repo objects from deep inside the stack |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
185 # so we manually delay the circular imports to not break |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
186 # scripts that don't use our demand-loading |
9092
9aebeea7ac00
subrepo: use hg.repository instead of creating localrepo directly
Abderrahim Kitouni <a.kitouni@gmail.com>
parents:
9049
diff
changeset
|
187 global hg |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
188 from . import hg as h |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
189 |
8814
ab668c92a036
subrepo: add update/merge logic
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
190 hg = h |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
191 |
34985
5e27afeddaee
subrepo: add config option to reject any subrepo operations (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
192 repo = ctx.repo() |
5e27afeddaee
subrepo: add config option to reject any subrepo operations (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
193 _auditsubrepopath(repo, path) |
16756
2e3513e7348a
subrepo: make subrepo.subrepo(<not a subrepo path>) fail
Dov Feldstern <dfeldstern@gmail.com>
parents:
16683
diff
changeset
|
194 state = ctx.substate[path] |
34985
5e27afeddaee
subrepo: add config option to reject any subrepo operations (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
195 _checktype(repo.ui, state[2]) |
25600
70ac1868b707
subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
25591
diff
changeset
|
196 if allowwdir: |
70ac1868b707
subrepo: allow a representation of the working directory subrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
25591
diff
changeset
|
197 state = (state[0], ctx.subrev(path), state[2]) |
29021
92d37fb3f1aa
verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28949
diff
changeset
|
198 return types[state[2]](ctx, path, state[:2], allowcreate) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
199 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
200 |
25416
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
201 def nullsubrepo(ctx, path, pctx): |
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
202 """return an empty subrepo in pctx for the extant subrepo in ctx""" |
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
203 # subrepo inherently violates our import layering rules |
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
204 # because it wants to make repo objects from deep inside the stack |
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
205 # so we manually delay the circular imports to not break |
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
206 # scripts that don't use our demand-loading |
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
207 global hg |
25980
38c585c2f8cc
subrepo: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25848
diff
changeset
|
208 from . import hg as h |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
209 |
25416
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
210 hg = h |
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
211 |
34985
5e27afeddaee
subrepo: add config option to reject any subrepo operations (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
212 repo = ctx.repo() |
5e27afeddaee
subrepo: add config option to reject any subrepo operations (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
213 _auditsubrepopath(repo, path) |
25416
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
214 state = ctx.substate[path] |
34985
5e27afeddaee
subrepo: add config option to reject any subrepo operations (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
34984
diff
changeset
|
215 _checktype(repo.ui, state[2]) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
216 subrev = b'' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
217 if state[2] == b'hg': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
218 subrev = b"0" * 40 |
29021
92d37fb3f1aa
verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28949
diff
changeset
|
219 return types[state[2]](pctx, path, (state[0], subrev), True) |
25416
c4a92867c048
subrepo: introduce the nullsubrepo() method
Matt Harbison <matt_harbison@yahoo.com>
parents:
25228
diff
changeset
|
220 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
221 |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
222 # subrepo classes need to implement the following abstract class: |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
223 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
224 |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
225 class abstractsubrepo(object): |
24671
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
226 def __init__(self, ctx, path): |
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
227 """Initialize abstractsubrepo part |
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
228 |
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
229 ``ctx`` is the context referring this subrepository in the |
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
230 parent repository. |
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
231 |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26587
diff
changeset
|
232 ``path`` is the path to this subrepository as seen from |
24671
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
233 innermost repository. |
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
234 """ |
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
235 self.ui = ctx.repo().ui |
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
236 self._ctx = ctx |
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
237 self._path = path |
23536
fcbc66b5da6a
subrepo: store the ui object in the base class
Matt Harbison <matt_harbison@yahoo.com>
parents:
23523
diff
changeset
|
238 |
32005
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
239 def addwebdirpath(self, serverpath, webconf): |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
240 """Add the hgwebdir entries for this subrepo, and any of its subrepos. |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
241 |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
242 ``serverpath`` is the path component of the URL for this repo. |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
243 |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
244 ``webconf`` is the dictionary of hgwebdir entries. |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
245 """ |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
246 pass |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
247 |
18937
9a171baa9202
subrepo: introduce storeclean method
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18936
diff
changeset
|
248 def storeclean(self, path): |
9a171baa9202
subrepo: introduce storeclean method
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18936
diff
changeset
|
249 """ |
9a171baa9202
subrepo: introduce storeclean method
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18936
diff
changeset
|
250 returns true if the repository has not changed since it was last |
9a171baa9202
subrepo: introduce storeclean method
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18936
diff
changeset
|
251 cloned from or pushed to a given repository. |
9a171baa9202
subrepo: introduce storeclean method
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18936
diff
changeset
|
252 """ |
9a171baa9202
subrepo: introduce storeclean method
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18936
diff
changeset
|
253 return False |
9a171baa9202
subrepo: introduce storeclean method
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18936
diff
changeset
|
254 |
33364
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
255 def dirty(self, ignoreupdate=False, missing=False): |
13174
be7e8e9bc5e5
mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents:
13172
diff
changeset
|
256 """returns true if the dirstate of the subrepo is dirty or does not |
be7e8e9bc5e5
mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents:
13172
diff
changeset
|
257 match current stored state. If ignoreupdate is true, only check |
33364
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
258 whether the subrepo has uncommitted changes in its dirstate. If missing |
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
259 is true, check for deleted files. |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
260 """ |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
261 raise NotImplementedError |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
262 |
33364
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
263 def dirtyreason(self, ignoreupdate=False, missing=False): |
24470
76b0b0fed2e3
subrepo: add dirtyreason to centralize composing dirty reason message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24413
diff
changeset
|
264 """return reason string if it is ``dirty()`` |
76b0b0fed2e3
subrepo: add dirtyreason to centralize composing dirty reason message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24413
diff
changeset
|
265 |
76b0b0fed2e3
subrepo: add dirtyreason to centralize composing dirty reason message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24413
diff
changeset
|
266 Returned string should have enough information for the message |
76b0b0fed2e3
subrepo: add dirtyreason to centralize composing dirty reason message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24413
diff
changeset
|
267 of exception. |
76b0b0fed2e3
subrepo: add dirtyreason to centralize composing dirty reason message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24413
diff
changeset
|
268 |
76b0b0fed2e3
subrepo: add dirtyreason to centralize composing dirty reason message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24413
diff
changeset
|
269 This returns None, otherwise. |
76b0b0fed2e3
subrepo: add dirtyreason to centralize composing dirty reason message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24413
diff
changeset
|
270 """ |
33364
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
271 if self.dirty(ignoreupdate=ignoreupdate, missing=missing): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
272 return _(b'uncommitted changes in subrepository "%s"') % subrelpath( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
273 self |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
274 ) |
24470
76b0b0fed2e3
subrepo: add dirtyreason to centralize composing dirty reason message
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24413
diff
changeset
|
275 |
30755
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30639
diff
changeset
|
276 def bailifchanged(self, ignoreupdate=False, hint=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
277 """raise Abort if subrepository is ``dirty()``""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
278 dirtyreason = self.dirtyreason(ignoreupdate=ignoreupdate, missing=True) |
24471
1ff35d76421c
subrepo: add bailifchanged to centralize raising Abort if subrepo is dirty
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24470
diff
changeset
|
279 if dirtyreason: |
30755
0fbb3a5c188e
rebase: provide detailed hint to abort message if working dir is not clean
Valters Vingolds <valters@vingolds.ch>
parents:
30639
diff
changeset
|
280 raise error.Abort(dirtyreason, hint=hint) |
24471
1ff35d76421c
subrepo: add bailifchanged to centralize raising Abort if subrepo is dirty
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24470
diff
changeset
|
281 |
16072
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
282 def basestate(self): |
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
283 """current working directory base state, disregarding .hgsubstate |
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
284 state and working directory modifications""" |
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
285 raise NotImplementedError |
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
286 |
12506
e7d45e41338c
subrepos: add missing self argument to abstractsubrepo.checknested
Brodie Rao <brodie@bitheap.org>
parents:
12503
diff
changeset
|
287 def checknested(self, path): |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12060
diff
changeset
|
288 """check if path is a subrepository within this repository""" |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12060
diff
changeset
|
289 return False |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12060
diff
changeset
|
290 |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
291 def commit(self, text, user, date): |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
292 """commit the current changes to the subrepo with the given |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
293 log message. Use given user and date if possible. Return the |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
294 new state of the subrepo. |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
295 """ |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
296 raise NotImplementedError |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
297 |
20176
4c96c50ef937
subrepo: check phase of state in each subrepositories before committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20108
diff
changeset
|
298 def phase(self, state): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
299 """returns phase of specified state in the subrepository.""" |
20176
4c96c50ef937
subrepo: check phase of state in each subrepositories before committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20108
diff
changeset
|
300 return phases.public |
4c96c50ef937
subrepo: check phase of state in each subrepositories before committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20108
diff
changeset
|
301 |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
302 def remove(self): |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
303 """remove the subrepo |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
304 |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
305 (should verify the dirstate is not dirty first) |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
306 """ |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
307 raise NotImplementedError |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
308 |
13322
c19b9282d3a7
subrepo: make update -C clean the working directory for svn subrepos
Erik Zielke <ez@aragost.com>
parents:
13287
diff
changeset
|
309 def get(self, state, overwrite=False): |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
310 """run whatever commands are needed to put the subrepo into |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
311 this state |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
312 """ |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
313 raise NotImplementedError |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
314 |
13413
fa921dcd9993
subrepo: remove argument introduced by mistake in c19b9282d3a7
Erik Zielke <ez@aragost.com>
parents:
13333
diff
changeset
|
315 def merge(self, state): |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
316 """merge currently-saved state with the new state.""" |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
317 raise NotImplementedError |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
318 |
15708
309e49491253
push: propagate --new-branch and --ssh options when pushing subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15614
diff
changeset
|
319 def push(self, opts): |
11572 | 320 """perform whatever action is analogous to 'hg push' |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
321 |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
322 This may be a no-op on some systems. |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
323 """ |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
324 raise NotImplementedError |
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
325 |
41650
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41648
diff
changeset
|
326 def add(self, ui, match, prefix, uipathfn, explicitonly, **opts): |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12210
diff
changeset
|
327 return [] |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
328 |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41651
diff
changeset
|
329 def addremove(self, matcher, prefix, uipathfn, opts): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
330 self.ui.warn(b"%s: %s" % (prefix, _(b"addremove is not supported"))) |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23536
diff
changeset
|
331 return 1 |
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23536
diff
changeset
|
332 |
32584
746e12a767b3
cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents:
32540
diff
changeset
|
333 def cat(self, match, fm, fntemplate, prefix, **opts): |
21041
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
20970
diff
changeset
|
334 return 1 |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
20970
diff
changeset
|
335 |
12166
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
336 def status(self, rev2, **opts): |
22914
c95db3208a33
status: update various other methods to return new class
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22695
diff
changeset
|
337 return scmutil.status([], [], [], [], [], [], []) |
12166
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
338 |
18006
0c10cf819146
subrepo: add argument to "diff()" to pass "ui" of caller side (issue3712) (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17895
diff
changeset
|
339 def diff(self, ui, diffopts, node2, match, prefix, **opts): |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
340 pass |
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
341 |
12272
42ecd56399d7
outgoing: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12270
diff
changeset
|
342 def outgoing(self, ui, dest, opts): |
42ecd56399d7
outgoing: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12270
diff
changeset
|
343 return 1 |
42ecd56399d7
outgoing: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12270
diff
changeset
|
344 |
12274
c02e1ed3d407
incoming: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12272
diff
changeset
|
345 def incoming(self, ui, source, opts): |
c02e1ed3d407
incoming: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12272
diff
changeset
|
346 return 1 |
c02e1ed3d407
incoming: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12272
diff
changeset
|
347 |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
348 def files(self): |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
349 """return filename iterator""" |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
350 raise NotImplementedError |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
351 |
31099
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
352 def filedata(self, name, decode): |
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
353 """return file data, optionally passed through repo decoders""" |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
354 raise NotImplementedError |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
355 |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
356 def fileflags(self, name): |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
357 """return file flags""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
358 return b'' |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
359 |
44009
e685fac56693
match: resolve filesets against the passed `cwd`, not the current one
Matt Harbison <matt_harbison@yahoo.com>
parents:
43913
diff
changeset
|
360 def matchfileset(self, cwd, expr, badfn=None): |
25121
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
361 """Resolve the fileset expression for this repo""" |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41675
diff
changeset
|
362 return matchmod.never(badfn=badfn) |
25121
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
363 |
41748
980e05204ed8
subrepo: use root-repo-relative path from `hg files` with ui.relative-paths=no
Martin von Zweigbergk <martinvonz@google.com>
parents:
41679
diff
changeset
|
364 def printfiles(self, ui, m, uipathfn, fm, fmt, subrepos): |
24413
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
365 """handle the files command for this subrepo""" |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
366 return 1 |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
367 |
31099
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
368 def archive(self, archiver, prefix, match=None, decode=True): |
17108
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17036
diff
changeset
|
369 if match is not None: |
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17036
diff
changeset
|
370 files = [f for f in self.files() if match(f)] |
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17036
diff
changeset
|
371 else: |
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17036
diff
changeset
|
372 files = self.files() |
13144
aae2d5cbde64
subrepo: add progress bar support to archive
Martin Geisler <mg@aragost.com>
parents:
13137
diff
changeset
|
373 total = len(files) |
aae2d5cbde64
subrepo: add progress bar support to archive
Martin Geisler <mg@aragost.com>
parents:
13137
diff
changeset
|
374 relpath = subrelpath(self) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
375 progress = self.ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
376 _(b'archiving (%s)') % relpath, unit=_(b'files'), total=total |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
377 ) |
38379
3a7c33a2cc5e
subrepo: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38370
diff
changeset
|
378 progress.update(0) |
3a7c33a2cc5e
subrepo: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38370
diff
changeset
|
379 for name in files: |
12323
f00953d9533c
subrepo: add support for 'hg archive'
Martin Geisler <mg@aragost.com>
parents:
12322
diff
changeset
|
380 flags = self.fileflags(name) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
381 mode = b'x' in flags and 0o755 or 0o644 |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
382 symlink = b'l' in flags |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
383 archiver.addfile( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
384 prefix + name, mode, symlink, self.filedata(name, decode) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
385 ) |
38379
3a7c33a2cc5e
subrepo: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38370
diff
changeset
|
386 progress.increment() |
3a7c33a2cc5e
subrepo: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38370
diff
changeset
|
387 progress.complete() |
18967
88d1b59f6906
archive: raise error.Abort if the file pattern matches no files
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18964
diff
changeset
|
388 return total |
12323
f00953d9533c
subrepo: add support for 'hg archive'
Martin Geisler <mg@aragost.com>
parents:
12322
diff
changeset
|
389 |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15287
diff
changeset
|
390 def walk(self, match): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
391 """ |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15287
diff
changeset
|
392 walk recursively through the directory tree, finding all files |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15287
diff
changeset
|
393 matched by the match function |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
394 """ |
12323
f00953d9533c
subrepo: add support for 'hg archive'
Martin Geisler <mg@aragost.com>
parents:
12322
diff
changeset
|
395 |
41653
16a49c778bde
forget: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41652
diff
changeset
|
396 def forget(self, match, prefix, uipathfn, dryrun, interactive): |
16527
17a1f7690b49
subrepo: fix default implementation of forget() (issue3404)
Patrick Mezard <patrick@mezard.eu>
parents:
16468
diff
changeset
|
397 return ([], []) |
12323
f00953d9533c
subrepo: add support for 'hg archive'
Martin Geisler <mg@aragost.com>
parents:
12322
diff
changeset
|
398 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
399 def removefiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
400 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
401 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
402 prefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
403 uipathfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
404 after, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
405 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
406 subrepos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
407 dryrun, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
408 warnings, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
409 ): |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
22927
diff
changeset
|
410 """remove the matched files from the subrepository and the filesystem, |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
22927
diff
changeset
|
411 possibly by force and/or after the file has been removed from the |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
22927
diff
changeset
|
412 filesystem. Return 0 on success, 1 on any warning. |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
22927
diff
changeset
|
413 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
414 warnings.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
415 _(b"warning: removefiles not implemented (%s)") % self._path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
416 ) |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
22927
diff
changeset
|
417 return 1 |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
22927
diff
changeset
|
418 |
23579
e1c39f207719
subrepo: drop the 'ui' parameter to revert()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23578
diff
changeset
|
419 def revert(self, substate, *pats, **opts): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
420 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
421 _(b'%s: reverting %s subrepos is unsupported\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
422 % (substate[0], substate[2]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
423 ) |
16429
71dcce391a44
revert: add support for reverting subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16197
diff
changeset
|
424 return [] |
71dcce391a44
revert: add support for reverting subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16197
diff
changeset
|
425 |
21400
78a60daacea8
subrepo: add shortid() method to subrepo classes
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21041
diff
changeset
|
426 def shortid(self, revid): |
78a60daacea8
subrepo: add shortid() method to subrepo classes
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21041
diff
changeset
|
427 return revid |
78a60daacea8
subrepo: add shortid() method to subrepo classes
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21041
diff
changeset
|
428 |
34879
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
429 def unshare(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
430 """ |
34879
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
431 convert this repository from shared to normal storage. |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
432 """ |
34879
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
433 |
43913
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
434 def verify(self, onpush=False): |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
435 """verify the revision of this repository that is held in `_state` is |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
436 present and not hidden. Return 0 on success or warning, 1 on any |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
437 error. In the case of ``onpush``, warnings or errors will raise an |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
438 exception if the result of pushing would be a broken remote repository. |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
439 """ |
25591
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
440 return 0 |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
441 |
24672
dd0b86f740ef
subrepo: add wvfs field to access the working directory via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24671
diff
changeset
|
442 @propertycache |
dd0b86f740ef
subrepo: add wvfs field to access the working directory via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24671
diff
changeset
|
443 def wvfs(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
444 """return vfs to access the working directory of this subrepository""" |
31236
8a0687a2be75
vfs: use 'vfs' module directly in 'mercurial.subrepo'
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31102
diff
changeset
|
445 return vfsmod.vfs(self._ctx.repo().wvfs.join(self._path)) |
24672
dd0b86f740ef
subrepo: add wvfs field to access the working directory via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24671
diff
changeset
|
446 |
24673
105758d1b37b
subrepo: add _relpath field to centralize subrelpath logic
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24672
diff
changeset
|
447 @propertycache |
105758d1b37b
subrepo: add _relpath field to centralize subrelpath logic
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24672
diff
changeset
|
448 def _relpath(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
449 """return path to this subrepository as seen from outermost repository""" |
24785
39f519be5e65
subrepo: backout 93b0e0db7929 to restore reporelpath()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24778
diff
changeset
|
450 return self.wvfs.reljoin(reporelpath(self._ctx.repo()), self._path) |
24673
105758d1b37b
subrepo: add _relpath field to centralize subrelpath logic
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24672
diff
changeset
|
451 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
452 |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
453 class hgsubrepo(abstractsubrepo): |
29021
92d37fb3f1aa
verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28949
diff
changeset
|
454 def __init__(self, ctx, path, state, allowcreate): |
24671
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
455 super(hgsubrepo, self).__init__(ctx, path) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
456 self._state = state |
24302
6e092ea2eff1
subrepo: replace 'ctx._repo' with 'ctx.repo()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24256
diff
changeset
|
457 r = ctx.repo() |
41583
87a6e3c953e0
subrepo: avoid false unsafe path detection on Windows
Matt Harbison <matt_harbison@yahoo.com>
parents:
41458
diff
changeset
|
458 root = r.wjoin(util.localpath(path)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
459 create = allowcreate and not r.wvfs.exists(b'%s/.hg' % path) |
41457
6c10eba6b9cd
subrepo: prohibit variable expansion on creation of hg subrepo (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
40753
diff
changeset
|
460 # repository constructor does expand variables in path, which is |
6c10eba6b9cd
subrepo: prohibit variable expansion on creation of hg subrepo (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
40753
diff
changeset
|
461 # unsafe since subrepo path might come from untrusted source. |
6c10eba6b9cd
subrepo: prohibit variable expansion on creation of hg subrepo (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
40753
diff
changeset
|
462 if os.path.realpath(util.expandpath(root)) != root: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
463 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
464 _(b'subrepo path contains illegal component: %s') % path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
465 ) |
17873
573bec4ab7ba
subrepo: isolate configuration between each repositories in subrepo tree
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17707
diff
changeset
|
466 self._repo = hg.repository(r.baseui, root, create=create) |
41457
6c10eba6b9cd
subrepo: prohibit variable expansion on creation of hg subrepo (SEC)
Yuya Nishihara <yuya@tcha.org>
parents:
40753
diff
changeset
|
467 if self._repo.root != root: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
468 raise error.ProgrammingError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
469 b'failed to reject unsafe subrepo ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
470 b'path: %s (expanded to %s)' % (root, self._repo.root) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
471 ) |
24877
cc497780eaf9
subrepo: propagate the --hidden option to hg subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
24876
diff
changeset
|
472 |
cc497780eaf9
subrepo: propagate the --hidden option to hg subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
24876
diff
changeset
|
473 # Propagate the parent's --hidden option |
cc497780eaf9
subrepo: propagate the --hidden option to hg subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
24876
diff
changeset
|
474 if r is r.unfiltered(): |
cc497780eaf9
subrepo: propagate the --hidden option to hg subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
24876
diff
changeset
|
475 self._repo = self._repo.unfiltered() |
cc497780eaf9
subrepo: propagate the --hidden option to hg subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
24876
diff
changeset
|
476 |
23573
3fec2a3c768b
subrepo: reset 'self.ui' to the subrepo copy of 'ui' in the hgsubrepo class
Matt Harbison <matt_harbison@yahoo.com>
parents:
23572
diff
changeset
|
477 self.ui = self._repo.ui |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
478 for s, k in [(b'ui', b'commitsubrepos')]: |
17873
573bec4ab7ba
subrepo: isolate configuration between each repositories in subrepo tree
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17707
diff
changeset
|
479 v = r.ui.config(s, k) |
573bec4ab7ba
subrepo: isolate configuration between each repositories in subrepo tree
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17707
diff
changeset
|
480 if v: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
481 self.ui.setconfig(s, k, v, b'subrepo') |
25848
0ae07173881d
subrepo: mark internal-only option
Matt Mackall <mpm@selenic.com>
parents:
25773
diff
changeset
|
482 # internal config: ui._usedassubrepo |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
483 self.ui.setconfig(b'ui', b'_usedassubrepo', b'True', b'subrepo') |
14281
ccb7240acf32
subrepo: create subrepos using clone instead of pull
Martin Geisler <mg@aragost.com>
parents:
14221
diff
changeset
|
484 self._initrepo(r, state[0], create) |
ccb7240acf32
subrepo: create subrepos using clone instead of pull
Martin Geisler <mg@aragost.com>
parents:
14221
diff
changeset
|
485 |
32005
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
486 @annotatesubrepoerror |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
487 def addwebdirpath(self, serverpath, webconf): |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
488 cmdutil.addwebdirpath(self._repo, subrelpath(self), webconf) |
2406dbba49bd
serve: add support for Mercurial subrepositories
Matt Harbison <matt_harbison@yahoo.com>
parents:
31551
diff
changeset
|
489 |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
490 def storeclean(self, path): |
27844
469b86c49503
with: use context manager in subrepo storeclean
Bryan O'Sullivan <bryano@fb.com>
parents:
27843
diff
changeset
|
491 with self._repo.lock(): |
21885
fe9db58b0b2d
subrepo: ensure "lock.release()" execution at the end of "storeclean()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21585
diff
changeset
|
492 return self._storeclean(path) |
fe9db58b0b2d
subrepo: ensure "lock.release()" execution at the end of "storeclean()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21585
diff
changeset
|
493 |
fe9db58b0b2d
subrepo: ensure "lock.release()" execution at the end of "storeclean()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21585
diff
changeset
|
494 def _storeclean(self, path): |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
495 clean = True |
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
496 itercache = self._calcstorehash(path) |
25172
ca9c02cb81be
subrepo: further replacement of try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25121
diff
changeset
|
497 for filehash in self._readstorehashcache(path): |
ca9c02cb81be
subrepo: further replacement of try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25121
diff
changeset
|
498 if filehash != next(itercache, None): |
ca9c02cb81be
subrepo: further replacement of try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25121
diff
changeset
|
499 clean = False |
ca9c02cb81be
subrepo: further replacement of try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25121
diff
changeset
|
500 break |
ca9c02cb81be
subrepo: further replacement of try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25121
diff
changeset
|
501 if clean: |
ca9c02cb81be
subrepo: further replacement of try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25121
diff
changeset
|
502 # if not empty: |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
503 # the cached and current pull states have a different size |
25172
ca9c02cb81be
subrepo: further replacement of try/except with 'next'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25121
diff
changeset
|
504 clean = next(itercache, None) is None |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
505 return clean |
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
506 |
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
507 def _calcstorehash(self, remotepath): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
508 """calculate a unique "store hash" |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
509 |
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
510 This method is used to to detect when there are changes that may |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
511 require a push to a given remote path.""" |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
512 # sort the files that will be hashed in increasing (likely) file size |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
513 filelist = (b'bookmarks', b'store/phaseroots', b'store/00changelog.i') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
514 yield b'# %s\n' % _expandedabspath(remotepath) |
23365
2ff394bbfa74
subrepo: replace "_calcfilehash" invocation by "vfs.tryread"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23364
diff
changeset
|
515 vfs = self._repo.vfs |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
516 for relname in filelist: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
517 filehash = hex(hashutil.sha1(vfs.tryread(relname)).digest()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
518 yield b'%s = %s\n' % (relname, filehash) |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
519 |
23367
115af8de76a4
subrepo: add "_cachestorehashvfs" to handle cache store hash files via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23366
diff
changeset
|
520 @propertycache |
115af8de76a4
subrepo: add "_cachestorehashvfs" to handle cache store hash files via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23366
diff
changeset
|
521 def _cachestorehashvfs(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
522 return vfsmod.vfs(self._repo.vfs.join(b'cache/storehash')) |
23367
115af8de76a4
subrepo: add "_cachestorehashvfs" to handle cache store hash files via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23366
diff
changeset
|
523 |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
524 def _readstorehashcache(self, remotepath): |
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
525 '''read the store hash cache for a given remote repository''' |
23369
22e00674d17e
subrepo: replace direct file APIs around "readlines" by "vfs.tryreadlines"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23367
diff
changeset
|
526 cachefile = _getstorehashcachename(remotepath) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
527 return self._cachestorehashvfs.tryreadlines(cachefile, b'r') |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
528 |
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
529 def _cachestorehash(self, remotepath): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
530 """cache the current store hash |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
531 |
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
532 Each remote repo requires its own store hash cache, because a subrepo |
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
533 store may be "clean" versus a given remote repo, but not versus another |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
534 """ |
23372
6cfa7a73b6e7
subrepo: replace direct file APIs around "writelines" by "vfs.writelines"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23369
diff
changeset
|
535 cachefile = _getstorehashcachename(remotepath) |
27843
b2efdb66c406
with: use context manager in subrepo _cachestorehash
Bryan O'Sullivan <bryano@fb.com>
parents:
27651
diff
changeset
|
536 with self._repo.lock(): |
21886
b9e8fdc35daf
subrepo: ensure "lock.release()" execution at the end of "_cachestorehash()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21885
diff
changeset
|
537 storehash = list(self._calcstorehash(remotepath)) |
23372
6cfa7a73b6e7
subrepo: replace direct file APIs around "writelines" by "vfs.writelines"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
23369
diff
changeset
|
538 vfs = self._cachestorehashvfs |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
539 vfs.writelines(cachefile, storehash, mode=b'wb', notindexed=True) |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
540 |
25572
3d8c044ed513
subrepo: introduce hgsubrepo._getctx()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25416
diff
changeset
|
541 def _getctx(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
542 """fetch the context for this subrepo revision, possibly a workingctx""" |
25572
3d8c044ed513
subrepo: introduce hgsubrepo._getctx()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25416
diff
changeset
|
543 if self._ctx.rev() is None: |
3d8c044ed513
subrepo: introduce hgsubrepo._getctx()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25416
diff
changeset
|
544 return self._repo[None] # workingctx if parent is workingctx |
3d8c044ed513
subrepo: introduce hgsubrepo._getctx()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25416
diff
changeset
|
545 else: |
3d8c044ed513
subrepo: introduce hgsubrepo._getctx()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25416
diff
changeset
|
546 rev = self._state[1] |
3d8c044ed513
subrepo: introduce hgsubrepo._getctx()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25416
diff
changeset
|
547 return self._repo[rev] |
3d8c044ed513
subrepo: introduce hgsubrepo._getctx()
Matt Harbison <matt_harbison@yahoo.com>
parents:
25416
diff
changeset
|
548 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
549 @annotatesubrepoerror |
14281
ccb7240acf32
subrepo: create subrepos using clone instead of pull
Martin Geisler <mg@aragost.com>
parents:
14221
diff
changeset
|
550 def _initrepo(self, parentrepo, source, create): |
ccb7240acf32
subrepo: create subrepos using clone instead of pull
Martin Geisler <mg@aragost.com>
parents:
14221
diff
changeset
|
551 self._repo._subparent = parentrepo |
ccb7240acf32
subrepo: create subrepos using clone instead of pull
Martin Geisler <mg@aragost.com>
parents:
14221
diff
changeset
|
552 self._repo._subsource = source |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
553 |
10666
4c50a90b90fc
subrepo: keep ui and hgrc in sync when creating new repo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10665
diff
changeset
|
554 if create: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
555 lines = [b'[paths]\n'] |
10666
4c50a90b90fc
subrepo: keep ui and hgrc in sync when creating new repo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10665
diff
changeset
|
556 |
4c50a90b90fc
subrepo: keep ui and hgrc in sync when creating new repo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10665
diff
changeset
|
557 def addpathconfig(key, value): |
12753
ef5eaf53f4f7
subrepo: abort instead of pushing/pulling to the repo itself
Mads Kiilerich <mads@kiilerich.com>
parents:
12752
diff
changeset
|
558 if value: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
559 lines.append(b'%s = %s\n' % (key, value)) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
560 self.ui.setconfig(b'paths', key, value, b'subrepo') |
10666
4c50a90b90fc
subrepo: keep ui and hgrc in sync when creating new repo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10665
diff
changeset
|
561 |
12753
ef5eaf53f4f7
subrepo: abort instead of pushing/pulling to the repo itself
Mads Kiilerich <mads@kiilerich.com>
parents:
12752
diff
changeset
|
562 defpath = _abssource(self._repo, abort=False) |
ef5eaf53f4f7
subrepo: abort instead of pushing/pulling to the repo itself
Mads Kiilerich <mads@kiilerich.com>
parents:
12752
diff
changeset
|
563 defpushpath = _abssource(self._repo, True, abort=False) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
564 addpathconfig(b'default', defpath) |
10697
c90d923fff64
subrepo: fix hgrc paths section during subrepo pulling
Edouard Gomez <ed.gomez@free.fr>
parents:
10666
diff
changeset
|
565 if defpath != defpushpath: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
566 addpathconfig(b'default-push', defpushpath) |
21891
db8a27d92818
subrepo: ensure "close()" execution at the end of "_initrepo()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21889
diff
changeset
|
567 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
568 self._repo.vfs.write(b'hgrc', util.tonativeeol(b''.join(lines))) |
10666
4c50a90b90fc
subrepo: keep ui and hgrc in sync when creating new repo
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10665
diff
changeset
|
569 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
570 @annotatesubrepoerror |
41650
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41648
diff
changeset
|
571 def add(self, ui, match, prefix, uipathfn, explicitonly, **opts): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
572 return cmdutil.add( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
573 ui, self._repo, match, prefix, uipathfn, explicitonly, **opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
574 ) |
12270
166b9866580a
add: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12210
diff
changeset
|
575 |
24132
b5898bf7119a
subrepo: annotate addremove with @annotatesubrepoerror
Matt Harbison <matt_harbison@yahoo.com>
parents:
23991
diff
changeset
|
576 @annotatesubrepoerror |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41651
diff
changeset
|
577 def addremove(self, m, prefix, uipathfn, opts): |
23540
f274d27f1994
addremove: automatically process a subrepository's subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
23537
diff
changeset
|
578 # In the same way as sub directories are processed, once in a subrepo, |
f274d27f1994
addremove: automatically process a subrepository's subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
23537
diff
changeset
|
579 # always entry any of its subrepos. Don't corrupt the options that will |
f274d27f1994
addremove: automatically process a subrepository's subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
23537
diff
changeset
|
580 # be used to process sibling subrepos however. |
f274d27f1994
addremove: automatically process a subrepository's subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
23537
diff
changeset
|
581 opts = copy.copy(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
582 opts[b'subrepos'] = True |
41652
6a447a3d1bd0
addremove: pass around uipathfn and use instead of m.uipath() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41651
diff
changeset
|
583 return scmutil.addremove(self._repo, m, prefix, uipathfn, opts) |
23537
f1b06a8aad42
commit: propagate --addremove to subrepos if -S is specified (issue3759)
Matt Harbison <matt_harbison@yahoo.com>
parents:
23536
diff
changeset
|
584 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
585 @annotatesubrepoerror |
32584
746e12a767b3
cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents:
32540
diff
changeset
|
586 def cat(self, match, fm, fntemplate, prefix, **opts): |
21041
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
20970
diff
changeset
|
587 rev = self._state[1] |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
20970
diff
changeset
|
588 ctx = self._repo[rev] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
589 return cmdutil.cat( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
590 self.ui, self._repo, ctx, match, fm, fntemplate, prefix, **opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
591 ) |
21041
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
20970
diff
changeset
|
592 |
a2cc3c08c3ac
cat: support cat with explicit paths in subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
20970
diff
changeset
|
593 @annotatesubrepoerror |
12166
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
594 def status(self, rev2, **opts): |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
595 try: |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
596 rev1 = self._state[1] |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
597 ctx1 = self._repo[rev1] |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
598 ctx2 = self._repo[rev2] |
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
599 return self._repo.status(ctx1, ctx2, **opts) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25658
diff
changeset
|
600 except error.RepoLookupError as inst: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
601 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
602 _(b'warning: error "%s" in subrepository "%s"\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
603 % (inst, subrelpath(self)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
604 ) |
22914
c95db3208a33
status: update various other methods to return new class
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22695
diff
changeset
|
605 return scmutil.status([], [], [], [], [], [], []) |
12166
441a74b8def1
status: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12162
diff
changeset
|
606 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
607 @annotatesubrepoerror |
18006
0c10cf819146
subrepo: add argument to "diff()" to pass "ui" of caller side (issue3712) (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
17895
diff
changeset
|
608 def diff(self, ui, diffopts, node2, match, prefix, **opts): |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
609 try: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
610 node1 = bin(self._state[1]) |
12209
affec9fb56ef
subrepos: handle diff nodeids in subrepos, not before
Patrick Mezard <pmezard@gmail.com>
parents:
12176
diff
changeset
|
611 # We currently expect node2 to come from substate and be |
affec9fb56ef
subrepos: handle diff nodeids in subrepos, not before
Patrick Mezard <pmezard@gmail.com>
parents:
12176
diff
changeset
|
612 # in hex format |
12210
21eb85e9ea94
subrepo: handle diff with working copy
Martin Geisler <mg@lazybytes.net>
parents:
12209
diff
changeset
|
613 if node2 is not None: |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
614 node2 = bin(node2) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
615 logcmdutil.diffordiffstat( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
616 ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
617 self._repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
618 diffopts, |
44823
3b7aabd02e11
cleanup: avoid extra node/ctx conversions in logcmdutil.diffordiffstat
Augie Fackler <augie@google.com>
parents:
44434
diff
changeset
|
619 self._repo[node1], |
3b7aabd02e11
cleanup: avoid extra node/ctx conversions in logcmdutil.diffordiffstat
Augie Fackler <augie@google.com>
parents:
44434
diff
changeset
|
620 self._repo[node2], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
621 match, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
622 prefix=prefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
623 listsubrepos=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
624 **opts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
625 ) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25658
diff
changeset
|
626 except error.RepoLookupError as inst: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
627 self.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
628 _(b'warning: error "%s" in subrepository "%s"\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
629 % (inst, subrelpath(self)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
630 ) |
12167
d2c5b0927c28
diff: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12166
diff
changeset
|
631 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
632 @annotatesubrepoerror |
31099
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
633 def archive(self, archiver, prefix, match=None, decode=True): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
634 self._get(self._state + (b'hg',)) |
35925
533f04d4cb6d
archive: call the storage prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
35888
diff
changeset
|
635 files = self.files() |
533f04d4cb6d
archive: call the storage prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
35888
diff
changeset
|
636 if match: |
533f04d4cb6d
archive: call the storage prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
35888
diff
changeset
|
637 files = [f for f in files if match(f)] |
12323
f00953d9533c
subrepo: add support for 'hg archive'
Martin Geisler <mg@aragost.com>
parents:
12322
diff
changeset
|
638 rev = self._state[1] |
f00953d9533c
subrepo: add support for 'hg archive'
Martin Geisler <mg@aragost.com>
parents:
12322
diff
changeset
|
639 ctx = self._repo[rev] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
640 scmutil.prefetchfiles( |
45072
a56ba57c837d
scmutil: allowing different files to be prefetched per revision
Rodrigo Damazio Bovendorp <rdamazio@google.com>
parents:
44823
diff
changeset
|
641 self._repo, [(ctx.rev(), scmutil.matchfiles(self._repo, files))] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
642 ) |
35925
533f04d4cb6d
archive: call the storage prefetch hook
Matt Harbison <matt_harbison@yahoo.com>
parents:
35888
diff
changeset
|
643 total = abstractsubrepo.archive(self, archiver, prefix, match) |
12323
f00953d9533c
subrepo: add support for 'hg archive'
Martin Geisler <mg@aragost.com>
parents:
12322
diff
changeset
|
644 for subpath in ctx.substate: |
25601
3ec8351fa6ed
archive: support 'wdir()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
25600
diff
changeset
|
645 s = subrepo(ctx, subpath, True) |
28017
d3f1b7ee5e70
match: rename "narrowmatcher" to "subdirmatcher" (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27935
diff
changeset
|
646 submatch = matchmod.subdirmatcher(subpath, match) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
647 subprefix = prefix + subpath + b'/' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
648 total += s.archive(archiver, subprefix, submatch, decode) |
18967
88d1b59f6906
archive: raise error.Abort if the file pattern matches no files
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18964
diff
changeset
|
649 return total |
12323
f00953d9533c
subrepo: add support for 'hg archive'
Martin Geisler <mg@aragost.com>
parents:
12322
diff
changeset
|
650 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
651 @annotatesubrepoerror |
33364
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
652 def dirty(self, ignoreupdate=False, missing=False): |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
653 r = self._state[1] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
654 if r == b'' and not ignoreupdate: # no state recorded |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
655 return True |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
656 w = self._repo[None] |
14316
d5b525697ddb
extensions: drop maxlength from enabled and disabled
Matt Mackall <mpm@selenic.com>
parents:
14312
diff
changeset
|
657 if r != w.p1().hex() and not ignoreupdate: |
13325
7ebdfa37842e
subrepo: clarify comments in dirty() methods
Kevin Bullock <kbullock@ringworld.org>
parents:
13324
diff
changeset
|
658 # different version checked out |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
659 return True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
660 return w.dirty(missing=missing) # working directory changed |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
661 |
16072
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
662 def basestate(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
663 return self._repo[b'.'].hex() |
16072
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
664 |
12162
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12060
diff
changeset
|
665 def checknested(self, path): |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12060
diff
changeset
|
666 return self._repo._checknested(self._repo.wjoin(path)) |
af8c4929931c
localrepo: add auditor attribute which knows about subrepos
Martin Geisler <mg@lazybytes.net>
parents:
12060
diff
changeset
|
667 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
668 @annotatesubrepoerror |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
669 def commit(self, text, user, date): |
14898
95ced9f5bf29
subrepo: don't commit in subrepo if it's clean
Kevin Bullock <kbullock@ringworld.org>
parents:
14820
diff
changeset
|
670 # don't bother committing in the subrepo if it's only been |
95ced9f5bf29
subrepo: don't commit in subrepo if it's clean
Kevin Bullock <kbullock@ringworld.org>
parents:
14820
diff
changeset
|
671 # updated |
95ced9f5bf29
subrepo: don't commit in subrepo if it's clean
Kevin Bullock <kbullock@ringworld.org>
parents:
14820
diff
changeset
|
672 if not self.dirty(True): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
673 return self._repo[b'.'].hex() |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
674 self.ui.debug(b"committing subrepo %s\n" % subrelpath(self)) |
8813
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
675 n = self._repo.commit(text, user, date) |
db3c1ab0e632
commit: recurse into subrepositories
Matt Mackall <mpm@selenic.com>
parents:
8812
diff
changeset
|
676 if not n: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
677 return self._repo[b'.'].hex() # different version checked out |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
678 return hex(n) |
8814
ab668c92a036
subrepo: add update/merge logic
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
679 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
680 @annotatesubrepoerror |
20176
4c96c50ef937
subrepo: check phase of state in each subrepositories before committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20108
diff
changeset
|
681 def phase(self, state): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
682 return self._repo[state or b'.'].phase() |
20176
4c96c50ef937
subrepo: check phase of state in each subrepositories before committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20108
diff
changeset
|
683 |
4c96c50ef937
subrepo: check phase of state in each subrepositories before committing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
20108
diff
changeset
|
684 @annotatesubrepoerror |
8814
ab668c92a036
subrepo: add update/merge logic
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
685 def remove(self): |
ab668c92a036
subrepo: add update/merge logic
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
686 # we can't fully delete the repository as it may contain |
ab668c92a036
subrepo: add update/merge logic
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
687 # local-only history |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
688 self.ui.note(_(b'removing subrepo %s\n') % subrelpath(self)) |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
689 hg.clean(self._repo, nullid, False) |
8814
ab668c92a036
subrepo: add update/merge logic
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
690 |
9507
5987183d6e59
subrepo: add auto-pull for merge
Matt Mackall <mpm@selenic.com>
parents:
9186
diff
changeset
|
691 def _get(self, state): |
10177
5ca0d220ae21
subrepo: add table-based dispatch for subrepo types
Augie Fackler <durin42@gmail.com>
parents:
10175
diff
changeset
|
692 source, revision, kind = state |
34815
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34645
diff
changeset
|
693 parentrepo = self._repo._subparent |
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34645
diff
changeset
|
694 |
20317
d6939f29b3b3
subrepo: do not try to get hidden revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20176
diff
changeset
|
695 if revision in self._repo.unfiltered(): |
34815
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34645
diff
changeset
|
696 # Allow shared subrepos tracked at null to setup the sharedpath |
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34645
diff
changeset
|
697 if len(self._repo) != 0 or not parentrepo.shared(): |
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34645
diff
changeset
|
698 return True |
20318
c5aef7a66607
subrepo: remove unnecessary else clause in hgsubrepo._get
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20317
diff
changeset
|
699 self._repo._subsource = source |
c5aef7a66607
subrepo: remove unnecessary else clause in hgsubrepo._get
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20317
diff
changeset
|
700 srcurl = _abssource(self._repo) |
40655
69d4c8c5c25e
subrepo: print the status line before creating the peer for better diagnostics
Matt Harbison <matt_harbison@yahoo.com>
parents:
40342
diff
changeset
|
701 |
69d4c8c5c25e
subrepo: print the status line before creating the peer for better diagnostics
Matt Harbison <matt_harbison@yahoo.com>
parents:
40342
diff
changeset
|
702 # Defer creating the peer until after the status message is logged, in |
69d4c8c5c25e
subrepo: print the status line before creating the peer for better diagnostics
Matt Harbison <matt_harbison@yahoo.com>
parents:
40342
diff
changeset
|
703 # case there are network problems. |
69d4c8c5c25e
subrepo: print the status line before creating the peer for better diagnostics
Matt Harbison <matt_harbison@yahoo.com>
parents:
40342
diff
changeset
|
704 getpeer = lambda: hg.peer(self._repo, {}, srcurl) |
69d4c8c5c25e
subrepo: print the status line before creating the peer for better diagnostics
Matt Harbison <matt_harbison@yahoo.com>
parents:
40342
diff
changeset
|
705 |
20318
c5aef7a66607
subrepo: remove unnecessary else clause in hgsubrepo._get
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20317
diff
changeset
|
706 if len(self._repo) == 0: |
24690
d1ddf1fe5d33
subrepo: use vfs.rmtree instead of shutil.rmtree
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24688
diff
changeset
|
707 # use self._repo.vfs instead of self.wvfs to remove .hg only |
d1ddf1fe5d33
subrepo: use vfs.rmtree instead of shutil.rmtree
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24688
diff
changeset
|
708 self._repo.vfs.rmtree() |
36687
eed02e192770
subrepo: don't attempt to share remote sources (issue5793)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35777
diff
changeset
|
709 |
eed02e192770
subrepo: don't attempt to share remote sources (issue5793)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35777
diff
changeset
|
710 # A remote subrepo could be shared if there is a local copy |
eed02e192770
subrepo: don't attempt to share remote sources (issue5793)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35777
diff
changeset
|
711 # relative to the parent's share source. But clone pooling doesn't |
eed02e192770
subrepo: don't attempt to share remote sources (issue5793)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35777
diff
changeset
|
712 # assemble the repos in a tree, so that can't be consistently done. |
eed02e192770
subrepo: don't attempt to share remote sources (issue5793)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35777
diff
changeset
|
713 # A simpler option is for the user to configure clone pooling, and |
eed02e192770
subrepo: don't attempt to share remote sources (issue5793)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35777
diff
changeset
|
714 # work with that. |
eed02e192770
subrepo: don't attempt to share remote sources (issue5793)
Matt Harbison <matt_harbison@yahoo.com>
parents:
35777
diff
changeset
|
715 if parentrepo.shared() and hg.islocal(srcurl): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
716 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
717 _(b'sharing subrepo %s from %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
718 % (subrelpath(self), srcurl) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
719 ) |
46663
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
720 peer = getpeer() |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
721 try: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
722 shared = hg.share( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
723 self._repo._subparent.baseui, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
724 peer, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
725 self._repo.root, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
726 update=False, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
727 bookmarks=False, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
728 ) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
729 finally: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
730 peer.close() |
34815
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34645
diff
changeset
|
731 self._repo = shared.local() |
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34645
diff
changeset
|
732 else: |
36688
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
733 # TODO: find a common place for this and this code in the |
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
734 # share.py wrap of the clone command. |
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
735 if parentrepo.shared(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
736 pool = self.ui.config(b'share', b'pool') |
36688
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
737 if pool: |
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
738 pool = util.expandpath(pool) |
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
739 |
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
740 shareopts = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
741 b'pool': pool, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
742 b'mode': self.ui.config(b'share', b'poolnaming'), |
36688
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
743 } |
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
744 else: |
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
745 shareopts = {} |
fb278041df06
subrepo: activate clone pooling to enable sharing with remote URLs
Matt Harbison <matt_harbison@yahoo.com>
parents:
36687
diff
changeset
|
746 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
747 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
748 _(b'cloning subrepo %s from %s\n') |
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
|
749 % (subrelpath(self), urlutil.hidepassword(srcurl)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
750 ) |
46663
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
751 peer = getpeer() |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
752 try: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
753 other, cloned = hg.clone( |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
754 self._repo._subparent.baseui, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
755 {}, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
756 peer, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
757 self._repo.root, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
758 update=False, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
759 shareopts=shareopts, |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
760 ) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
761 finally: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
762 peer.close() |
34815
68e0bcb90357
subrepo: share instead of clone if the parent repo is shared (issue5675) (BC)
Matt Harbison <matt_harbison@yahoo.com>
parents:
34645
diff
changeset
|
763 self._repo = cloned.local() |
20318
c5aef7a66607
subrepo: remove unnecessary else clause in hgsubrepo._get
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20317
diff
changeset
|
764 self._initrepo(parentrepo, source, create=True) |
c5aef7a66607
subrepo: remove unnecessary else clause in hgsubrepo._get
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20317
diff
changeset
|
765 self._cachestorehash(srcurl) |
20317
d6939f29b3b3
subrepo: do not try to get hidden revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20176
diff
changeset
|
766 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
767 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
768 _(b'pulling subrepo %s from %s\n') |
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
|
769 % (subrelpath(self), urlutil.hidepassword(srcurl)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
770 ) |
20318
c5aef7a66607
subrepo: remove unnecessary else clause in hgsubrepo._get
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20317
diff
changeset
|
771 cleansub = self.storeclean(srcurl) |
46663
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
772 peer = getpeer() |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
773 try: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
774 exchange.pull(self._repo, peer) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
775 finally: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
776 peer.close() |
20318
c5aef7a66607
subrepo: remove unnecessary else clause in hgsubrepo._get
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20317
diff
changeset
|
777 if cleansub: |
c5aef7a66607
subrepo: remove unnecessary else clause in hgsubrepo._get
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20317
diff
changeset
|
778 # keep the repo clean after pull |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
779 self._cachestorehash(srcurl) |
20319
427d672c0e4e
subrepo: make it possible to update to hidden subrepo revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20318
diff
changeset
|
780 return False |
8814
ab668c92a036
subrepo: add update/merge logic
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
781 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
782 @annotatesubrepoerror |
13322
c19b9282d3a7
subrepo: make update -C clean the working directory for svn subrepos
Erik Zielke <ez@aragost.com>
parents:
13287
diff
changeset
|
783 def get(self, state, overwrite=False): |
20319
427d672c0e4e
subrepo: make it possible to update to hidden subrepo revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20318
diff
changeset
|
784 inrepo = self._get(state) |
10177
5ca0d220ae21
subrepo: add table-based dispatch for subrepo types
Augie Fackler <durin42@gmail.com>
parents:
10175
diff
changeset
|
785 source, revision, kind = state |
20319
427d672c0e4e
subrepo: make it possible to update to hidden subrepo revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20318
diff
changeset
|
786 repo = self._repo |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
787 repo.ui.debug(b"getting subrepo %s\n" % self._path) |
20319
427d672c0e4e
subrepo: make it possible to update to hidden subrepo revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20318
diff
changeset
|
788 if inrepo: |
427d672c0e4e
subrepo: make it possible to update to hidden subrepo revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20318
diff
changeset
|
789 urepo = repo.unfiltered() |
427d672c0e4e
subrepo: make it possible to update to hidden subrepo revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20318
diff
changeset
|
790 ctx = urepo[revision] |
427d672c0e4e
subrepo: make it possible to update to hidden subrepo revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20318
diff
changeset
|
791 if ctx.hidden(): |
427d672c0e4e
subrepo: make it possible to update to hidden subrepo revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20318
diff
changeset
|
792 urepo.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
793 _(b'revision %s in subrepository "%s" is hidden\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
794 % (revision[0:12], self._path) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
795 ) |
20319
427d672c0e4e
subrepo: make it possible to update to hidden subrepo revisions
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
20318
diff
changeset
|
796 repo = urepo |
45556
03726f5b6092
merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents:
45375
diff
changeset
|
797 if overwrite: |
03726f5b6092
merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents:
45375
diff
changeset
|
798 merge.clean_update(repo[revision]) |
03726f5b6092
merge: use merge.clean_update() when applicable
Martin von Zweigbergk <martinvonz@google.com>
parents:
45375
diff
changeset
|
799 else: |
45577
5c8230ca37f2
merge: replace calls to hg.updaterepo() by merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45556
diff
changeset
|
800 merge.update(repo[revision]) |
8814
ab668c92a036
subrepo: add update/merge logic
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
801 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
802 @annotatesubrepoerror |
8814
ab668c92a036
subrepo: add update/merge logic
Matt Mackall <mpm@selenic.com>
parents:
8813
diff
changeset
|
803 def merge(self, state): |
9507
5987183d6e59
subrepo: add auto-pull for merge
Matt Mackall <mpm@selenic.com>
parents:
9186
diff
changeset
|
804 self._get(state) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
805 cur = self._repo[b'.'] |
9781
eccc8aacd6f9
subrepo: do a linear update when appropriate
Matt Mackall <mpm@selenic.com>
parents:
9780
diff
changeset
|
806 dst = self._repo[state[1]] |
10251
a19d2993385d
subrepo: fix merging of already merged subrepos (issue1986)
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10068
diff
changeset
|
807 anc = dst.ancestor(cur) |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
808 |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
809 def mergefunc(): |
16196
8ae7626d8bf1
subrepo: fix for merge inconsistencies
Friedrich Kastner-Masilko <kastner_masilko@at.festo.com>
parents:
16022
diff
changeset
|
810 if anc == cur and dst.branch() == cur.branch(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
811 self.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
812 b'updating subrepository "%s"\n' % subrelpath(self) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
813 ) |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
814 hg.update(self._repo, state[1]) |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
815 elif anc == dst: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
816 self.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
817 b'skipping subrepository "%s"\n' % subrelpath(self) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
818 ) |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
819 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
820 self.ui.debug( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
821 b'merging subrepository "%s"\n' % subrelpath(self) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
822 ) |
44434
2f290136b7d6
merge: make hg.merge() take a context instead of a node
Martin von Zweigbergk <martinvonz@google.com>
parents:
44060
diff
changeset
|
823 hg.merge(dst, remind=False) |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
824 |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
825 wctx = self._repo[None] |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
826 if self.dirty(): |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
827 if anc != dst: |
23574
faa3d6af154e
subrepo: use 'self.ui' instead of 'self._repo.ui'
Matt Harbison <matt_harbison@yahoo.com>
parents:
23573
diff
changeset
|
828 if _updateprompt(self.ui, self, wctx.dirty(), cur, dst): |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
829 mergefunc() |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
830 else: |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
831 mergefunc() |
9781
eccc8aacd6f9
subrepo: do a linear update when appropriate
Matt Mackall <mpm@selenic.com>
parents:
9780
diff
changeset
|
832 else: |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
833 mergefunc() |
8815
e87b0fc4750b
subrepo: basic push support
Matt Mackall <mpm@selenic.com>
parents:
8814
diff
changeset
|
834 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
835 @annotatesubrepoerror |
15708
309e49491253
push: propagate --new-branch and --ssh options when pushing subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15614
diff
changeset
|
836 def push(self, opts): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
837 force = opts.get(b'force') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
838 newbranch = opts.get(b'new_branch') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
839 ssh = opts.get(b'ssh') |
15708
309e49491253
push: propagate --new-branch and --ssh options when pushing subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15614
diff
changeset
|
840 |
8815
e87b0fc4750b
subrepo: basic push support
Matt Mackall <mpm@selenic.com>
parents:
8814
diff
changeset
|
841 # push subrepos depth-first for coherent ordering |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
842 c = self._repo[b'.'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
843 subs = c.substate # only repos that are committed |
8815
e87b0fc4750b
subrepo: basic push support
Matt Mackall <mpm@selenic.com>
parents:
8814
diff
changeset
|
844 for s in sorted(subs): |
16022
04604d1a9fc3
push: more precise failure check on subrepo push
Matt Mackall <mpm@selenic.com>
parents:
15912
diff
changeset
|
845 if c.sub(s).push(opts) == 0: |
11067
49e14ec67144
subrepo: propagate and catch push failures
Matt Mackall <mpm@selenic.com>
parents:
10954
diff
changeset
|
846 return False |
8815
e87b0fc4750b
subrepo: basic push support
Matt Mackall <mpm@selenic.com>
parents:
8814
diff
changeset
|
847 |
e87b0fc4750b
subrepo: basic push support
Matt Mackall <mpm@selenic.com>
parents:
8814
diff
changeset
|
848 dsturl = _abssource(self._repo, True) |
18940
798bdb7f1517
subrepo: do not push mercurial subrepos whose store is clean
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18939
diff
changeset
|
849 if not force: |
798bdb7f1517
subrepo: do not push mercurial subrepos whose store is clean
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18939
diff
changeset
|
850 if self.storeclean(dsturl): |
23574
faa3d6af154e
subrepo: use 'self.ui' instead of 'self._repo.ui'
Matt Harbison <matt_harbison@yahoo.com>
parents:
23573
diff
changeset
|
851 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
852 _(b'no changes made to subrepo %s since last push to %s\n') |
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
|
853 % (subrelpath(self), urlutil.hidepassword(dsturl)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
854 ) |
18940
798bdb7f1517
subrepo: do not push mercurial subrepos whose store is clean
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18939
diff
changeset
|
855 return None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
856 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
857 _(b'pushing subrepo %s to %s\n') |
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
|
858 % (subrelpath(self), urlutil.hidepassword(dsturl)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
859 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
860 other = hg.peer(self._repo, {b'ssh': ssh}, dsturl) |
46663
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
861 try: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
862 res = exchange.push(self._repo, other, force, newbranch=newbranch) |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
863 finally: |
a4c19a162615
sshpeer: enable+fix warning about sshpeers not being closed explicitly
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
46113
diff
changeset
|
864 other.close() |
18939
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
865 |
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
866 # the repo is now clean |
aab0c14c20d0
subrepo: implement "storeclean" method for mercurial subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18937
diff
changeset
|
867 self._cachestorehash(dsturl) |
22619
f6cf96804d27
push: `exchange.push` instead of `localrepo.push`
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22590
diff
changeset
|
868 return res.cgresult |
10177
5ca0d220ae21
subrepo: add table-based dispatch for subrepo types
Augie Fackler <durin42@gmail.com>
parents:
10175
diff
changeset
|
869 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
870 @annotatesubrepoerror |
12272
42ecd56399d7
outgoing: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12270
diff
changeset
|
871 def outgoing(self, ui, dest, opts): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
872 if b'rev' in opts or b'branch' in opts: |
24875
5135c2be6959
subrepo: don't pass the outer repo's --rev or --branch to subrepo outgoing()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24858
diff
changeset
|
873 opts = copy.copy(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
874 opts.pop(b'rev', None) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
875 opts.pop(b'branch', None) |
12272
42ecd56399d7
outgoing: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12270
diff
changeset
|
876 return hg.outgoing(ui, self._repo, _abssource(self._repo, True), opts) |
42ecd56399d7
outgoing: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12270
diff
changeset
|
877 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
878 @annotatesubrepoerror |
12274
c02e1ed3d407
incoming: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12272
diff
changeset
|
879 def incoming(self, ui, source, opts): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
880 if b'rev' in opts or b'branch' in opts: |
24876
b5513ee85dd8
subrepo: don't pass the outer repo's --rev or --branch to subrepo incoming()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24875
diff
changeset
|
881 opts = copy.copy(opts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
882 opts.pop(b'rev', None) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
883 opts.pop(b'branch', None) |
12274
c02e1ed3d407
incoming: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12272
diff
changeset
|
884 return hg.incoming(ui, self._repo, _abssource(self._repo, False), opts) |
c02e1ed3d407
incoming: recurse into subrepositories with --subrepos/-S flag
Martin Geisler <mg@lazybytes.net>
parents:
12272
diff
changeset
|
885 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
886 @annotatesubrepoerror |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
887 def files(self): |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
888 rev = self._state[1] |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
889 ctx = self._repo[rev] |
24173
2cc8ee4c4e1c
subrepo: return only the manifest keys from hgsubrepo.files()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24148
diff
changeset
|
890 return ctx.manifest().keys() |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
891 |
31099
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
892 def filedata(self, name, decode): |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
893 rev = self._state[1] |
31099
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
894 data = self._repo[rev][name].data() |
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
895 if decode: |
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
896 data = self._repo.wwritedata(name, data) |
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
897 return data |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
898 |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
899 def fileflags(self, name): |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
900 rev = self._state[1] |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
901 ctx = self._repo[rev] |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
902 return ctx.flags(name) |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
903 |
24413
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
904 @annotatesubrepoerror |
41748
980e05204ed8
subrepo: use root-repo-relative path from `hg files` with ui.relative-paths=no
Martin von Zweigbergk <martinvonz@google.com>
parents:
41679
diff
changeset
|
905 def printfiles(self, ui, m, uipathfn, fm, fmt, subrepos): |
24413
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
906 # If the parent context is a workingctx, use the workingctx here for |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
907 # consistency. |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
908 if self._ctx.rev() is None: |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
909 ctx = self._repo[None] |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
910 else: |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
911 rev = self._state[1] |
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
912 ctx = self._repo[rev] |
41748
980e05204ed8
subrepo: use root-repo-relative path from `hg files` with ui.relative-paths=no
Martin von Zweigbergk <martinvonz@google.com>
parents:
41679
diff
changeset
|
913 return cmdutil.files(ui, ctx, m, uipathfn, fm, fmt, subrepos) |
24413
a8595176dd64
subrepo: add basic support to hgsubrepo for the files command
Matt Harbison <matt_harbison@yahoo.com>
parents:
24409
diff
changeset
|
914 |
25121
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
915 @annotatesubrepoerror |
44009
e685fac56693
match: resolve filesets against the passed `cwd`, not the current one
Matt Harbison <matt_harbison@yahoo.com>
parents:
43913
diff
changeset
|
916 def matchfileset(self, cwd, expr, badfn=None): |
25121
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
917 if self._ctx.rev() is None: |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41675
diff
changeset
|
918 ctx = self._repo[None] |
25121
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
919 else: |
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
920 rev = self._state[1] |
41676
0531dff73d0b
match: delete unused root and cwd arguments from {always,never,exact}() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41675
diff
changeset
|
921 ctx = self._repo[rev] |
25121
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
922 |
44009
e685fac56693
match: resolve filesets against the passed `cwd`, not the current one
Matt Harbison <matt_harbison@yahoo.com>
parents:
43913
diff
changeset
|
923 matchers = [ctx.matchfileset(cwd, expr, badfn=badfn)] |
25121
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
924 |
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
925 for subpath in ctx.substate: |
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
926 sub = ctx.sub(subpath) |
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
927 |
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
928 try: |
44009
e685fac56693
match: resolve filesets against the passed `cwd`, not the current one
Matt Harbison <matt_harbison@yahoo.com>
parents:
43913
diff
changeset
|
929 sm = sub.matchfileset(cwd, expr, badfn=badfn) |
41675
ddbebce94665
match: delete unused root and cwd arguments to constructors (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41673
diff
changeset
|
930 pm = matchmod.prefixdirmatcher(subpath, sm, badfn=badfn) |
38612
760cc5dc01e8
fileset: restrict getfileset() to not return a computed set (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38379
diff
changeset
|
931 matchers.append(pm) |
25121
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
932 except error.LookupError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
933 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
934 _(b"skipping missing subrepository: %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
935 % self.wvfs.reljoin(reporelpath(self), subpath) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
936 ) |
38612
760cc5dc01e8
fileset: restrict getfileset() to not return a computed set (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38379
diff
changeset
|
937 if len(matchers) == 1: |
760cc5dc01e8
fileset: restrict getfileset() to not return a computed set (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38379
diff
changeset
|
938 return matchers[0] |
760cc5dc01e8
fileset: restrict getfileset() to not return a computed set (API)
Yuya Nishihara <yuya@tcha.org>
parents:
38379
diff
changeset
|
939 return matchmod.unionmatcher(matchers) |
25121
df63d4843581
subrepo: introduce getfileset()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24943
diff
changeset
|
940 |
15410
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15287
diff
changeset
|
941 def walk(self, match): |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15287
diff
changeset
|
942 ctx = self._repo[None] |
9e99d2bbb1b1
add: support adding explicit files in subrepos
David M. Carr <david@carrclan.us>
parents:
15287
diff
changeset
|
943 return ctx.walk(match) |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
944 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
945 @annotatesubrepoerror |
41653
16a49c778bde
forget: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41652
diff
changeset
|
946 def forget(self, match, prefix, uipathfn, dryrun, interactive): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
947 return cmdutil.forget( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
948 self.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
949 self._repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
950 match, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
951 prefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
952 uipathfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
953 True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
954 dryrun=dryrun, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
955 interactive=interactive, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
956 ) |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
957 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
958 @annotatesubrepoerror |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
959 def removefiles( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
960 self, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
961 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
962 prefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
963 uipathfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
964 after, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
965 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
966 subrepos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
967 dryrun, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
968 warnings, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
969 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
970 return cmdutil.remove( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
971 self.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
972 self._repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
973 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
974 prefix, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
975 uipathfn, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
976 after, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
977 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
978 subrepos, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
979 dryrun, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
980 ) |
23325
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
22927
diff
changeset
|
981 |
4165cfd67519
remove: recurse into subrepositories with --subrepos/-S flag
Matt Harbison <matt_harbison@yahoo.com>
parents:
22927
diff
changeset
|
982 @annotatesubrepoerror |
23579
e1c39f207719
subrepo: drop the 'ui' parameter to revert()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23578
diff
changeset
|
983 def revert(self, substate, *pats, **opts): |
16430
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
984 # reverting a subrepo is a 2 step process: |
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
985 # 1. if the no_backup is not set, revert all modified |
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
986 # files inside the subrepo |
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
987 # 2. update the subrepo to the revision specified in |
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
988 # the corresponding substate dictionary |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
989 self.ui.status(_(b'reverting subrepo %s\n') % substate[0]) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
990 if not opts.get('no_backup'): |
16430
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
991 # Revert all files on the subrepo, creating backups |
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
992 # Note that this will not recursively revert subrepos |
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
993 # We could do it if there was a set:subrepos() predicate |
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
994 opts = opts.copy() |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
995 opts['date'] = None |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
996 opts['rev'] = substate[1] |
16430
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
997 |
23579
e1c39f207719
subrepo: drop the 'ui' parameter to revert()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23578
diff
changeset
|
998 self.filerevert(*pats, **opts) |
16429
71dcce391a44
revert: add support for reverting subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16197
diff
changeset
|
999 |
71dcce391a44
revert: add support for reverting subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16197
diff
changeset
|
1000 # Update the repo to the revision specified in the given substate |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1001 if not opts.get('dry_run'): |
24134
afed5d2e7985
revert: display full subrepo output with --dry-run
Matt Harbison <matt_harbison@yahoo.com>
parents:
24132
diff
changeset
|
1002 self.get(substate, overwrite=True) |
16429
71dcce391a44
revert: add support for reverting subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16197
diff
changeset
|
1003 |
23579
e1c39f207719
subrepo: drop the 'ui' parameter to revert()
Matt Harbison <matt_harbison@yahoo.com>
parents:
23578
diff
changeset
|
1004 def filerevert(self, *pats, **opts): |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1005 ctx = self._repo[opts['rev']] |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1006 if opts.get('all'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1007 pats = [b'set:modified()'] |
16430
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
1008 else: |
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
1009 pats = [] |
45375
8c466bcb0879
revert: remove dangerous `parents` argument from `cmdutil.revert()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
45072
diff
changeset
|
1010 cmdutil.revert(self.ui, self._repo, ctx, *pats, **opts) |
16430
6883c2363f44
revert: add support for reverting subrepos without --no-backup and/or --all
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
16429
diff
changeset
|
1011 |
21400
78a60daacea8
subrepo: add shortid() method to subrepo classes
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21041
diff
changeset
|
1012 def shortid(self, revid): |
78a60daacea8
subrepo: add shortid() method to subrepo classes
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21041
diff
changeset
|
1013 return revid[:12] |
78a60daacea8
subrepo: add shortid() method to subrepo classes
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21041
diff
changeset
|
1014 |
34879
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1015 @annotatesubrepoerror |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1016 def unshare(self): |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1017 # subrepo inherently violates our import layering rules |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1018 # because it wants to make repo objects from deep inside the stack |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1019 # so we manually delay the circular imports to not break |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1020 # scripts that don't use our demand-loading |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1021 global hg |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1022 from . import hg as h |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1023 |
34879
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1024 hg = h |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1025 |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1026 # Nothing prevents a user from sharing in a repo, and then making that a |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1027 # subrepo. Alternately, the previous unshare attempt may have failed |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1028 # part way through. So recurse whether or not this layer is shared. |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1029 if self._repo.shared(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1030 self.ui.status(_(b"unsharing subrepo '%s'\n") % self._relpath) |
34879
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1031 |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1032 hg.unshare(self.ui, self._repo) |
7d51a7792f52
subrepo: implement 'unshare' for Mercurial subrepos
Matt Harbison <matt_harbison@yahoo.com>
parents:
34815
diff
changeset
|
1033 |
43913
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1034 def verify(self, onpush=False): |
25591
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1035 try: |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1036 rev = self._state[1] |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1037 ctx = self._repo.unfiltered()[rev] |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1038 if ctx.hidden(): |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1039 # Since hidden revisions aren't pushed/pulled, it seems worth an |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1040 # explicit warning. |
43913
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1041 msg = _(b"subrepo '%s' is hidden in revision %s") % ( |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1042 self._relpath, |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
1043 short(self._ctx.node()), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1044 ) |
43913
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1045 |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1046 if onpush: |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1047 raise error.Abort(msg) |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1048 else: |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1049 self._repo.ui.warn(b'%s\n' % msg) |
25591
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1050 return 0 |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1051 except error.RepoLookupError: |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1052 # A missing subrepo revision may be a case of needing to pull it, so |
43913
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1053 # don't treat this as an error for `hg verify`. |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1054 msg = _(b"subrepo '%s' not found in revision %s") % ( |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1055 self._relpath, |
46113
59fa3890d40a
node: import symbols explicitly
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
1056 short(self._ctx.node()), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1057 ) |
43913
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1058 |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1059 if onpush: |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1060 raise error.Abort(msg) |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1061 else: |
4b7d5d10c45d
exchange: ensure all outgoing subrepo references are present before pushing
Matt Harbison <matt_harbison@yahoo.com>
parents:
43789
diff
changeset
|
1062 self._repo.ui.warn(b'%s\n' % msg) |
25591
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1063 return 0 |
f1d46075b13a
verify: check the subrepository references in .hgsubstate
Matt Harbison <matt_harbison@yahoo.com>
parents:
25572
diff
changeset
|
1064 |
24672
dd0b86f740ef
subrepo: add wvfs field to access the working directory via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24671
diff
changeset
|
1065 @propertycache |
dd0b86f740ef
subrepo: add wvfs field to access the working directory via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24671
diff
changeset
|
1066 def wvfs(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1067 """return own wvfs for efficiency and consistency""" |
24672
dd0b86f740ef
subrepo: add wvfs field to access the working directory via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24671
diff
changeset
|
1068 return self._repo.wvfs |
dd0b86f740ef
subrepo: add wvfs field to access the working directory via vfs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24671
diff
changeset
|
1069 |
24786
56e15db9109f
subrepo: calculate _relpath for hgsubrepo based on self instead of parent
Matt Harbison <matt_harbison@yahoo.com>
parents:
24785
diff
changeset
|
1070 @propertycache |
56e15db9109f
subrepo: calculate _relpath for hgsubrepo based on self instead of parent
Matt Harbison <matt_harbison@yahoo.com>
parents:
24785
diff
changeset
|
1071 def _relpath(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1072 """return path to this subrepository as seen from outermost repository""" |
24786
56e15db9109f
subrepo: calculate _relpath for hgsubrepo based on self instead of parent
Matt Harbison <matt_harbison@yahoo.com>
parents:
24785
diff
changeset
|
1073 # Keep consistent dir separators by avoiding vfs.join(self._path) |
56e15db9109f
subrepo: calculate _relpath for hgsubrepo based on self instead of parent
Matt Harbison <matt_harbison@yahoo.com>
parents:
24785
diff
changeset
|
1074 return reporelpath(self._repo) |
56e15db9109f
subrepo: calculate _relpath for hgsubrepo based on self instead of parent
Matt Harbison <matt_harbison@yahoo.com>
parents:
24785
diff
changeset
|
1075 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1076 |
11559
9d88597470af
subrepo: add abstract superclass for subrepo classes
Martin Geisler <mg@lazybytes.net>
parents:
11470
diff
changeset
|
1077 class svnsubrepo(abstractsubrepo): |
29021
92d37fb3f1aa
verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28949
diff
changeset
|
1078 def __init__(self, ctx, path, state, allowcreate): |
24671
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
1079 super(svnsubrepo, self).__init__(ctx, path) |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1080 self._state = state |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1081 self._exe = procutil.findexe(b'svn') |
15190
6dc67dced8c1
subrepo: improve error message when svn isn't found
Matt Mackall <mpm@selenic.com>
parents:
15150
diff
changeset
|
1082 if not self._exe: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1083 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1084 _(b"'svn' executable not found for subrepo '%s'") % self._path |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1085 ) |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1086 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1087 def _svncommand(self, commands, filename=b'', failok=False): |
15190
6dc67dced8c1
subrepo: improve error message when svn isn't found
Matt Mackall <mpm@selenic.com>
parents:
15150
diff
changeset
|
1088 cmd = [self._exe] |
14506
733af5d9f6b2
subrepo: make stdin for svn a pipe for non-interactive use (issue2759)
Augie Fackler <durin42@gmail.com>
parents:
14505
diff
changeset
|
1089 extrakw = {} |
23572
40e62fbd7356
subrepo: rename the '_ui' member to 'ui'
Matt Harbison <matt_harbison@yahoo.com>
parents:
23571
diff
changeset
|
1090 if not self.ui.interactive(): |
14506
733af5d9f6b2
subrepo: make stdin for svn a pipe for non-interactive use (issue2759)
Augie Fackler <durin42@gmail.com>
parents:
14505
diff
changeset
|
1091 # Making stdin be a pipe should prevent svn from behaving |
733af5d9f6b2
subrepo: make stdin for svn a pipe for non-interactive use (issue2759)
Augie Fackler <durin42@gmail.com>
parents:
14505
diff
changeset
|
1092 # interactively even if we can't pass --non-interactive. |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1093 extrakw['stdin'] = subprocess.PIPE |
14506
733af5d9f6b2
subrepo: make stdin for svn a pipe for non-interactive use (issue2759)
Augie Fackler <durin42@gmail.com>
parents:
14505
diff
changeset
|
1094 # Starting in svn 1.5 --non-interactive is a global flag |
733af5d9f6b2
subrepo: make stdin for svn a pipe for non-interactive use (issue2759)
Augie Fackler <durin42@gmail.com>
parents:
14505
diff
changeset
|
1095 # instead of being per-command, but we need to support 1.4 so |
733af5d9f6b2
subrepo: make stdin for svn a pipe for non-interactive use (issue2759)
Augie Fackler <durin42@gmail.com>
parents:
14505
diff
changeset
|
1096 # we have to be intelligent about what commands take |
733af5d9f6b2
subrepo: make stdin for svn a pipe for non-interactive use (issue2759)
Augie Fackler <durin42@gmail.com>
parents:
14505
diff
changeset
|
1097 # --non-interactive. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1098 if commands[0] in (b'update', b'checkout', b'commit'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1099 cmd.append(b'--non-interactive') |
14025
1052b1421a48
subrepo: tell Subversion when we are non-interactive (issue2759)
Augie Fackler <durin42@gmail.com>
parents:
13912
diff
changeset
|
1100 cmd.extend(commands) |
14050
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
14025
diff
changeset
|
1101 if filename is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1102 path = self.wvfs.reljoin( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1103 self._ctx.repo().origroot, self._path, filename |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1104 ) |
14050
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
14025
diff
changeset
|
1105 cmd.append(path) |
30635
a150173da1c1
py3: replace os.environ with encoding.environ (part 2 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30615
diff
changeset
|
1106 env = dict(encoding.environ) |
10271
9b38bec5dc29
subrepo: make svn use C locale for portability
Patrick Mezard <pmezard@gmail.com>
parents:
10264
diff
changeset
|
1107 # Avoid localized output, preserve current locale for everything else. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1108 lc_all = env.get(b'LC_ALL') |
17705
6929b9c70be9
subrepo: setting LC_MESSAGES only works if LC_ALL is empty or unset
Thomas Arendsen Hein <thomas@intevation.de>
parents:
17441
diff
changeset
|
1109 if lc_all: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1110 env[b'LANG'] = lc_all |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1111 del env[b'LC_ALL'] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1112 env[b'LC_MESSAGES'] = b'C' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1113 p = subprocess.Popen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1114 pycompat.rapply(procutil.tonativestr, cmd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1115 bufsize=-1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1116 close_fds=procutil.closefds, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1117 stdout=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1118 stderr=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1119 env=procutil.tonativeenv(env), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1120 **extrakw |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1121 ) |
41517
549f956ba2a9
py3: don't use universal_newlines in svnsubrepo
Yuya Nishihara <yuya@tcha.org>
parents:
41516
diff
changeset
|
1122 stdout, stderr = map(util.fromnativeeol, p.communicate()) |
13014
d1c52354b0a9
subrepo: use subprocess directly to avoid python 2.6 bug
Patrick Mezard <pmezard@gmail.com>
parents:
13013
diff
changeset
|
1123 stderr = stderr.strip() |
14664
0ae98cd2a83f
svn subrepos: work around checkout obstructions (issue2752)
Augie Fackler <durin42@gmail.com>
parents:
14556
diff
changeset
|
1124 if not failok: |
0ae98cd2a83f
svn subrepos: work around checkout obstructions (issue2752)
Augie Fackler <durin42@gmail.com>
parents:
14556
diff
changeset
|
1125 if p.returncode: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1126 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1127 stderr or b'exited with code %d' % p.returncode |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1128 ) |
14664
0ae98cd2a83f
svn subrepos: work around checkout obstructions (issue2752)
Augie Fackler <durin42@gmail.com>
parents:
14556
diff
changeset
|
1129 if stderr: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1130 self.ui.warn(stderr + b'\n') |
14664
0ae98cd2a83f
svn subrepos: work around checkout obstructions (issue2752)
Augie Fackler <durin42@gmail.com>
parents:
14556
diff
changeset
|
1131 return stdout, stderr |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1132 |
14050
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
14025
diff
changeset
|
1133 @propertycache |
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
14025
diff
changeset
|
1134 def _svnversion(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1135 output, err = self._svncommand( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1136 [b'--version', b'--quiet'], filename=None |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1137 ) |
34068
6d21737c35bf
py3: fix type of regex literals in subrepo.py
Yuya Nishihara <yuya@tcha.org>
parents:
34022
diff
changeset
|
1138 m = re.search(br'^(\d+)\.(\d+)', output) |
14050
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
14025
diff
changeset
|
1139 if not m: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1140 raise error.Abort(_(b'cannot retrieve svn tool version')) |
14050
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
14025
diff
changeset
|
1141 return (int(m.group(1)), int(m.group(2))) |
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
14025
diff
changeset
|
1142 |
35661
1c0ee0befba0
svnsubrepo: add new method _svnmissing
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
35660
diff
changeset
|
1143 def _svnmissing(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1144 return not self.wvfs.exists(b'.svn') |
35661
1c0ee0befba0
svnsubrepo: add new method _svnmissing
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
35660
diff
changeset
|
1145 |
13287
d0e0d3d43e14
subrepo: compare svn subrepo state to last committed revision
Patrick Mezard <pmezard@gmail.com>
parents:
13117
diff
changeset
|
1146 def _wcrevs(self): |
d0e0d3d43e14
subrepo: compare svn subrepo state to last committed revision
Patrick Mezard <pmezard@gmail.com>
parents:
13117
diff
changeset
|
1147 # Get the working directory revision as well as the last |
d0e0d3d43e14
subrepo: compare svn subrepo state to last committed revision
Patrick Mezard <pmezard@gmail.com>
parents:
13117
diff
changeset
|
1148 # commit revision so we can compare the subrepo state with |
d0e0d3d43e14
subrepo: compare svn subrepo state to last committed revision
Patrick Mezard <pmezard@gmail.com>
parents:
13117
diff
changeset
|
1149 # both. We used to store the working directory one. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1150 output, err = self._svncommand([b'info', b'--xml']) |
10272
886858b834da
subrepo: svn xml output is much easier to parse
Patrick Mezard <pmezard@gmail.com>
parents:
10271
diff
changeset
|
1151 doc = xml.dom.minidom.parseString(output) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1152 entries = doc.getElementsByTagName('entry') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1153 lastrev, rev = b'0', b'0' |
13287
d0e0d3d43e14
subrepo: compare svn subrepo state to last committed revision
Patrick Mezard <pmezard@gmail.com>
parents:
13117
diff
changeset
|
1154 if entries: |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1155 rev = pycompat.bytestr(entries[0].getAttribute('revision')) or b'0' |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1156 commits = entries[0].getElementsByTagName('commit') |
13287
d0e0d3d43e14
subrepo: compare svn subrepo state to last committed revision
Patrick Mezard <pmezard@gmail.com>
parents:
13117
diff
changeset
|
1157 if commits: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1158 lastrev = ( |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1159 pycompat.bytestr(commits[0].getAttribute('revision')) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1160 or b'0' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1161 ) |
13287
d0e0d3d43e14
subrepo: compare svn subrepo state to last committed revision
Patrick Mezard <pmezard@gmail.com>
parents:
13117
diff
changeset
|
1162 return (lastrev, rev) |
d0e0d3d43e14
subrepo: compare svn subrepo state to last committed revision
Patrick Mezard <pmezard@gmail.com>
parents:
13117
diff
changeset
|
1163 |
d0e0d3d43e14
subrepo: compare svn subrepo state to last committed revision
Patrick Mezard <pmezard@gmail.com>
parents:
13117
diff
changeset
|
1164 def _wcrev(self): |
d0e0d3d43e14
subrepo: compare svn subrepo state to last committed revision
Patrick Mezard <pmezard@gmail.com>
parents:
13117
diff
changeset
|
1165 return self._wcrevs()[0] |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1166 |
10273
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1167 def _wcchanged(self): |
16530
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1168 """Return (changes, extchanges, missing) where changes is True |
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1169 if the working directory was changed, extchanges is |
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1170 True if any of these changes concern an external entry and missing |
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1171 is True if any change is a missing entry. |
10273
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1172 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1173 output, err = self._svncommand([b'status', b'--xml']) |
16530
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1174 externals, changes, missing = [], [], [] |
10272
886858b834da
subrepo: svn xml output is much easier to parse
Patrick Mezard <pmezard@gmail.com>
parents:
10271
diff
changeset
|
1175 doc = xml.dom.minidom.parseString(output) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1176 for e in doc.getElementsByTagName('entry'): |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1177 s = e.getElementsByTagName('wc-status') |
10273
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1178 if not s: |
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1179 continue |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1180 item = s[0].getAttribute('item') |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1181 props = s[0].getAttribute('props') |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1182 path = e.getAttribute('path').encode('utf8') |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1183 if item == 'external': |
10273
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1184 externals.append(path) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1185 elif item == 'missing': |
16530
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1186 missing.append(path) |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1187 if ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1188 item |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1189 not in ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1190 '', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1191 'normal', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1192 'unversioned', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1193 'external', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1194 ) |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1195 or props not in ('', 'none', 'normal') |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1196 ): |
10273
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1197 changes.append(path) |
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1198 for path in changes: |
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1199 for ext in externals: |
30615
bb77654dc7ae
py3: replace os.sep with pycompat.ossep (part 3 of 4)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30060
diff
changeset
|
1200 if path == ext or path.startswith(ext + pycompat.ossep): |
16530
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1201 return True, True, bool(missing) |
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1202 return bool(changes), False, bool(missing) |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1203 |
35660
73f51bdb0fea
svnsubrepo: decorate dirty method with annotatesubrepoerror
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
35621
diff
changeset
|
1204 @annotatesubrepoerror |
33364
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
1205 def dirty(self, ignoreupdate=False, missing=False): |
35676
9c575c22dcf4
svnsubrepo: check if subrepo is missing when checking dirty state (issue5657)
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
35661
diff
changeset
|
1206 if self._svnmissing(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1207 return self._state[1] != b'' |
33364
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
1208 wcchanged = self._wcchanged() |
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
1209 changed = wcchanged[0] or (missing and wcchanged[2]) |
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
1210 if not changed: |
13288 | 1211 if self._state[1] in self._wcrevs() or ignoreupdate: |
13174
be7e8e9bc5e5
mq: update .hgsubstate if subrepos are clean (issue2499)
Kevin Bullock <kbullock@ringworld.org>
parents:
13172
diff
changeset
|
1212 return False |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1213 return True |
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1214 |
16072
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
1215 def basestate(self): |
16554
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1216 lastrev, rev = self._wcrevs() |
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1217 if lastrev != rev: |
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1218 # Last committed rev is not the same than rev. We would |
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1219 # like to take lastrev but we do not know if the subrepo |
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1220 # URL exists at lastrev. Test it and fallback to rev it |
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1221 # is not there. |
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1222 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1223 self._svncommand( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1224 [b'list', b'%s@%s' % (self._state[0], lastrev)] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1225 ) |
16554
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1226 return lastrev |
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1227 except error.Abort: |
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1228 pass |
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1229 return rev |
16072
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
1230 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1231 @annotatesubrepoerror |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1232 def commit(self, text, user, date): |
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1233 # user and date are out of our hands since svn is centralized |
16530
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1234 changed, extchanged, missing = self._wcchanged() |
10273
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1235 if not changed: |
16554
ae2664ee0223
subrepo/svn: fix checked out rev number retrieval (issue2968)
Patrick Mezard <patrick@mezard.eu>
parents:
16530
diff
changeset
|
1236 return self.basestate() |
10273
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1237 if extchanged: |
e898bc7810ad
subrepo: handle svn externals and meta changes (issue1982)
Patrick Mezard <pmezard@gmail.com>
parents:
10272
diff
changeset
|
1238 # Do not try to commit externals |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1239 raise error.Abort(_(b'cannot commit svn externals')) |
16530
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1240 if missing: |
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1241 # svn can commit with missing entries but aborting like hg |
e37199a1f9d4
subrepo/svn: improve error message on missing files
Patrick Mezard <patrick@mezard.eu>
parents:
16529
diff
changeset
|
1242 # seems a better approach. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1243 raise error.Abort(_(b'cannot commit missing svn entries')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1244 commitinfo, err = self._svncommand([b'commit', b'-m', text]) |
23572
40e62fbd7356
subrepo: rename the '_ui' member to 'ui'
Matt Harbison <matt_harbison@yahoo.com>
parents:
23571
diff
changeset
|
1245 self.ui.status(commitinfo) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1246 newrev = re.search(b'Committed revision ([0-9]+).', commitinfo) |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1247 if not newrev: |
16529
3d5d204a08c7
subrepo/svn: abort on commit with missing file (issue3029)
Patrick Mezard <patrick@mezard.eu>
parents:
16527
diff
changeset
|
1248 if not commitinfo.strip(): |
3d5d204a08c7
subrepo/svn: abort on commit with missing file (issue3029)
Patrick Mezard <patrick@mezard.eu>
parents:
16527
diff
changeset
|
1249 # Sometimes, our definition of "changed" differs from |
3d5d204a08c7
subrepo/svn: abort on commit with missing file (issue3029)
Patrick Mezard <patrick@mezard.eu>
parents:
16527
diff
changeset
|
1250 # svn one. For instance, svn ignores missing files |
3d5d204a08c7
subrepo/svn: abort on commit with missing file (issue3029)
Patrick Mezard <patrick@mezard.eu>
parents:
16527
diff
changeset
|
1251 # when committing. If there are only missing files, no |
3d5d204a08c7
subrepo/svn: abort on commit with missing file (issue3029)
Patrick Mezard <patrick@mezard.eu>
parents:
16527
diff
changeset
|
1252 # commit is made, no output and no error code. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1253 raise error.Abort(_(b'failed to commit svn changes')) |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25980
diff
changeset
|
1254 raise error.Abort(commitinfo.splitlines()[-1]) |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1255 newrev = newrev.groups()[0] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1256 self.ui.status(self._svncommand([b'update', b'-r', newrev])[0]) |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1257 return newrev |
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1258 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1259 @annotatesubrepoerror |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1260 def remove(self): |
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1261 if self.dirty(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1262 self.ui.warn( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1263 _(b'not removing repo %s because it has changes.\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1264 % self._path |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1265 ) |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1266 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1267 self.ui.note(_(b'removing subrepo %s\n') % self._path) |
13013
92b0d669637f
subrepo: fix removing read-only svn files on Windows
Patrick Mezard <pmezard@gmail.com>
parents:
12930
diff
changeset
|
1268 |
24690
d1ddf1fe5d33
subrepo: use vfs.rmtree instead of shutil.rmtree
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24688
diff
changeset
|
1269 self.wvfs.rmtree(forcibly=True) |
13015
82ca0c43bc44
subrepo: prune empty directories when removing svn subrepo
Patrick Mezard <pmezard@gmail.com>
parents:
13014
diff
changeset
|
1270 try: |
25773
de654a83fe1c
subrepo: use vfs.dirname instead of os.path.dirname
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25771
diff
changeset
|
1271 pwvfs = self._ctx.repo().wvfs |
de654a83fe1c
subrepo: use vfs.dirname instead of os.path.dirname
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25771
diff
changeset
|
1272 pwvfs.removedirs(pwvfs.dirname(self._path)) |
13015
82ca0c43bc44
subrepo: prune empty directories when removing svn subrepo
Patrick Mezard <pmezard@gmail.com>
parents:
13014
diff
changeset
|
1273 except OSError: |
82ca0c43bc44
subrepo: prune empty directories when removing svn subrepo
Patrick Mezard <pmezard@gmail.com>
parents:
13014
diff
changeset
|
1274 pass |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1275 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1276 @annotatesubrepoerror |
13322
c19b9282d3a7
subrepo: make update -C clean the working directory for svn subrepos
Erik Zielke <ez@aragost.com>
parents:
13287
diff
changeset
|
1277 def get(self, state, overwrite=False): |
c19b9282d3a7
subrepo: make update -C clean the working directory for svn subrepos
Erik Zielke <ez@aragost.com>
parents:
13287
diff
changeset
|
1278 if overwrite: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1279 self._svncommand([b'revert', b'--recursive']) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1280 args = [b'checkout'] |
14050
9e8a9d45945c
subrepo: handle svn tracked/unknown directory collisions
Patrick Mezard <pmezard@gmail.com>
parents:
14025
diff
changeset
|
1281 if self._svnversion >= (1, 5): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1282 args.append(b'--force') |
14820
7ef125fa9b35
subrepo: correct revision in svn checkout
Eli Carter <eli.carter@tektronix.com>
parents:
14766
diff
changeset
|
1283 # The revision must be specified at the end of the URL to properly |
7ef125fa9b35
subrepo: correct revision in svn checkout
Eli Carter <eli.carter@tektronix.com>
parents:
14766
diff
changeset
|
1284 # update to a directory which has since been deleted and recreated. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1285 args.append(b'%s@%s' % (state[0], state[1])) |
33657
60ee7af2a2ba
subrepo: add tests for svn rogue ssh urls (SEC)
Sean Farley <sean@farley.io>
parents:
33499
diff
changeset
|
1286 |
60ee7af2a2ba
subrepo: add tests for svn rogue ssh urls (SEC)
Sean Farley <sean@farley.io>
parents:
33499
diff
changeset
|
1287 # SEC: check that the ssh url is safe |
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
|
1288 urlutil.checksafessh(state[0]) |
33657
60ee7af2a2ba
subrepo: add tests for svn rogue ssh urls (SEC)
Sean Farley <sean@farley.io>
parents:
33499
diff
changeset
|
1289 |
14664
0ae98cd2a83f
svn subrepos: work around checkout obstructions (issue2752)
Augie Fackler <durin42@gmail.com>
parents:
14556
diff
changeset
|
1290 status, err = self._svncommand(args, failok=True) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1291 _sanitize(self.ui, self.wvfs, b'.svn') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1292 if not re.search(b'Checked out revision [0-9]+.', status): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1293 if b'is already a working copy for a different URL' in err and ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1294 self._wcchanged()[:2] == (False, False) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1295 ): |
14664
0ae98cd2a83f
svn subrepos: work around checkout obstructions (issue2752)
Augie Fackler <durin42@gmail.com>
parents:
14556
diff
changeset
|
1296 # obstructed but clean working copy, so just blow it away. |
0ae98cd2a83f
svn subrepos: work around checkout obstructions (issue2752)
Augie Fackler <durin42@gmail.com>
parents:
14556
diff
changeset
|
1297 self.remove() |
0ae98cd2a83f
svn subrepos: work around checkout obstructions (issue2752)
Augie Fackler <durin42@gmail.com>
parents:
14556
diff
changeset
|
1298 self.get(state, overwrite=False) |
0ae98cd2a83f
svn subrepos: work around checkout obstructions (issue2752)
Augie Fackler <durin42@gmail.com>
parents:
14556
diff
changeset
|
1299 return |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
25980
diff
changeset
|
1300 raise error.Abort((status or err).splitlines()[-1]) |
23572
40e62fbd7356
subrepo: rename the '_ui' member to 'ui'
Matt Harbison <matt_harbison@yahoo.com>
parents:
23571
diff
changeset
|
1301 self.ui.status(status) |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1302 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1303 @annotatesubrepoerror |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1304 def merge(self, state): |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1305 old = self._state[1] |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1306 new = state[1] |
16555
4955e7bf085c
subrepo/svn: cache _wcrev() value in merge()
Patrick Mezard <patrick@mezard.eu>
parents:
16554
diff
changeset
|
1307 wcrev = self._wcrev() |
4955e7bf085c
subrepo/svn: cache _wcrev() value in merge()
Patrick Mezard <patrick@mezard.eu>
parents:
16554
diff
changeset
|
1308 if new != wcrev: |
4955e7bf085c
subrepo/svn: cache _wcrev() value in merge()
Patrick Mezard <patrick@mezard.eu>
parents:
16554
diff
changeset
|
1309 dirty = old == wcrev or self._wcchanged()[0] |
23572
40e62fbd7356
subrepo: rename the '_ui' member to 'ui'
Matt Harbison <matt_harbison@yahoo.com>
parents:
23571
diff
changeset
|
1310 if _updateprompt(self.ui, self, dirty, wcrev, new): |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1311 self.get(state, False) |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1312 |
15708
309e49491253
push: propagate --new-branch and --ssh options when pushing subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15614
diff
changeset
|
1313 def push(self, opts): |
11455
3827728b54e2
subrepo: fix silent push failure for SVN (issue2241)
Matt Mackall <mpm@selenic.com>
parents:
11117
diff
changeset
|
1314 # push is a no-op for SVN |
3827728b54e2
subrepo: fix silent push failure for SVN (issue2241)
Matt Mackall <mpm@selenic.com>
parents:
11117
diff
changeset
|
1315 return True |
10178
cd477be6f2fc
subrepo: Subversion support
Augie Fackler <durin42@gmail.com>
parents:
10177
diff
changeset
|
1316 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1317 @annotatesubrepoerror |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
1318 def files(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1319 output = self._svncommand([b'list', b'--recursive', b'--xml'])[0] |
16450
c9c8c9053119
archive: make it work with svn subrepos (issue3308)
Patrick Mezard <patrick@mezard.eu>
parents:
16196
diff
changeset
|
1320 doc = xml.dom.minidom.parseString(output) |
c9c8c9053119
archive: make it work with svn subrepos (issue3308)
Patrick Mezard <patrick@mezard.eu>
parents:
16196
diff
changeset
|
1321 paths = [] |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1322 for e in doc.getElementsByTagName('entry'): |
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1323 kind = pycompat.bytestr(e.getAttribute('kind')) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1324 if kind != b'file': |
16450
c9c8c9053119
archive: make it work with svn subrepos (issue3308)
Patrick Mezard <patrick@mezard.eu>
parents:
16196
diff
changeset
|
1325 continue |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1326 name = ''.join( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1327 c.data |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1328 for c in e.getElementsByTagName('name')[0].childNodes |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1329 if c.nodeType == c.TEXT_NODE |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1330 ) |
41494
fa7d4e6a0c98
subrepo: clean up lingering bytes/str issues in svn support
Augie Fackler <augie@google.com>
parents:
41483
diff
changeset
|
1331 paths.append(name.encode('utf8')) |
16450
c9c8c9053119
archive: make it work with svn subrepos (issue3308)
Patrick Mezard <patrick@mezard.eu>
parents:
16196
diff
changeset
|
1332 return paths |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
1333 |
31099
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
1334 def filedata(self, name, decode): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1335 return self._svncommand([b'cat'], name)[0] |
12322
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
1336 |
510afb31cf99
subrepo: introduce files and filedata methods for subrepo classes
Martin Geisler <mg@aragost.com>
parents:
12274
diff
changeset
|
1337 |
13106
c869bd9e1193
subrepo: gitsubrepo should inherit from abstractsubrepo
Eric Eisner <ede@mit.edu>
parents:
13097
diff
changeset
|
1338 class gitsubrepo(abstractsubrepo): |
29021
92d37fb3f1aa
verify: don't init subrepo when missing one is referenced (issue5128) (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
28949
diff
changeset
|
1339 def __init__(self, ctx, path, state, allowcreate): |
24671
98ab035e9332
subrepo: change arguments of abstractsubrepo.__init__ (API)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24645
diff
changeset
|
1340 super(gitsubrepo, self).__init__(ctx, path) |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1341 self._state = state |
24302
6e092ea2eff1
subrepo: replace 'ctx._repo' with 'ctx.repo()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24256
diff
changeset
|
1342 self._abspath = ctx.repo().wjoin(path) |
6e092ea2eff1
subrepo: replace 'ctx._repo' with 'ctx.repo()'
Matt Harbison <matt_harbison@yahoo.com>
parents:
24256
diff
changeset
|
1343 self._subparent = ctx.repo() |
17024
33b057778cd2
subrepo: warn user if Git is not version 1.6.0 or higher
Benjamin Pollack <benjamin@bitquabit.com>
parents:
16596
diff
changeset
|
1344 self._ensuregit() |
33b057778cd2
subrepo: warn user if Git is not version 1.6.0 or higher
Benjamin Pollack <benjamin@bitquabit.com>
parents:
16596
diff
changeset
|
1345 |
33b057778cd2
subrepo: warn user if Git is not version 1.6.0 or higher
Benjamin Pollack <benjamin@bitquabit.com>
parents:
16596
diff
changeset
|
1346 def _ensuregit(self): |
17025
8ad08dcab7d9
subrepo: support Git being named "git.cmd" on Windows (issue3173)
Benjamin Pollack <benjamin@bitquabit.com>
parents:
17024
diff
changeset
|
1347 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1348 self._gitexecutable = b'git' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1349 out, err = self._gitnodir([b'--version']) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25658
diff
changeset
|
1350 except OSError as e: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1351 genericerror = _(b"error executing git for subrepo '%s': %s") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1352 notfoundhint = _(b"check git is installed and in your PATH") |
27935
594bdc380aa2
subrepo: better error messages in _ensuregit
Mason Malone <mason.malone@gmail.com>
parents:
27844
diff
changeset
|
1353 if e.errno != errno.ENOENT: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1354 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1355 genericerror % (self._path, encoding.strtolocal(e.strerror)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1356 ) |
34645 | 1357 elif pycompat.iswindows: |
27935
594bdc380aa2
subrepo: better error messages in _ensuregit
Mason Malone <mason.malone@gmail.com>
parents:
27844
diff
changeset
|
1358 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1359 self._gitexecutable = b'git.cmd' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1360 out, err = self._gitnodir([b'--version']) |
27935
594bdc380aa2
subrepo: better error messages in _ensuregit
Mason Malone <mason.malone@gmail.com>
parents:
27844
diff
changeset
|
1361 except OSError as e2: |
594bdc380aa2
subrepo: better error messages in _ensuregit
Mason Malone <mason.malone@gmail.com>
parents:
27844
diff
changeset
|
1362 if e2.errno == errno.ENOENT: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1363 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1364 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1365 b"couldn't find 'git' or 'git.cmd'" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1366 b" for subrepo '%s'" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1367 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1368 % self._path, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1369 hint=notfoundhint, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1370 ) |
27935
594bdc380aa2
subrepo: better error messages in _ensuregit
Mason Malone <mason.malone@gmail.com>
parents:
27844
diff
changeset
|
1371 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1372 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1373 genericerror |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1374 % (self._path, encoding.strtolocal(e2.strerror)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1375 ) |
27935
594bdc380aa2
subrepo: better error messages in _ensuregit
Mason Malone <mason.malone@gmail.com>
parents:
27844
diff
changeset
|
1376 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1377 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1378 _(b"couldn't find git for subrepo '%s'") % self._path, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1379 hint=notfoundhint, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1380 ) |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1381 versionstatus = self._checkversion(out) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1382 if versionstatus == b'unknown': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1383 self.ui.warn(_(b'cannot retrieve git version\n')) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1384 elif versionstatus == b'abort': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1385 raise error.Abort( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1386 _(b'git subrepo requires at least 1.6.0 or later') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1387 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1388 elif versionstatus == b'warning': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1389 self.ui.warn(_(b'git subrepo requires at least 1.6.0 or later\n')) |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1390 |
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1391 @staticmethod |
23521
f5de2a82b77e
subrepo: move git version check into a separate method
Mathias De Maré <mathias.demare@gmail.com>
parents:
23411
diff
changeset
|
1392 def _gitversion(out): |
34068
6d21737c35bf
py3: fix type of regex literals in subrepo.py
Yuya Nishihara <yuya@tcha.org>
parents:
34022
diff
changeset
|
1393 m = re.search(br'^git version (\d+)\.(\d+)\.(\d+)', out) |
23522
49a58b33d1ce
subrepo: extend git version check to 3 digits
Mathias De Maré <mathias.demare@gmail.com>
parents:
23521
diff
changeset
|
1394 if m: |
49a58b33d1ce
subrepo: extend git version check to 3 digits
Mathias De Maré <mathias.demare@gmail.com>
parents:
23521
diff
changeset
|
1395 return (int(m.group(1)), int(m.group(2)), int(m.group(3))) |
49a58b33d1ce
subrepo: extend git version check to 3 digits
Mathias De Maré <mathias.demare@gmail.com>
parents:
23521
diff
changeset
|
1396 |
34068
6d21737c35bf
py3: fix type of regex literals in subrepo.py
Yuya Nishihara <yuya@tcha.org>
parents:
34022
diff
changeset
|
1397 m = re.search(br'^git version (\d+)\.(\d+)', out) |
23521
f5de2a82b77e
subrepo: move git version check into a separate method
Mathias De Maré <mathias.demare@gmail.com>
parents:
23411
diff
changeset
|
1398 if m: |
23522
49a58b33d1ce
subrepo: extend git version check to 3 digits
Mathias De Maré <mathias.demare@gmail.com>
parents:
23521
diff
changeset
|
1399 return (int(m.group(1)), int(m.group(2)), 0) |
23521
f5de2a82b77e
subrepo: move git version check into a separate method
Mathias De Maré <mathias.demare@gmail.com>
parents:
23411
diff
changeset
|
1400 |
f5de2a82b77e
subrepo: move git version check into a separate method
Mathias De Maré <mathias.demare@gmail.com>
parents:
23411
diff
changeset
|
1401 return -1 |
f5de2a82b77e
subrepo: move git version check into a separate method
Mathias De Maré <mathias.demare@gmail.com>
parents:
23411
diff
changeset
|
1402 |
f5de2a82b77e
subrepo: move git version check into a separate method
Mathias De Maré <mathias.demare@gmail.com>
parents:
23411
diff
changeset
|
1403 @staticmethod |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1404 def _checkversion(out): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1405 """ensure git version is new enough |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1406 |
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1407 >>> _checkversion = gitsubrepo._checkversion |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34068
diff
changeset
|
1408 >>> _checkversion(b'git version 1.6.0') |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1409 'ok' |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34068
diff
changeset
|
1410 >>> _checkversion(b'git version 1.8.5') |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1411 'ok' |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34068
diff
changeset
|
1412 >>> _checkversion(b'git version 1.4.0') |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1413 'abort' |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34068
diff
changeset
|
1414 >>> _checkversion(b'git version 1.5.0') |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1415 'warning' |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34068
diff
changeset
|
1416 >>> _checkversion(b'git version 1.9-rc0') |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1417 'ok' |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34068
diff
changeset
|
1418 >>> _checkversion(b'git version 1.9.0.265.g81cdec2') |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1419 'ok' |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34068
diff
changeset
|
1420 >>> _checkversion(b'git version 1.9.0.GIT') |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1421 'ok' |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34068
diff
changeset
|
1422 >>> _checkversion(b'git version 12345') |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1423 'unknown' |
34131
0fa781320203
doctest: bulk-replace string literals with b'' for Python 3
Yuya Nishihara <yuya@tcha.org>
parents:
34068
diff
changeset
|
1424 >>> _checkversion(b'no') |
20840
308344d80fe5
subrepo: factor out Git version check to add doctests
Siddharth Agarwal <sid0@fb.com>
parents:
20818
diff
changeset
|
1425 'unknown' |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1426 """ |
23521
f5de2a82b77e
subrepo: move git version check into a separate method
Mathias De Maré <mathias.demare@gmail.com>
parents:
23411
diff
changeset
|
1427 version = gitsubrepo._gitversion(out) |
17024
33b057778cd2
subrepo: warn user if Git is not version 1.6.0 or higher
Benjamin Pollack <benjamin@bitquabit.com>
parents:
16596
diff
changeset
|
1428 # git 1.4.0 can't work at all, but 1.5.X can in at least some cases, |
33b057778cd2
subrepo: warn user if Git is not version 1.6.0 or higher
Benjamin Pollack <benjamin@bitquabit.com>
parents:
16596
diff
changeset
|
1429 # despite the docstring comment. For now, error on 1.4.0, warn on |
33b057778cd2
subrepo: warn user if Git is not version 1.6.0 or higher
Benjamin Pollack <benjamin@bitquabit.com>
parents:
16596
diff
changeset
|
1430 # 1.5.0 but attempt to continue. |
23521
f5de2a82b77e
subrepo: move git version check into a separate method
Mathias De Maré <mathias.demare@gmail.com>
parents:
23411
diff
changeset
|
1431 if version == -1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1432 return b'unknown' |
23522
49a58b33d1ce
subrepo: extend git version check to 3 digits
Mathias De Maré <mathias.demare@gmail.com>
parents:
23521
diff
changeset
|
1433 if version < (1, 5, 0): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1434 return b'abort' |
23522
49a58b33d1ce
subrepo: extend git version check to 3 digits
Mathias De Maré <mathias.demare@gmail.com>
parents:
23521
diff
changeset
|
1435 elif version < (1, 6, 0): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1436 return b'warning' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1437 return b'ok' |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1438 |
13095
49c7e875482d
subrepo: use environment variable instead of git commit's --date
Eric Eisner <ede@mit.edu>
parents:
13094
diff
changeset
|
1439 def _gitcommand(self, commands, env=None, stream=False): |
49c7e875482d
subrepo: use environment variable instead of git commit's --date
Eric Eisner <ede@mit.edu>
parents:
13094
diff
changeset
|
1440 return self._gitdir(commands, env=env, stream=stream)[0] |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1441 |
13095
49c7e875482d
subrepo: use environment variable instead of git commit's --date
Eric Eisner <ede@mit.edu>
parents:
13094
diff
changeset
|
1442 def _gitdir(self, commands, env=None, stream=False): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1443 return self._gitnodir( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1444 commands, env=env, stream=stream, cwd=self._abspath |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1445 ) |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1446 |
13095
49c7e875482d
subrepo: use environment variable instead of git commit's --date
Eric Eisner <ede@mit.edu>
parents:
13094
diff
changeset
|
1447 def _gitnodir(self, commands, env=None, stream=False, cwd=None): |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1448 """Calls the git command |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1449 |
17424
e7cfe3587ea4
fix trivial spelling errors
Mads Kiilerich <mads@kiilerich.com>
parents:
17191
diff
changeset
|
1450 The methods tries to call the git command. versions prior to 1.6.0 |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1451 are not supported and very probably fail. |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1452 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1453 self.ui.debug(b'%s: git %s\n' % (self._relpath, b' '.join(commands))) |
28658
34d43cb85de8
subrepo: set GIT_ALLOW_PROTOCOL to limit git clone protocols (SEC)
Mateusz Kwapich <mitrandir@fb.com>
parents:
28618
diff
changeset
|
1454 if env is None: |
30635
a150173da1c1
py3: replace os.environ with encoding.environ (part 2 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30615
diff
changeset
|
1455 env = encoding.environ.copy() |
28949
9d3e280864fb
subrepo: disable localizations when calling Git (issue5176)
Matt Mackall <mpm@selenic.com>
parents:
28670
diff
changeset
|
1456 # disable localization for Git output (issue5176) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1457 env[b'LC_ALL'] = b'C' |
28658
34d43cb85de8
subrepo: set GIT_ALLOW_PROTOCOL to limit git clone protocols (SEC)
Mateusz Kwapich <mitrandir@fb.com>
parents:
28618
diff
changeset
|
1458 # fix for Git CVE-2015-7545 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1459 if b'GIT_ALLOW_PROTOCOL' not in env: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1460 env[b'GIT_ALLOW_PROTOCOL'] = b'file:git:http:https:ssh' |
13111
560b8001f765
subrepo: silence git output when ui.quiet is set
Eric Eisner <ede@mit.edu>
parents:
13110
diff
changeset
|
1461 # unless ui.quiet is set, print git's stderr, |
560b8001f765
subrepo: silence git output when ui.quiet is set
Eric Eisner <ede@mit.edu>
parents:
13110
diff
changeset
|
1462 # which is mostly progress and useful info |
560b8001f765
subrepo: silence git output when ui.quiet is set
Eric Eisner <ede@mit.edu>
parents:
13110
diff
changeset
|
1463 errpipe = None |
23572
40e62fbd7356
subrepo: rename the '_ui' member to 'ui'
Matt Harbison <matt_harbison@yahoo.com>
parents:
23571
diff
changeset
|
1464 if self.ui.quiet: |
43789
aea70ca7dd85
subrepo: use pycompat.open directly instead of importing open from pycompat
Kyle Lippincott <spectral@google.com>
parents:
43787
diff
changeset
|
1465 errpipe = pycompat.open(os.devnull, b'w') |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1466 if self.ui._colormode and len(commands) and commands[0] == b"diff": |
31102
96d561c90ad0
color: move git-subrepo support into the subrepo module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31099
diff
changeset
|
1467 # insert the argument in the front, |
96d561c90ad0
color: move git-subrepo support into the subrepo module
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
31099
diff
changeset
|
1468 # the end of git diff arguments is used for paths |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1469 commands.insert(1, b'--color') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1470 p = subprocess.Popen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1471 pycompat.rapply( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1472 procutil.tonativestr, [self._gitexecutable] + commands |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1473 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1474 bufsize=-1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1475 cwd=pycompat.rapply(procutil.tonativestr, cwd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1476 env=procutil.tonativeenv(env), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1477 close_fds=procutil.closefds, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1478 stdout=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1479 stderr=errpipe, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1480 ) |
13027 | 1481 if stream: |
1482 return p.stdout, None | |
1483 | |
13085
b4814f1f415c
subrepo: strip gitcommand output
Eric Eisner <ede@mit.edu>
parents:
13029
diff
changeset
|
1484 retdata = p.stdout.read().strip() |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1485 # wait for the child to exit to avoid race condition. |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1486 p.wait() |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1487 |
13107
3bc237b0eaea
subrepo: treat git error code 1 as success
Eric Eisner <ede@mit.edu>
parents:
13106
diff
changeset
|
1488 if p.returncode != 0 and p.returncode != 1: |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1489 # there are certain error codes that are ok |
13110
cad35f06c031
subrepo: show git command with --debug
Eric Eisner <ede@mit.edu>
parents:
13109
diff
changeset
|
1490 command = commands[0] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1491 if command in (b'cat-file', b'symbolic-ref'): |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1492 return retdata, p.returncode |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1493 # for all others, abort |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1494 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1495 _(b'git %s error %d in %s') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1496 % (command, p.returncode, self._relpath) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1497 ) |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1498 |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1499 return retdata, p.returncode |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1500 |
13553
dea6efdd7ec4
subrepo: don't crash when git repo is missing
Eric Eisner <ede@mit.edu>
parents:
13531
diff
changeset
|
1501 def _gitmissing(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1502 return not self.wvfs.exists(b'.git') |
13553
dea6efdd7ec4
subrepo: don't crash when git repo is missing
Eric Eisner <ede@mit.edu>
parents:
13531
diff
changeset
|
1503 |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1504 def _gitstate(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1505 return self._gitcommand([b'rev-parse', b'HEAD']) |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1506 |
13152
70d80907e4b8
subrepo: defer determination of git's current branch
Eric Eisner <ede@mit.edu>
parents:
13151
diff
changeset
|
1507 def _gitcurrentbranch(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1508 current, err = self._gitdir([b'symbolic-ref', b'HEAD', b'--quiet']) |
13152
70d80907e4b8
subrepo: defer determination of git's current branch
Eric Eisner <ede@mit.edu>
parents:
13151
diff
changeset
|
1509 if err: |
70d80907e4b8
subrepo: defer determination of git's current branch
Eric Eisner <ede@mit.edu>
parents:
13151
diff
changeset
|
1510 current = None |
70d80907e4b8
subrepo: defer determination of git's current branch
Eric Eisner <ede@mit.edu>
parents:
13151
diff
changeset
|
1511 return current |
70d80907e4b8
subrepo: defer determination of git's current branch
Eric Eisner <ede@mit.edu>
parents:
13151
diff
changeset
|
1512 |
13569
3ab3b892d223
subrepo: show the source that git pulls
Eric Eisner <ede@mit.edu>
parents:
13560
diff
changeset
|
1513 def _gitremote(self, remote): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1514 out = self._gitcommand([b'remote', b'show', b'-n', remote]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1515 line = out.split(b'\n')[1] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1516 i = line.index(b'URL: ') + len(b'URL: ') |
13569
3ab3b892d223
subrepo: show the source that git pulls
Eric Eisner <ede@mit.edu>
parents:
13560
diff
changeset
|
1517 return line[i:] |
3ab3b892d223
subrepo: show the source that git pulls
Eric Eisner <ede@mit.edu>
parents:
13560
diff
changeset
|
1518 |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1519 def _githavelocally(self, revision): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1520 out, code = self._gitdir([b'cat-file', b'-e', revision]) |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1521 return code == 0 |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1522 |
13029 | 1523 def _gitisancestor(self, r1, r2): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1524 base = self._gitcommand([b'merge-base', r1, r2]) |
13029 | 1525 return base == r1 |
1526 | |
14440
96f1c1b14154
subrepo: bare git repos considered dirty
Paul Molodowitch <pm@stanfordalumni.org>
parents:
14417
diff
changeset
|
1527 def _gitisbare(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1528 return self._gitcommand([b'config', b'--bool', b'core.bare']) == b'true' |
14440
96f1c1b14154
subrepo: bare git repos considered dirty
Paul Molodowitch <pm@stanfordalumni.org>
parents:
14417
diff
changeset
|
1529 |
15531
0810ccc51f0a
subrepo: fix git status false positive (issue3109)
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15498
diff
changeset
|
1530 def _gitupdatestat(self): |
0810ccc51f0a
subrepo: fix git status false positive (issue3109)
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15498
diff
changeset
|
1531 """This must be run before git diff-index. |
0810ccc51f0a
subrepo: fix git status false positive (issue3109)
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15498
diff
changeset
|
1532 diff-index only looks at changes to file stat; |
0810ccc51f0a
subrepo: fix git status false positive (issue3109)
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15498
diff
changeset
|
1533 this command looks at file contents and updates the stat.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1534 self._gitcommand([b'update-index', b'-q', b'--refresh']) |
15531
0810ccc51f0a
subrepo: fix git status false positive (issue3109)
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15498
diff
changeset
|
1535 |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1536 def _gitbranchmap(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1537 """returns 2 things: |
13086
8db85e39d59c
subrepo: return both mapping directions from gitbranchmap
Eric Eisner <ede@mit.edu>
parents:
13085
diff
changeset
|
1538 a map from git branch to revision |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45682
diff
changeset
|
1539 a map from revision to branches""" |
13086
8db85e39d59c
subrepo: return both mapping directions from gitbranchmap
Eric Eisner <ede@mit.edu>
parents:
13085
diff
changeset
|
1540 branch2rev = {} |
8db85e39d59c
subrepo: return both mapping directions from gitbranchmap
Eric Eisner <ede@mit.edu>
parents:
13085
diff
changeset
|
1541 rev2branch = {} |
13178 | 1542 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1543 out = self._gitcommand( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1544 [b'for-each-ref', b'--format', b'%(objectname) %(refname)'] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1545 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1546 for line in out.split(b'\n'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1547 revision, ref = line.split(b' ') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1548 if not ref.startswith(b'refs/heads/') and not ref.startswith( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1549 b'refs/remotes/' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1550 ): |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1551 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1552 if ref.startswith(b'refs/remotes/') and ref.endswith(b'/HEAD'): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1553 continue # ignore remote/HEAD redirects |
13150
8617b8b74fae
subrepo: use low-level git-for-each-ref command in branchmap
Eric Eisner <ede@mit.edu>
parents:
13144
diff
changeset
|
1554 branch2rev[ref] = revision |
8617b8b74fae
subrepo: use low-level git-for-each-ref command in branchmap
Eric Eisner <ede@mit.edu>
parents:
13144
diff
changeset
|
1555 rev2branch.setdefault(revision, []).append(ref) |
13178 | 1556 return branch2rev, rev2branch |
1557 | |
1558 def _gittracking(self, branches): | |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43651
diff
changeset
|
1559 """return map of remote branch to local tracking branch""" |
13178 | 1560 # assumes no more than one local tracking branch for each remote |
1561 tracking = {} | |
1562 for b in branches: | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1563 if b.startswith(b'refs/remotes/'): |
13178 | 1564 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1565 bname = b.split(b'/', 2)[2] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1566 remote = self._gitcommand([b'config', b'branch.%s.remote' % bname]) |
13178 | 1567 if remote: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1568 ref = self._gitcommand([b'config', b'branch.%s.merge' % bname]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1569 tracking[ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1570 b'refs/remotes/%s/%s' % (remote, ref.split(b'/', 2)[2]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1571 ] = b |
13178 | 1572 return tracking |
13087
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1573 |
13460
64bb8e586a92
subrepo: expand relative sources for git subrepos
Eric Eisner <ede@mit.edu>
parents:
13432
diff
changeset
|
1574 def _abssource(self, source): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1575 if b'://' not in source: |
13692
a7c9735307bd
subrepo: recognize scp-style paths as git URLs
Eric Eisner <ede@mit.edu>
parents:
13559
diff
changeset
|
1576 # recognize the scp syntax as an absolute source |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1577 colon = source.find(b':') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1578 if colon != -1 and b'/' not in source[:colon]: |
13692
a7c9735307bd
subrepo: recognize scp-style paths as git URLs
Eric Eisner <ede@mit.edu>
parents:
13559
diff
changeset
|
1579 return source |
13460
64bb8e586a92
subrepo: expand relative sources for git subrepos
Eric Eisner <ede@mit.edu>
parents:
13432
diff
changeset
|
1580 self._subsource = source |
64bb8e586a92
subrepo: expand relative sources for git subrepos
Eric Eisner <ede@mit.edu>
parents:
13432
diff
changeset
|
1581 return _abssource(self) |
64bb8e586a92
subrepo: expand relative sources for git subrepos
Eric Eisner <ede@mit.edu>
parents:
13432
diff
changeset
|
1582 |
12993
a91334380699
subrepo: cloning and updating of git subrepos
Eric Eisner <ede@mit.edu>
parents:
12992
diff
changeset
|
1583 def _fetch(self, source, revision): |
13553
dea6efdd7ec4
subrepo: don't crash when git repo is missing
Eric Eisner <ede@mit.edu>
parents:
13531
diff
changeset
|
1584 if self._gitmissing(): |
33658
db83a1df03fe
subrepo: add tests for git rogue ssh urls (SEC)
Sean Farley <sean@farley.io>
parents:
33657
diff
changeset
|
1585 # SEC: check for safe ssh url |
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
|
1586 urlutil.checksafessh(source) |
33658
db83a1df03fe
subrepo: add tests for git rogue ssh urls (SEC)
Sean Farley <sean@farley.io>
parents:
33657
diff
changeset
|
1587 |
13525
c12088259f64
subrepo: show the source that git clones
Eric Eisner <ede@mit.edu>
parents:
13466
diff
changeset
|
1588 source = self._abssource(source) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1589 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1590 _(b'cloning subrepo %s from %s\n') % (self._relpath, source) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1591 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1592 self._gitnodir([b'clone', source, self._abspath]) |
12993
a91334380699
subrepo: cloning and updating of git subrepos
Eric Eisner <ede@mit.edu>
parents:
12992
diff
changeset
|
1593 if self._githavelocally(revision): |
a91334380699
subrepo: cloning and updating of git subrepos
Eric Eisner <ede@mit.edu>
parents:
12992
diff
changeset
|
1594 return |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1595 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1596 _(b'pulling subrepo %s from %s\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1597 % (self._relpath, self._gitremote(b'origin')) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1598 ) |
13466
f2295f7cd468
subrepo: only attempt pulling from git's origin
Eric Eisner <ede@mit.edu>
parents:
13465
diff
changeset
|
1599 # try only origin: the originally cloned repo |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1600 self._gitcommand([b'fetch']) |
12993
a91334380699
subrepo: cloning and updating of git subrepos
Eric Eisner <ede@mit.edu>
parents:
12992
diff
changeset
|
1601 if not self._githavelocally(revision): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1602 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1603 _(b'revision %s does not exist in subrepository "%s"\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1604 % (revision, self._relpath) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1605 ) |
12993
a91334380699
subrepo: cloning and updating of git subrepos
Eric Eisner <ede@mit.edu>
parents:
12992
diff
changeset
|
1606 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1607 @annotatesubrepoerror |
33364
bf2daeddd42b
subrepo: consider the parent repo dirty when a file is missing
Matt Harbison <matt_harbison@yahoo.com>
parents:
32584
diff
changeset
|
1608 def dirty(self, ignoreupdate=False, missing=False): |
13553
dea6efdd7ec4
subrepo: don't crash when git repo is missing
Eric Eisner <ede@mit.edu>
parents:
13531
diff
changeset
|
1609 if self._gitmissing(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1610 return self._state[1] != b'' |
14440
96f1c1b14154
subrepo: bare git repos considered dirty
Paul Molodowitch <pm@stanfordalumni.org>
parents:
14417
diff
changeset
|
1611 if self._gitisbare(): |
96f1c1b14154
subrepo: bare git repos considered dirty
Paul Molodowitch <pm@stanfordalumni.org>
parents:
14417
diff
changeset
|
1612 return True |
13179
b512a7074349
subrepo: support ignoreupdate in gitsubrepo's dirty()
Eric Eisner <ede@mit.edu>
parents:
13178
diff
changeset
|
1613 if not ignoreupdate and self._state[1] != self._gitstate(): |
13325
7ebdfa37842e
subrepo: clarify comments in dirty() methods
Kevin Bullock <kbullock@ringworld.org>
parents:
13324
diff
changeset
|
1614 # different version checked out |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1615 return True |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1616 # check for staged changes or modified files; ignore untracked files |
15531
0810ccc51f0a
subrepo: fix git status false positive (issue3109)
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15498
diff
changeset
|
1617 self._gitupdatestat() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1618 out, code = self._gitdir([b'diff-index', b'--quiet', b'HEAD']) |
13153
dca5488f0e4f
subrepo: use low-level git-diff-index for dirty()
Eric Eisner <ede@mit.edu>
parents:
13152
diff
changeset
|
1619 return code == 1 |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1620 |
16072
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
1621 def basestate(self): |
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
1622 return self._gitstate() |
bcb973abcc0b
subrepo: add basestate method
Matt Mackall <mpm@selenic.com>
parents:
16022
diff
changeset
|
1623 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1624 @annotatesubrepoerror |
13323 | 1625 def get(self, state, overwrite=False): |
12993
a91334380699
subrepo: cloning and updating of git subrepos
Eric Eisner <ede@mit.edu>
parents:
12992
diff
changeset
|
1626 source, revision, kind = state |
14469
2fdea636f254
subrepo: don't crash when git .hgsubstate is empty (issue2716)
Eric Eisner <ede@alum.mit.edu>
parents:
14205
diff
changeset
|
1627 if not revision: |
2fdea636f254
subrepo: don't crash when git .hgsubstate is empty (issue2716)
Eric Eisner <ede@alum.mit.edu>
parents:
14205
diff
changeset
|
1628 self.remove() |
2fdea636f254
subrepo: don't crash when git .hgsubstate is empty (issue2716)
Eric Eisner <ede@alum.mit.edu>
parents:
14205
diff
changeset
|
1629 return |
12993
a91334380699
subrepo: cloning and updating of git subrepos
Eric Eisner <ede@mit.edu>
parents:
12992
diff
changeset
|
1630 self._fetch(source, revision) |
12996
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1631 # if the repo was set to be bare, unbare it |
14440
96f1c1b14154
subrepo: bare git repos considered dirty
Paul Molodowitch <pm@stanfordalumni.org>
parents:
14417
diff
changeset
|
1632 if self._gitisbare(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1633 self._gitcommand([b'config', b'core.bare', b'false']) |
12996
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1634 if self._gitstate() == revision: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1635 self._gitcommand([b'reset', b'--hard', b'HEAD']) |
12996
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1636 return |
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1637 elif self._gitstate() == revision: |
13324
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1638 if overwrite: |
13927
518344d02761
subrepo: trailing whitespace cleanup
Augie Fackler <durin42@gmail.com>
parents:
13913
diff
changeset
|
1639 # first reset the index to unmark new files for commit, because |
13324
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1640 # reset --hard will otherwise throw away files added for commit, |
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1641 # not just unmark them. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1642 self._gitcommand([b'reset', b'HEAD']) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1643 self._gitcommand([b'reset', b'--hard', b'HEAD']) |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1644 return |
13178 | 1645 branch2rev, rev2branch = self._gitbranchmap() |
13087
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1646 |
13324
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1647 def checkout(args): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1648 cmd = [b'checkout'] |
13324
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1649 if overwrite: |
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1650 # first reset the index to unmark new files for commit, because |
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1651 # the -f option will otherwise throw away files added for |
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1652 # commit, not just unmark them. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1653 self._gitcommand([b'reset', b'HEAD']) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1654 cmd.append(b'-f') |
13324
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1655 self._gitcommand(cmd + args) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1656 _sanitize(self.ui, self.wvfs, b'.git') |
13324
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1657 |
13087
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1658 def rawcheckout(): |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1659 # no branch to checkout, check it out with no branch |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1660 self.ui.warn( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1661 _(b'checking out detached HEAD in subrepository "%s"\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1662 % self._relpath |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1663 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1664 self.ui.warn( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1665 _(b'check out a git branch if you intend to make changes\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1666 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1667 checkout([b'-q', revision]) |
13087
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1668 |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1669 if revision not in rev2branch: |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1670 rawcheckout() |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1671 return |
13086
8db85e39d59c
subrepo: return both mapping directions from gitbranchmap
Eric Eisner <ede@mit.edu>
parents:
13085
diff
changeset
|
1672 branches = rev2branch[revision] |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1673 firstlocalbranch = None |
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1674 for b in branches: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1675 if b == b'refs/heads/master': |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1676 # master trumps all other branches |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1677 checkout([b'refs/heads/master']) |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1678 return |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1679 if not firstlocalbranch and not b.startswith(b'refs/remotes/'): |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1680 firstlocalbranch = b |
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1681 if firstlocalbranch: |
13324
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1682 checkout([firstlocalbranch]) |
13087
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1683 return |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1684 |
13178 | 1685 tracking = self._gittracking(branch2rev.keys()) |
13087
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1686 # choose a remote branch already tracked if possible |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1687 remote = branches[0] |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1688 if remote not in tracking: |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1689 for b in branches: |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1690 if b in tracking: |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1691 remote = b |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1692 break |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1693 |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1694 if remote not in tracking: |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1695 # create a new local tracking branch |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1696 local = remote.split(b'/', 3)[3] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1697 checkout([b'-b', local, remote]) |
13087
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1698 elif self._gitisancestor(branch2rev[tracking[remote]], remote): |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1699 # When updating to a tracked remote branch, |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1700 # if the local tracking branch is downstream of it, |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1701 # a normal `git pull` would have performed a "fast-forward merge" |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1702 # which is equivalent to updating the local branch to the remote. |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1703 # Since we are only looking at branching at update, we need to |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1704 # detect this situation and perform this action lazily. |
13152
70d80907e4b8
subrepo: defer determination of git's current branch
Eric Eisner <ede@mit.edu>
parents:
13151
diff
changeset
|
1705 if tracking[remote] != self._gitcurrentbranch(): |
13324
e5617047c926
subrepo: make update -C clean the working directory for git subrepos
Erik Zielke <ez@aragost.com>
parents:
13323
diff
changeset
|
1706 checkout([tracking[remote]]) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1707 self._gitcommand([b'merge', b'--ff', remote]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1708 _sanitize(self.ui, self.wvfs, b'.git') |
13087
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1709 else: |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1710 # a real merge would be required, just checkout the revision |
cca0779b4832
subrepo: lazily update git's local tracking branches
Eric Eisner <ede@mit.edu>
parents:
13086
diff
changeset
|
1711 rawcheckout() |
12993
a91334380699
subrepo: cloning and updating of git subrepos
Eric Eisner <ede@mit.edu>
parents:
12992
diff
changeset
|
1712 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1713 @annotatesubrepoerror |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1714 def commit(self, text, user, date): |
13553
dea6efdd7ec4
subrepo: don't crash when git repo is missing
Eric Eisner <ede@mit.edu>
parents:
13531
diff
changeset
|
1715 if self._gitmissing(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1716 raise error.Abort(_(b"subrepo %s is missing") % self._relpath) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1717 cmd = [b'commit', b'-a', b'-m', text] |
30635
a150173da1c1
py3: replace os.environ with encoding.environ (part 2 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30615
diff
changeset
|
1718 env = encoding.environ.copy() |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1719 if user: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1720 cmd += [b'--author', user] |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1721 if date: |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1722 # git's date parser silently ignores when seconds < 1e9 |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1723 # convert to ISO8601 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1724 env[b'GIT_AUTHOR_DATE'] = dateutil.datestr( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1725 date, b'%Y-%m-%dT%H:%M:%S %1%2' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1726 ) |
13095
49c7e875482d
subrepo: use environment variable instead of git commit's --date
Eric Eisner <ede@mit.edu>
parents:
13094
diff
changeset
|
1727 self._gitcommand(cmd, env=env) |
12992
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1728 # make sure commit works otherwise HEAD might not exist under certain |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1729 # circumstances |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1730 return self._gitstate() |
2b73a3279a9f
subrepo: support for adding a git subrepo
Eric Eisner <ede@mit.edu>
parents:
12930
diff
changeset
|
1731 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1732 @annotatesubrepoerror |
12994
845c602b8635
subrepo: allow git subrepos to push and merge
Eric Eisner <ede@mit.edu>
parents:
12993
diff
changeset
|
1733 def merge(self, state): |
845c602b8635
subrepo: allow git subrepos to push and merge
Eric Eisner <ede@mit.edu>
parents:
12993
diff
changeset
|
1734 source, revision, kind = state |
845c602b8635
subrepo: allow git subrepos to push and merge
Eric Eisner <ede@mit.edu>
parents:
12993
diff
changeset
|
1735 self._fetch(source, revision) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1736 base = self._gitcommand([b'merge-base', revision, self._state[1]]) |
15531
0810ccc51f0a
subrepo: fix git status false positive (issue3109)
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15498
diff
changeset
|
1737 self._gitupdatestat() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1738 out, code = self._gitdir([b'diff-index', b'--quiet', b'HEAD']) |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1739 |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1740 def mergefunc(): |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1741 if base == revision: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1742 self.get(state) # fast forward merge |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1743 elif base != self._state[1]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1744 self._gitcommand([b'merge', b'--no-commit', revision]) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1745 _sanitize(self.ui, self.wvfs, b'.git') |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1746 |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1747 if self.dirty(): |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1748 if self._gitstate() != revision: |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1749 dirty = self._gitstate() == self._state[1] or code != 0 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1750 if _updateprompt( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1751 self.ui, self, dirty, self._state[1][:7], revision[:7] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1752 ): |
13417
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1753 mergefunc() |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1754 else: |
0748e18be470
subrepos: prompt on conflicts on update with dirty subrepos
Erik Zielke <ez@aragost.com>
parents:
13413
diff
changeset
|
1755 mergefunc() |
12994
845c602b8635
subrepo: allow git subrepos to push and merge
Eric Eisner <ede@mit.edu>
parents:
12993
diff
changeset
|
1756 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1757 @annotatesubrepoerror |
15708
309e49491253
push: propagate --new-branch and --ssh options when pushing subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15614
diff
changeset
|
1758 def push(self, opts): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1759 force = opts.get(b'force') |
15708
309e49491253
push: propagate --new-branch and --ssh options when pushing subrepos
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
15614
diff
changeset
|
1760 |
14469
2fdea636f254
subrepo: don't crash when git .hgsubstate is empty (issue2716)
Eric Eisner <ede@alum.mit.edu>
parents:
14205
diff
changeset
|
1761 if not self._state[1]: |
2fdea636f254
subrepo: don't crash when git .hgsubstate is empty (issue2716)
Eric Eisner <ede@alum.mit.edu>
parents:
14205
diff
changeset
|
1762 return True |
13553
dea6efdd7ec4
subrepo: don't crash when git repo is missing
Eric Eisner <ede@mit.edu>
parents:
13531
diff
changeset
|
1763 if self._gitmissing(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1764 raise error.Abort(_(b"subrepo %s is missing") % self._relpath) |
13029 | 1765 # if a branch in origin contains the revision, nothing to do |
13178 | 1766 branch2rev, rev2branch = self._gitbranchmap() |
13109
53341289eaf8
subrepo: speed up git push logic
Eric Eisner <ede@mit.edu>
parents:
13108
diff
changeset
|
1767 if self._state[1] in rev2branch: |
53341289eaf8
subrepo: speed up git push logic
Eric Eisner <ede@mit.edu>
parents:
13108
diff
changeset
|
1768 for b in rev2branch[self._state[1]]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1769 if b.startswith(b'refs/remotes/origin/'): |
13109
53341289eaf8
subrepo: speed up git push logic
Eric Eisner <ede@mit.edu>
parents:
13108
diff
changeset
|
1770 return True |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
1771 for b, revision in pycompat.iteritems(branch2rev): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1772 if b.startswith(b'refs/remotes/origin/'): |
13086
8db85e39d59c
subrepo: return both mapping directions from gitbranchmap
Eric Eisner <ede@mit.edu>
parents:
13085
diff
changeset
|
1773 if self._gitisancestor(self._state[1], revision): |
8db85e39d59c
subrepo: return both mapping directions from gitbranchmap
Eric Eisner <ede@mit.edu>
parents:
13085
diff
changeset
|
1774 return True |
13029 | 1775 # otherwise, try to push the currently checked out branch |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1776 cmd = [b'push'] |
12994
845c602b8635
subrepo: allow git subrepos to push and merge
Eric Eisner <ede@mit.edu>
parents:
12993
diff
changeset
|
1777 if force: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1778 cmd.append(b'--force') |
13152
70d80907e4b8
subrepo: defer determination of git's current branch
Eric Eisner <ede@mit.edu>
parents:
13151
diff
changeset
|
1779 |
70d80907e4b8
subrepo: defer determination of git's current branch
Eric Eisner <ede@mit.edu>
parents:
13151
diff
changeset
|
1780 current = self._gitcurrentbranch() |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1781 if current: |
13029 | 1782 # determine if the current branch is even useful |
1783 if not self._gitisancestor(self._state[1], current): | |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1784 self.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1785 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1786 b'unrelated git branch checked out ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1787 b'in subrepository "%s"\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1788 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1789 % self._relpath |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1790 ) |
13029 | 1791 return False |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1792 self.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1793 _(b'pushing branch %s of subrepository "%s"\n') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1794 % (current.split(b'/', 2)[2], self._relpath) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1795 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1796 ret = self._gitdir(cmd + [b'origin', current]) |
20970
70312c95f2f7
subrepo: check return code for git push (issue4223)
Matt Mackall <mpm@selenic.com>
parents:
20870
diff
changeset
|
1797 return ret[1] == 0 |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1798 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1799 self.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1800 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1801 b'no branch checked out in subrepository "%s"\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1802 b'cannot push revision %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1803 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1804 % (self._relpath, self._state[1]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1805 ) |
12995
d90fc91c8377
subrepo: update and merge works with any git branch
Eric Eisner <ede@mit.edu>
parents:
12994
diff
changeset
|
1806 return False |
12994
845c602b8635
subrepo: allow git subrepos to push and merge
Eric Eisner <ede@mit.edu>
parents:
12993
diff
changeset
|
1807 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1808 @annotatesubrepoerror |
41650
f8b18583049f
add: pass around uipathfn and use instead of m.rel() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41648
diff
changeset
|
1809 def add(self, ui, match, prefix, uipathfn, explicitonly, **opts): |
24174
bd9f64ec891d
subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24173
diff
changeset
|
1810 if self._gitmissing(): |
bd9f64ec891d
subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24173
diff
changeset
|
1811 return [] |
24182
00ef3edcf1d5
subrepo: don't exclude files in .hgignore when adding to git
Matt Harbison <matt_harbison@yahoo.com>
parents:
24174
diff
changeset
|
1812 |
40342
6f152067ba57
subrepo: access status members by name instead of by position
Martin von Zweigbergk <martinvonz@google.com>
parents:
39826
diff
changeset
|
1813 s = self.status(None, unknown=True, clean=True) |
24174
bd9f64ec891d
subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24173
diff
changeset
|
1814 |
24183
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1815 tracked = set() |
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1816 # dirstates 'amn' warn, 'r' is added again |
40342
6f152067ba57
subrepo: access status members by name instead of by position
Martin von Zweigbergk <martinvonz@google.com>
parents:
39826
diff
changeset
|
1817 for l in (s.modified, s.added, s.deleted, s.clean): |
24183
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1818 tracked.update(l) |
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1819 |
24182
00ef3edcf1d5
subrepo: don't exclude files in .hgignore when adding to git
Matt Harbison <matt_harbison@yahoo.com>
parents:
24174
diff
changeset
|
1820 # Unknown files not of interest will be rejected by the matcher |
40342
6f152067ba57
subrepo: access status members by name instead of by position
Martin von Zweigbergk <martinvonz@google.com>
parents:
39826
diff
changeset
|
1821 files = s.unknown |
24182
00ef3edcf1d5
subrepo: don't exclude files in .hgignore when adding to git
Matt Harbison <matt_harbison@yahoo.com>
parents:
24174
diff
changeset
|
1822 files.extend(match.files()) |
00ef3edcf1d5
subrepo: don't exclude files in .hgignore when adding to git
Matt Harbison <matt_harbison@yahoo.com>
parents:
24174
diff
changeset
|
1823 |
24183
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1824 rejected = [] |
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1825 |
24182
00ef3edcf1d5
subrepo: don't exclude files in .hgignore when adding to git
Matt Harbison <matt_harbison@yahoo.com>
parents:
24174
diff
changeset
|
1826 files = [f for f in sorted(set(files)) if match(f)] |
24174
bd9f64ec891d
subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24173
diff
changeset
|
1827 for f in files: |
bd9f64ec891d
subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24173
diff
changeset
|
1828 exact = match.exact(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1829 command = [b"add"] |
24174
bd9f64ec891d
subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24173
diff
changeset
|
1830 if exact: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1831 command.append(b"-f") # should be added, even if ignored |
24174
bd9f64ec891d
subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24173
diff
changeset
|
1832 if ui.verbose or not exact: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1833 ui.status(_(b'adding %s\n') % uipathfn(f)) |
24183
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1834 |
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1835 if f in tracked: # hg prints 'adding' even if already tracked |
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1836 if exact: |
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1837 rejected.append(f) |
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1838 continue |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1839 if not opts.get('dry_run'): |
24174
bd9f64ec891d
subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24173
diff
changeset
|
1840 self._gitcommand(command + [f]) |
24183
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1841 |
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1842 for f in rejected: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1843 ui.warn(_(b"%s already tracked!\n") % uipathfn(f)) |
24183
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1844 |
932de135041f
subrepo: warn when adding already tracked files in gitsubrepo
Matt Harbison <matt_harbison@yahoo.com>
parents:
24182
diff
changeset
|
1845 return rejected |
24174
bd9f64ec891d
subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24173
diff
changeset
|
1846 |
bd9f64ec891d
subrepos: support adding files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24173
diff
changeset
|
1847 @annotatesubrepoerror |
12996
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1848 def remove(self): |
13553
dea6efdd7ec4
subrepo: don't crash when git repo is missing
Eric Eisner <ede@mit.edu>
parents:
13531
diff
changeset
|
1849 if self._gitmissing(): |
dea6efdd7ec4
subrepo: don't crash when git repo is missing
Eric Eisner <ede@mit.edu>
parents:
13531
diff
changeset
|
1850 return |
12996
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1851 if self.dirty(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1852 self.ui.warn( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1853 _(b'not removing repo %s because it has changes.\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1854 % self._relpath |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1855 ) |
12996
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1856 return |
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1857 # we can't fully delete the repository as it may contain |
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1858 # local-only history |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1859 self.ui.note(_(b'removing subrepo %s\n') % self._relpath) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1860 self._gitcommand([b'config', b'core.bare', b'true']) |
24688
897a0715ee71
subrepo: use vfs.readdir instead of os.listdir to avoid expensive stat calls
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24675
diff
changeset
|
1861 for f, kind in self.wvfs.readdir(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1862 if f == b'.git': |
12996
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1863 continue |
24688
897a0715ee71
subrepo: use vfs.readdir instead of os.listdir to avoid expensive stat calls
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24675
diff
changeset
|
1864 if kind == stat.S_IFDIR: |
24690
d1ddf1fe5d33
subrepo: use vfs.rmtree instead of shutil.rmtree
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24688
diff
changeset
|
1865 self.wvfs.rmtree(f) |
12996
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1866 else: |
24691
def1145cec2d
subrepo: use vfs.unlink instead of os.remove
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
24690
diff
changeset
|
1867 self.wvfs.unlink(f) |
12996
3a42651b0a62
subrepo: removing (and restoring) git subrepo state
Eric Eisner <ede@mit.edu>
parents:
12995
diff
changeset
|
1868 |
31099
b44ab288358e
subrepo: run the repo decoders when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
30755
diff
changeset
|
1869 def archive(self, archiver, prefix, match=None, decode=True): |
18967
88d1b59f6906
archive: raise error.Abort if the file pattern matches no files
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18964
diff
changeset
|
1870 total = 0 |
13027 | 1871 source, revision = self._state |
14469
2fdea636f254
subrepo: don't crash when git .hgsubstate is empty (issue2716)
Eric Eisner <ede@alum.mit.edu>
parents:
14205
diff
changeset
|
1872 if not revision: |
18967
88d1b59f6906
archive: raise error.Abort if the file pattern matches no files
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18964
diff
changeset
|
1873 return total |
13027 | 1874 self._fetch(source, revision) |
1875 | |
1876 # Parse git's native archive command. | |
1877 # This should be much faster than manually traversing the trees | |
1878 # and objects with many subprocess calls. | |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1879 tarstream = self._gitcommand([b'archive', revision], stream=True) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1880 tar = tarfile.open(fileobj=tarstream, mode='r|') |
13144
aae2d5cbde64
subrepo: add progress bar support to archive
Martin Geisler <mg@aragost.com>
parents:
13137
diff
changeset
|
1881 relpath = subrelpath(self) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1882 progress = self.ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1883 _(b'archiving (%s)') % relpath, unit=_(b'files') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1884 ) |
38379
3a7c33a2cc5e
subrepo: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38370
diff
changeset
|
1885 progress.update(0) |
3a7c33a2cc5e
subrepo: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38370
diff
changeset
|
1886 for info in tar: |
13180
a79e0688a5ee
subrepo: fix git archive parsing of directories and symfiles
Eric Eisner <ede@mit.edu>
parents:
13179
diff
changeset
|
1887 if info.isdir(): |
a79e0688a5ee
subrepo: fix git archive parsing of directories and symfiles
Eric Eisner <ede@mit.edu>
parents:
13179
diff
changeset
|
1888 continue |
41483
46ab0c6b28dc
subrepo: bytes/str cleanups on Git support
Augie Fackler <augie@google.com>
parents:
40753
diff
changeset
|
1889 bname = pycompat.fsencode(info.name) |
46ab0c6b28dc
subrepo: bytes/str cleanups on Git support
Augie Fackler <augie@google.com>
parents:
40753
diff
changeset
|
1890 if match and not match(bname): |
17108
1894dac619de
subrepo: propagate matcher to subrepos when archiving
Matt Harbison <matt_harbison@yahoo.com>
parents:
17036
diff
changeset
|
1891 continue |
13180
a79e0688a5ee
subrepo: fix git archive parsing of directories and symfiles
Eric Eisner <ede@mit.edu>
parents:
13179
diff
changeset
|
1892 if info.issym(): |
a79e0688a5ee
subrepo: fix git archive parsing of directories and symfiles
Eric Eisner <ede@mit.edu>
parents:
13179
diff
changeset
|
1893 data = info.linkname |
a79e0688a5ee
subrepo: fix git archive parsing of directories and symfiles
Eric Eisner <ede@mit.edu>
parents:
13179
diff
changeset
|
1894 else: |
46694
d6601547f22b
subrepo: handle unexpected file types from git gracefully
Matt Harbison <matt_harbison@yahoo.com>
parents:
46113
diff
changeset
|
1895 f = tar.extractfile(info) |
d6601547f22b
subrepo: handle unexpected file types from git gracefully
Matt Harbison <matt_harbison@yahoo.com>
parents:
46113
diff
changeset
|
1896 if f: |
d6601547f22b
subrepo: handle unexpected file types from git gracefully
Matt Harbison <matt_harbison@yahoo.com>
parents:
46113
diff
changeset
|
1897 data = f.read() |
d6601547f22b
subrepo: handle unexpected file types from git gracefully
Matt Harbison <matt_harbison@yahoo.com>
parents:
46113
diff
changeset
|
1898 else: |
d6601547f22b
subrepo: handle unexpected file types from git gracefully
Matt Harbison <matt_harbison@yahoo.com>
parents:
46113
diff
changeset
|
1899 self.ui.warn(_(b'skipping "%s" (unknown type)') % bname) |
d6601547f22b
subrepo: handle unexpected file types from git gracefully
Matt Harbison <matt_harbison@yahoo.com>
parents:
46113
diff
changeset
|
1900 continue |
41631
3d9d5e612e67
subrepo: adjust subrepo prefix before calling subrepo.archive() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
41630
diff
changeset
|
1901 archiver.addfile(prefix + bname, info.mode, info.issym(), data) |
18967
88d1b59f6906
archive: raise error.Abort if the file pattern matches no files
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18964
diff
changeset
|
1902 total += 1 |
38379
3a7c33a2cc5e
subrepo: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38370
diff
changeset
|
1903 progress.increment() |
3a7c33a2cc5e
subrepo: use progress helper
Martin von Zweigbergk <martinvonz@google.com>
parents:
38370
diff
changeset
|
1904 progress.complete() |
18967
88d1b59f6906
archive: raise error.Abort if the file pattern matches no files
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18964
diff
changeset
|
1905 return total |
13144
aae2d5cbde64
subrepo: add progress bar support to archive
Martin Geisler <mg@aragost.com>
parents:
13137
diff
changeset
|
1906 |
18109
9e3910db4e78
subrepo: append subrepo path to subrepo error messages
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
18031
diff
changeset
|
1907 @annotatesubrepoerror |
32584
746e12a767b3
cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents:
32540
diff
changeset
|
1908 def cat(self, match, fm, fntemplate, prefix, **opts): |
23991
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1909 rev = self._state[1] |
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1910 if match.anypats(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1911 return 1 # No support for include/exclude yet |
23991
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1912 |
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1913 if not match.files(): |
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1914 return 1 |
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1915 |
32584
746e12a767b3
cat: add formatter support
Yuya Nishihara <yuya@tcha.org>
parents:
32540
diff
changeset
|
1916 # TODO: add support for non-plain formatter (see cmdutil.cat()) |
23991
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1917 for f in match.files(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1918 output = self._gitcommand([b"show", b"%s:%s" % (rev, f)]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1919 fp = cmdutil.makefileobj( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1920 self._ctx, fntemplate, pathname=self.wvfs.reljoin(prefix, f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1921 ) |
23991
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1922 fp.write(output) |
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1923 fp.close() |
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1924 return 0 |
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1925 |
07c1a7d1ef69
subrepo: add 'cat' support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23963
diff
changeset
|
1926 @annotatesubrepoerror |
13182
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1927 def status(self, rev2, **opts): |
14469
2fdea636f254
subrepo: don't crash when git .hgsubstate is empty (issue2716)
Eric Eisner <ede@alum.mit.edu>
parents:
14205
diff
changeset
|
1928 rev1 = self._state[1] |
2fdea636f254
subrepo: don't crash when git .hgsubstate is empty (issue2716)
Eric Eisner <ede@alum.mit.edu>
parents:
14205
diff
changeset
|
1929 if self._gitmissing() or not rev1: |
13553
dea6efdd7ec4
subrepo: don't crash when git repo is missing
Eric Eisner <ede@mit.edu>
parents:
13531
diff
changeset
|
1930 # if the repo is missing, return no results |
24210
99362821b25b
subrepo: always return scmutil.status() from gitsubrepo.status()
Matt Harbison <matt_harbison@yahoo.com>
parents:
24209
diff
changeset
|
1931 return scmutil.status([], [], [], [], [], [], []) |
13182
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1932 modified, added, removed = [], [], [] |
15531
0810ccc51f0a
subrepo: fix git status false positive (issue3109)
Eric Roshan Eisner <ede@alum.mit.edu>
parents:
15498
diff
changeset
|
1933 self._gitupdatestat() |
13182
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1934 if rev2: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1935 command = [b'diff-tree', b'--no-renames', b'-r', rev1, rev2] |
13182
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1936 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1937 command = [b'diff-index', b'--no-renames', rev1] |
13182
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1938 out = self._gitcommand(command) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1939 for line in out.split(b'\n'): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1940 tab = line.find(b'\t') |
13182
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1941 if tab == -1: |
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1942 continue |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1943 status, f = line[tab - 1 : tab], line[tab + 1 :] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1944 if status == b'M': |
13182
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1945 modified.append(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1946 elif status == b'A': |
13182
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1947 added.append(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1948 elif status == b'D': |
13182
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1949 removed.append(f) |
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1950 |
22927
7d754b7acd55
subrepo: use separate instances of empty lists in status
Martin von Zweigbergk <martinvonz@gmail.com>
parents:
22914
diff
changeset
|
1951 deleted, unknown, ignored, clean = [], [], [], [] |
23411
2d86f4e38c08
subrepo: add status support for ignored files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23373
diff
changeset
|
1952 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1953 command = [b'status', b'--porcelain', b'-z'] |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1954 if opts.get('unknown'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1955 command += [b'--untracked-files=all'] |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1956 if opts.get('ignored'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1957 command += [b'--ignored'] |
24256
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1958 out = self._gitcommand(command) |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1959 |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1960 changedfiles = set() |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1961 changedfiles.update(modified) |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1962 changedfiles.update(added) |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1963 changedfiles.update(removed) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1964 for line in out.split(b'\0'): |
24256
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1965 if not line: |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1966 continue |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1967 st = line[0:2] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1968 # moves and copies show 2 files on one line |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1969 if line.find(b'\0') >= 0: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1970 filename1, filename2 = line[3:].split(b'\0') |
24256
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1971 else: |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1972 filename1 = line[3:] |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1973 filename2 = None |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1974 |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1975 changedfiles.add(filename1) |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1976 if filename2: |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1977 changedfiles.add(filename2) |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1978 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1979 if st == b'??': |
24256
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1980 unknown.append(filename1) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1981 elif st == b'!!': |
24256
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1982 ignored.append(filename1) |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1983 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1984 if opts.get('clean'): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1985 out = self._gitcommand([b'ls-files']) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1986 for f in out.split(b'\n'): |
24256
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1987 if not f in changedfiles: |
e964edc3274e
subrepo: add status support for ignored and clean files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24211
diff
changeset
|
1988 clean.append(f) |
23411
2d86f4e38c08
subrepo: add status support for ignored files in git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23373
diff
changeset
|
1989 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1990 return scmutil.status( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1991 modified, added, removed, deleted, unknown, ignored, clean |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
1992 ) |
13182
2537bd17421d
subrepo: basic support for status of git subrepos
Eric Eisner <ede@mit.edu>
parents:
13181
diff
changeset
|
1993 |
23523
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
1994 @annotatesubrepoerror |
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
1995 def diff(self, ui, diffopts, node2, match, prefix, **opts): |
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
1996 node1 = self._state[1] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1997 cmd = [b'diff', b'--no-renames'] |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
1998 if opts['stat']: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1999 cmd.append(b'--stat') |
23523
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2000 else: |
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2001 # for Git, this also implies '-p' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2002 cmd.append(b'-U%d' % diffopts.context) |
23523
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2003 |
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2004 if diffopts.noprefix: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2005 cmd.extend( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2006 [b'--src-prefix=%s/' % prefix, b'--dst-prefix=%s/' % prefix] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2007 ) |
23523
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2008 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2009 cmd.extend( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2010 [b'--src-prefix=a/%s/' % prefix, b'--dst-prefix=b/%s/' % prefix] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2011 ) |
23523
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2012 |
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2013 if diffopts.ignorews: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2014 cmd.append(b'--ignore-all-space') |
23523
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2015 if diffopts.ignorewsamount: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2016 cmd.append(b'--ignore-space-change') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2017 if ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2018 self._gitversion(self._gitcommand([b'--version'])) >= (1, 8, 4) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2019 and diffopts.ignoreblanklines |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2020 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2021 cmd.append(b'--ignore-blank-lines') |
23523
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2022 |
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2023 cmd.append(node1) |
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2024 if node2: |
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2025 cmd.append(node2) |
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2026 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2027 output = b"" |
23523
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2028 if match.always(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2029 output += self._gitcommand(cmd) + b'\n' |
24778
a48b65ab428d
subrepo: add include/exclude support for diffing git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24726
diff
changeset
|
2030 else: |
43651
aeed2f106213
subrepo: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
2031 st = self.status(node2) |
aeed2f106213
subrepo: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
2032 files = [ |
aeed2f106213
subrepo: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
2033 f |
aeed2f106213
subrepo: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
2034 for sublist in (st.modified, st.added, st.removed) |
aeed2f106213
subrepo: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
2035 for f in sublist |
aeed2f106213
subrepo: use field names instead of field numbers on scmutil.status
Augie Fackler <augie@google.com>
parents:
43506
diff
changeset
|
2036 ] |
24778
a48b65ab428d
subrepo: add include/exclude support for diffing git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24726
diff
changeset
|
2037 for f in files: |
a48b65ab428d
subrepo: add include/exclude support for diffing git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
24726
diff
changeset
|
2038 if match(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2039 output += self._gitcommand(cmd + [b'--', f]) + b'\n' |
23938
de519517f597
subrepo: correctly add newline for git subrepo diffs
Mathias De Maré <mathias.demare@gmail.com>
parents:
23885
diff
changeset
|
2040 |
de519517f597
subrepo: correctly add newline for git subrepo diffs
Mathias De Maré <mathias.demare@gmail.com>
parents:
23885
diff
changeset
|
2041 if output.strip(): |
de519517f597
subrepo: correctly add newline for git subrepo diffs
Mathias De Maré <mathias.demare@gmail.com>
parents:
23885
diff
changeset
|
2042 ui.write(output) |
23523
01a8dfc79cdc
subrepo: add partial diff support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23522
diff
changeset
|
2043 |
23679
dd1e73c4be13
subrepo: add forgotten annotation for reverting git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23678
diff
changeset
|
2044 @annotatesubrepoerror |
23580
e20f36ad092e
subrepo: fix git subrepo ui argument
Matt Mackall <mpm@selenic.com>
parents:
23579
diff
changeset
|
2045 def revert(self, substate, *pats, **opts): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2046 self.ui.status(_(b'reverting subrepo %s\n') % substate[0]) |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2047 if not opts.get('no_backup'): |
23678
194d2f185008
subrepo: add full revert support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23666
diff
changeset
|
2048 status = self.status(None) |
194d2f185008
subrepo: add full revert support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23666
diff
changeset
|
2049 names = status.modified |
194d2f185008
subrepo: add full revert support for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23666
diff
changeset
|
2050 for name in names: |
41603
ea5ebb8f72bd
subrepo: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41593
diff
changeset
|
2051 # backuppath() expects a path relative to the parent repo (the |
ea5ebb8f72bd
subrepo: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41593
diff
changeset
|
2052 # repo that ui.origbackuppath is relative to) |
ea5ebb8f72bd
subrepo: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41593
diff
changeset
|
2053 parentname = os.path.join(self._path, name) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2054 bakname = scmutil.backuppath( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2055 self.ui, self._subparent, parentname |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2056 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2057 self.ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2058 _(b'saving current version of %s as %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2059 % (name, os.path.relpath(bakname)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2060 ) |
41603
ea5ebb8f72bd
subrepo: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41593
diff
changeset
|
2061 util.rename(self.wvfs.join(name), bakname) |
23550
7fa2189c1e87
subrepo: add revert support without backup for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23540
diff
changeset
|
2062 |
43506
9f70512ae2cf
cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
2063 if not opts.get('dry_run'): |
24134
afed5d2e7985
revert: display full subrepo output with --dry-run
Matt Harbison <matt_harbison@yahoo.com>
parents:
24132
diff
changeset
|
2064 self.get(substate, overwrite=True) |
23550
7fa2189c1e87
subrepo: add revert support without backup for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23540
diff
changeset
|
2065 return [] |
7fa2189c1e87
subrepo: add revert support without backup for git subrepos
Mathias De Maré <mathias.demare@gmail.com>
parents:
23540
diff
changeset
|
2066 |
21400
78a60daacea8
subrepo: add shortid() method to subrepo classes
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21041
diff
changeset
|
2067 def shortid(self, revid): |
78a60daacea8
subrepo: add shortid() method to subrepo classes
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21041
diff
changeset
|
2068 return revid[:7] |
78a60daacea8
subrepo: add shortid() method to subrepo classes
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21041
diff
changeset
|
2069 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2070 |
10177
5ca0d220ae21
subrepo: add table-based dispatch for subrepo types
Augie Fackler <durin42@gmail.com>
parents:
10175
diff
changeset
|
2071 types = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2072 b'hg': hgsubrepo, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2073 b'svn': svnsubrepo, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2074 b'git': gitsubrepo, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42588
diff
changeset
|
2075 } |