Mercurial > hg-git
annotate hggit/compat.py @ 1073:03e7c9d1fbb6
config: register git.blockdothg
author | Kevin Bullock <kbullock@ringworld.org> |
---|---|
date | Tue, 24 Oct 2017 14:46:36 -0500 |
parents | f7433379c04a |
children | d96f998a718f |
rev | line source |
---|---|
991
92d7702c19da
compat: add method for backwards compatible passwordmgr
Sean Farley <sean@farley.io>
parents:
850
diff
changeset
|
1 from mercurial import ( |
92d7702c19da
compat: add method for backwards compatible passwordmgr
Sean Farley <sean@farley.io>
parents:
850
diff
changeset
|
2 url, |
92d7702c19da
compat: add method for backwards compatible passwordmgr
Sean Farley <sean@farley.io>
parents:
850
diff
changeset
|
3 util as hgutil, |
92d7702c19da
compat: add method for backwards compatible passwordmgr
Sean Farley <sean@farley.io>
parents:
850
diff
changeset
|
4 ) |
92d7702c19da
compat: add method for backwards compatible passwordmgr
Sean Farley <sean@farley.io>
parents:
850
diff
changeset
|
5 |
850
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
6 try: |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
7 from mercurial import encoding |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
8 hfsignoreclean = encoding.hfsignoreclean |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
9 except AttributeError: |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
10 # compat with hg 3.2.1 and earlier, which doesn't have |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
11 # hfsignoreclean (This was borrowed wholesale from hg 3.2.2.) |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
12 _ignore = [unichr(int(x, 16)).encode("utf-8") for x in |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
13 "200c 200d 200e 200f 202a 202b 202c 202d 202e " |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
14 "206a 206b 206c 206d 206e 206f feff".split()] |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
15 # verify the next function will work |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
16 assert set([i[0] for i in _ignore]) == set(["\xe2", "\xef"]) |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
17 |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
18 def hfsignoreclean(s): |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
19 """Remove codepoints ignored by HFS+ from s. |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
20 |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
21 >>> hfsignoreclean(u'.h\u200cg'.encode('utf-8')) |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
22 '.hg' |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
23 >>> hfsignoreclean(u'.h\ufeffg'.encode('utf-8')) |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
24 '.hg' |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
25 """ |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
26 if "\xe2" in s or "\xef" in s: |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
27 for c in _ignore: |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
28 s = s.replace(c, '') |
81c55f8629ba
hg2git: audit path components during export (CVE-2014-9390)
Augie Fackler <raf@durin42.com>
parents:
diff
changeset
|
29 return s |
991
92d7702c19da
compat: add method for backwards compatible passwordmgr
Sean Farley <sean@farley.io>
parents:
850
diff
changeset
|
30 |
1035
cfcd3032355c
compat: remove unused argument
Kevin Bullock <kbullock@ringworld.org>
parents:
1005
diff
changeset
|
31 def passwordmgr(ui): |
991
92d7702c19da
compat: add method for backwards compatible passwordmgr
Sean Farley <sean@farley.io>
parents:
850
diff
changeset
|
32 try: |
1036
da62ef0569bb
compat: fix fallback for ui.passwordmgr
Kevin Bullock <kbullock@ringworld.org>
parents:
1035
diff
changeset
|
33 realm = hgutil.urlreq.httppasswordmgrwithdefaultrealm() |
da62ef0569bb
compat: fix fallback for ui.passwordmgr
Kevin Bullock <kbullock@ringworld.org>
parents:
1035
diff
changeset
|
34 return url.passwordmgr(ui, realm) |
da62ef0569bb
compat: fix fallback for ui.passwordmgr
Kevin Bullock <kbullock@ringworld.org>
parents:
1035
diff
changeset
|
35 except (TypeError, AttributeError): |
991
92d7702c19da
compat: add method for backwards compatible passwordmgr
Sean Farley <sean@farley.io>
parents:
850
diff
changeset
|
36 # compat with hg < 3.9 |
92d7702c19da
compat: add method for backwards compatible passwordmgr
Sean Farley <sean@farley.io>
parents:
850
diff
changeset
|
37 return url.passwordmgr(ui) |
1005
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
38 |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
39 # dulwich doesn't return the symref where remote HEAD points, so we monkey |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
40 # patch it here |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
41 from dulwich.errors import GitProtocolError |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
42 from dulwich.protocol import extract_capabilities |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
43 |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
44 def read_pkt_refs(proto): |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
45 server_capabilities = None |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
46 refs = {} |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
47 # Receive refs from server |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
48 for pkt in proto.read_pkt_seq(): |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
49 (sha, ref) = pkt.rstrip('\n').split(None, 1) |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
50 if sha == 'ERR': |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
51 raise GitProtocolError(ref) |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
52 if server_capabilities is None: |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
53 (ref, server_capabilities) = extract_capabilities(ref) |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
54 symref = 'symref=HEAD:' |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
55 for cap in server_capabilities: |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
56 if cap.startswith(symref): |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
57 sha = cap.replace(symref, '') |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
58 refs[ref] = sha |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
59 |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
60 if len(refs) == 0: |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
61 return None, set([]) |
31f52d62ae13
compat: add method for dulwich to return the symref
Sean Farley <sean@farley.io>
parents:
991
diff
changeset
|
62 return refs, set(server_capabilities) |
1061
a2eccdeed26d
config: provide a central place to define and access defaults
Kevin Bullock <kbullock@ringworld.org>
parents:
1036
diff
changeset
|
63 |
a2eccdeed26d
config: provide a central place to define and access defaults
Kevin Bullock <kbullock@ringworld.org>
parents:
1036
diff
changeset
|
64 |
a2eccdeed26d
config: provide a central place to define and access defaults
Kevin Bullock <kbullock@ringworld.org>
parents:
1036
diff
changeset
|
65 CONFIG_DEFAULTS = { |
1063
ae5759bf5bcd
config: register git.blockdotgit
Kevin Bullock <kbullock@ringworld.org>
parents:
1062
diff
changeset
|
66 'git': { |
1066
ddae0045de4e
config: register git.authors
Kevin Bullock <kbullock@ringworld.org>
parents:
1065
diff
changeset
|
67 'authors': None, |
1063
ae5759bf5bcd
config: register git.blockdotgit
Kevin Bullock <kbullock@ringworld.org>
parents:
1062
diff
changeset
|
68 'blockdotgit': True, |
1073
03e7c9d1fbb6
config: register git.blockdothg
Kevin Bullock <kbullock@ringworld.org>
parents:
1072
diff
changeset
|
69 'blockdothg': True, |
1065
78dc28eb4245
config: register git.branch_bookmark_suffix
Kevin Bullock <kbullock@ringworld.org>
parents:
1064
diff
changeset
|
70 'branch_bookmark_suffix': None, |
1068
914e5477b17e
config: register git.debugextrainmessage
Kevin Bullock <kbullock@ringworld.org>
parents:
1067
diff
changeset
|
71 'debugextrainmessage': False, # test only -- do not document this! |
1072
f7433379c04a
config: register git.findcopiesharder
Kevin Bullock <kbullock@ringworld.org>
parents:
1071
diff
changeset
|
72 'findcopiesharder': False, |
1064
d37336a87b70
config: register git.intree
Kevin Bullock <kbullock@ringworld.org>
parents:
1063
diff
changeset
|
73 'intree': None, |
1069
88db6948a5a8
config: register git.mindate
Kevin Bullock <kbullock@ringworld.org>
parents:
1068
diff
changeset
|
74 'mindate': None, |
1071
00baa6a2abc8
config: register git.renamelimit
Kevin Bullock <kbullock@ringworld.org>
parents:
1070
diff
changeset
|
75 'renamelimit': 400, |
1070
0b4144897f73
config: register git.similarity
Kevin Bullock <kbullock@ringworld.org>
parents:
1069
diff
changeset
|
76 'similarity': 0, |
1063
ae5759bf5bcd
config: register git.blockdotgit
Kevin Bullock <kbullock@ringworld.org>
parents:
1062
diff
changeset
|
77 }, |
1067
f4c2b42731ea
config: register hggit.mapsavefrequency
Kevin Bullock <kbullock@ringworld.org>
parents:
1066
diff
changeset
|
78 'hggit': { |
f4c2b42731ea
config: register hggit.mapsavefrequency
Kevin Bullock <kbullock@ringworld.org>
parents:
1066
diff
changeset
|
79 'mapsavefrequency': 0, |
f4c2b42731ea
config: register hggit.mapsavefrequency
Kevin Bullock <kbullock@ringworld.org>
parents:
1066
diff
changeset
|
80 } |
1061
a2eccdeed26d
config: provide a central place to define and access defaults
Kevin Bullock <kbullock@ringworld.org>
parents:
1036
diff
changeset
|
81 } |
a2eccdeed26d
config: provide a central place to define and access defaults
Kevin Bullock <kbullock@ringworld.org>
parents:
1036
diff
changeset
|
82 |
1062
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
83 hasconfigitems = False |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
84 |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
85 def registerconfigs(configitem): |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
86 global hasconfigitems |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
87 hasconfigitems = True |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
88 for section, items in CONFIG_DEFAULTS.iteritems(): |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
89 for item, default in items.iteritems(): |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
90 configitem(section, item, default=default) |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
91 |
1061
a2eccdeed26d
config: provide a central place to define and access defaults
Kevin Bullock <kbullock@ringworld.org>
parents:
1036
diff
changeset
|
92 def config(ui, subtype, section, item): |
a2eccdeed26d
config: provide a central place to define and access defaults
Kevin Bullock <kbullock@ringworld.org>
parents:
1036
diff
changeset
|
93 if subtype == 'string': |
a2eccdeed26d
config: provide a central place to define and access defaults
Kevin Bullock <kbullock@ringworld.org>
parents:
1036
diff
changeset
|
94 subtype = '' |
a2eccdeed26d
config: provide a central place to define and access defaults
Kevin Bullock <kbullock@ringworld.org>
parents:
1036
diff
changeset
|
95 getconfig = getattr(ui, 'config' + subtype) |
1062
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
96 if hasconfigitems: |
c249de74742b
compat: use config registrar if available
Kevin Bullock <kbullock@ringworld.org>
parents:
1061
diff
changeset
|
97 return getconfig(section, item) |
1061
a2eccdeed26d
config: provide a central place to define and access defaults
Kevin Bullock <kbullock@ringworld.org>
parents:
1036
diff
changeset
|
98 return getconfig(section, item, CONFIG_DEFAULTS[section][item]) |