Mercurial > hg
annotate hgext/convert/common.py @ 52290:e03bc88776d3
tests: stop killing (most) https servers individually
This is easier to manage, and avoids one nested conditional. There is one final
sweep of killing individual servers near the end, but that's left alone because
there's a comment about not killing `tinyproxy.py`, due to potentially emitting
additional output.
author | Matt Harbison <matt_harbison@yahoo.com> |
---|---|
date | Mon, 11 Nov 2024 12:08:26 -0500 |
parents | f4733654f144 |
children |
rev | line source |
---|---|
8250
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8155
diff
changeset
|
1 # common.py - common code for the convert extension |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8155
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
45942
diff
changeset
|
3 # Copyright 2005-2009 Olivia Mackall <olivia@selenic.com> and others |
8250
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8155
diff
changeset
|
4 # |
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8155
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
8250
1b60efdb8bc5
convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents:
8155
diff
changeset
|
7 |
51863
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51687
diff
changeset
|
8 from __future__ import annotations |
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51687
diff
changeset
|
9 |
28410
48b04018c897
convert: common use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
10 import base64 |
48b04018c897
convert: common use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
11 import os |
48870
df56e6bd37f6
py3: use pickle directly
Gregory Szorc <gregory.szorc@gmail.com>
parents:
46819
diff
changeset
|
12 import pickle |
28410
48b04018c897
convert: common use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
13 import re |
36557
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
14 import shlex |
28410
48b04018c897
convert: common use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
15 import subprocess |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
16 import typing |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
17 |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
18 from typing import ( |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
19 Any, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
20 AnyStr, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
21 Optional, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
22 ) |
28410
48b04018c897
convert: common use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
23 |
29205
a0939666b836
py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents:
28900
diff
changeset
|
24 from mercurial.i18n import _ |
43085
eef9a2d67051
py3: manually import pycompat.open into files that need it
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
25 from mercurial.pycompat import open |
28410
48b04018c897
convert: common use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
26 from mercurial import ( |
34022
d5b2beca16c0
python3: wrap all uses of <exception>.strerror with strtolocal
Augie Fackler <raf@durin42.com>
parents:
30659
diff
changeset
|
27 encoding, |
28410
48b04018c897
convert: common use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
28 error, |
48b04018c897
convert: common use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
29 phases, |
36329
93943eef696f
py3: use pycompat.byteskwargs in hgext/convert/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36148
diff
changeset
|
30 pycompat, |
28410
48b04018c897
convert: common use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
31 util, |
48b04018c897
convert: common use absolute_import
timeless <timeless@mozdev.org>
parents:
26587
diff
changeset
|
32 ) |
51684
20e2a20674dc
convert: drop a duplicate implementation of `dateutil.makedate()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50752
diff
changeset
|
33 from mercurial.utils import ( |
20e2a20674dc
convert: drop a duplicate implementation of `dateutil.makedate()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50752
diff
changeset
|
34 dateutil, |
20e2a20674dc
convert: drop a duplicate implementation of `dateutil.makedate()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50752
diff
changeset
|
35 procutil, |
20e2a20674dc
convert: drop a duplicate implementation of `dateutil.makedate()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50752
diff
changeset
|
36 ) |
5127
39b6eaee6fd7
convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents:
5121
diff
changeset
|
37 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
38 if typing.TYPE_CHECKING: |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
39 from typing import ( |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
40 overload, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
41 ) |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
42 from mercurial import ( |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
43 ui as uimod, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
44 ) |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
45 |
15606
2ad4e9b44d8b
convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents:
14271
diff
changeset
|
46 propertycache = util.propertycache |
2ad4e9b44d8b
convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents:
14271
diff
changeset
|
47 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
48 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
49 if typing.TYPE_CHECKING: |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
50 |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
51 @overload |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
52 def _encodeornone(d: str) -> bytes: |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
53 pass |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
54 |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
55 @overload |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
56 def _encodeornone(d: None) -> None: |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
57 pass |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
58 |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
59 |
36557
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
60 def _encodeornone(d): |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
61 if d is None: |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
62 return |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
63 return d.encode('latin1') |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
64 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
65 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48941
diff
changeset
|
66 class _shlexpy3proxy: |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
67 def __init__(self, l: shlex.shlex) -> None: |
36557
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
68 self._l = l |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
69 |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
70 def __iter__(self): |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
71 return (_encodeornone(v) for v in self._l) |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
72 |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
73 def get_token(self): |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
74 return _encodeornone(self._l.get_token()) |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
75 |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
76 @property |
51686
39033e7a6e0a
convert: stringify `shlex` class argument
Matt Harbison <matt_harbison@yahoo.com>
parents:
51685
diff
changeset
|
77 def infile(self) -> bytes: |
39033e7a6e0a
convert: stringify `shlex` class argument
Matt Harbison <matt_harbison@yahoo.com>
parents:
51685
diff
changeset
|
78 if self._l.infile is not None: |
39033e7a6e0a
convert: stringify `shlex` class argument
Matt Harbison <matt_harbison@yahoo.com>
parents:
51685
diff
changeset
|
79 return encoding.strtolocal(self._l.infile) |
39033e7a6e0a
convert: stringify `shlex` class argument
Matt Harbison <matt_harbison@yahoo.com>
parents:
51685
diff
changeset
|
80 return b'<unknown>' |
36557
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
81 |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
82 @property |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
83 def lineno(self) -> int: |
36557
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
84 return self._l.lineno |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
85 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
86 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
87 def shlexer( |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
88 data=None, |
51686
39033e7a6e0a
convert: stringify `shlex` class argument
Matt Harbison <matt_harbison@yahoo.com>
parents:
51685
diff
changeset
|
89 filepath: Optional[bytes] = None, |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
90 wordchars: Optional[bytes] = None, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
91 whitespace: Optional[bytes] = None, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
92 ): |
36557
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
93 if data is None: |
49288
ef5f5f1cbd90
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
94 data = open(filepath, b'r', encoding='latin1') |
36557
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
95 else: |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
96 if filepath is not None: |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
97 raise error.ProgrammingError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
98 b'shlexer only accepts data or filepath, not both' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
99 ) |
49288
ef5f5f1cbd90
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
100 data = data.decode('latin1') |
51686
39033e7a6e0a
convert: stringify `shlex` class argument
Matt Harbison <matt_harbison@yahoo.com>
parents:
51685
diff
changeset
|
101 infile = encoding.strfromlocal(filepath) if filepath is not None else None |
39033e7a6e0a
convert: stringify `shlex` class argument
Matt Harbison <matt_harbison@yahoo.com>
parents:
51685
diff
changeset
|
102 l = shlex.shlex(data, infile=infile, posix=True) |
36557
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
103 if whitespace is not None: |
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
104 l.whitespace_split = True |
49288
ef5f5f1cbd90
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
105 l.whitespace += whitespace.decode('latin1') |
36557
d60430dc7853
convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents:
36457
diff
changeset
|
106 if wordchars is not None: |
49288
ef5f5f1cbd90
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
107 l.wordchars += wordchars.decode('latin1') |
ef5f5f1cbd90
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
108 return _shlexpy3proxy(l) |
44967
de7bdb0e2a95
py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents:
44964
diff
changeset
|
109 |
de7bdb0e2a95
py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents:
44964
diff
changeset
|
110 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
111 def encodeargs(args: Any) -> bytes: |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
112 def encodearg(s: bytes) -> bytes: |
49288
ef5f5f1cbd90
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
113 lines = base64.encodebytes(s) |
44964
d96d8bbbedb1
py3: fix bytes iteration
Manuel Jacob <me@manueljacob.de>
parents:
43506
diff
changeset
|
114 lines = [l.splitlines()[0] for l in pycompat.iterbytestr(lines)] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
115 return b''.join(lines) |
5143
d4fa6bafc43a
Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5127
diff
changeset
|
116 |
5127
39b6eaee6fd7
convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents:
5121
diff
changeset
|
117 s = pickle.dumps(args) |
39b6eaee6fd7
convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents:
5121
diff
changeset
|
118 return encodearg(s) |
39b6eaee6fd7
convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents:
5121
diff
changeset
|
119 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
120 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
121 def decodeargs(s: bytes) -> Any: |
49288
ef5f5f1cbd90
py3: constant-fold some `pycompat.ispy3`
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
122 s = base64.decodebytes(s) |
5127
39b6eaee6fd7
convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents:
5121
diff
changeset
|
123 return pickle.loads(s) |
4513
ac2fe196ac9b
Turns convert.py into a real extension
Edouard Gomez <ed.gomez@free.fr>
parents:
4512
diff
changeset
|
124 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
125 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
126 class MissingTool(Exception): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
127 pass |
6332
950e72fc7cf3
convert: allow missing tools not to stop source type detection
Patrick Mezard <pmezard@gmail.com>
parents:
6049
diff
changeset
|
128 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
129 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
130 def checktool( |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
131 exe: bytes, name: Optional[bytes] = None, abort: bool = True |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
132 ) -> None: |
5497
f0a3918abd42
convert: fail if an external required tool is not found
Patrick Mezard <pmezard@gmail.com>
parents:
5441
diff
changeset
|
133 name = name or exe |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36607
diff
changeset
|
134 if not procutil.findexe(exe): |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22411
diff
changeset
|
135 if abort: |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26035
diff
changeset
|
136 exc = error.Abort |
24306
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22411
diff
changeset
|
137 else: |
6ddc86eedc3b
style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
22411
diff
changeset
|
138 exc = MissingTool |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
139 raise exc(_(b'cannot find required "%s" tool') % name) |
5497
f0a3918abd42
convert: fail if an external required tool is not found
Patrick Mezard <pmezard@gmail.com>
parents:
5441
diff
changeset
|
140 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
141 |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
142 class NoRepo(Exception): |
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
143 pass |
3938
0fab73b3f453
convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents:
3917
diff
changeset
|
144 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
145 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
146 SKIPREV: bytes = b'SKIP' |
5374
e710874247d1
convert: allow the converter_source to say "skip this revision"
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5373
diff
changeset
|
147 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
148 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48941
diff
changeset
|
149 class commit: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
150 def __init__( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
151 self, |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
152 author: bytes, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
153 date: bytes, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
154 desc: bytes, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
155 parents, |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
156 branch: Optional[bytes] = None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
157 rev=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
158 extra=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
159 sortkey=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
160 saverev=True, |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
161 phase: int = phases.draft, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
162 optparents=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
163 ctx=None, |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
164 ) -> None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
165 self.author = author or b'unknown' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
166 self.date = date or b'0 0' |
5024
7963438881f5
convert: empty log messages are OK as of 7f5c3fb0a37d
Bryan O'Sullivan <bos@serpentine.com>
parents:
5012
diff
changeset
|
167 self.desc = desc |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
168 self.parents = parents # will be converted and used as parents |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
169 self.optparents = optparents or [] # will be used if already converted |
5012
be25decfdb13
convert: make commit constructor clearer and less magical
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
170 self.branch = branch |
be25decfdb13
convert: make commit constructor clearer and less magical
Bryan O'Sullivan <bos@serpentine.com>
parents:
5011
diff
changeset
|
171 self.rev = rev |
30659
1404146157d9
convert: don't use {} as default argument value
Gregory Szorc <gregory.szorc@gmail.com>
parents:
30400
diff
changeset
|
172 self.extra = extra or {} |
8690
c5b4f662109f
convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents:
8656
diff
changeset
|
173 self.sortkey = sortkey |
25570
7cc1d33f0ba6
convert: always track the hg source revision in the internal commit object
Matt Harbison <matt_harbison@yahoo.com>
parents:
24395
diff
changeset
|
174 self.saverev = saverev |
25571
1abfe639a70c
convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents:
25570
diff
changeset
|
175 self.phase = phase |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
176 self.ctx = ctx # for hg to hg conversions |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
177 |
3954
9af4b853ed4d
convert-repo: add CVS branch support
Matt Mackall <mpm@selenic.com>
parents:
3953
diff
changeset
|
178 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48941
diff
changeset
|
179 class converter_source: |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
180 """Conversion source interface""" |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
181 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
182 def __init__( |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
183 self, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
184 ui: "uimod.ui", |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
185 repotype: bytes, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
186 path: Optional[bytes] = None, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
187 revs=None, |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
188 ) -> None: |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
189 """Initialize conversion source (or raise NoRepo("message") |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
190 exception if path is not a valid repository)""" |
4810
c2d529f288a1
convert: move some code into common init function
Brendan Cully <brendan@kublai.com>
parents:
4807
diff
changeset
|
191 self.ui = ui |
c2d529f288a1
convert: move some code into common init function
Brendan Cully <brendan@kublai.com>
parents:
4807
diff
changeset
|
192 self.path = path |
25748
baea47cafe75
convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents:
25660
diff
changeset
|
193 self.revs = revs |
35176
671aba341d90
convert: save an indicator of the repo type for sources and sinks
Matt Harbison <matt_harbison@yahoo.com>
parents:
34369
diff
changeset
|
194 self.repotype = repotype |
4810
c2d529f288a1
convert: move some code into common init function
Brendan Cully <brendan@kublai.com>
parents:
4807
diff
changeset
|
195 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
196 self.encoding = b'utf-8' |
4812
a5209b0487e0
convert: export revmap to source.
Brendan Cully <brendan@kublai.com>
parents:
4810
diff
changeset
|
197 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
198 def checkhexformat( |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
199 self, revstr: bytes, mapname: bytes = b'splicemap' |
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
200 ) -> None: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44967
diff
changeset
|
201 """fails if revstr is not a 40 byte hex. mercurial and git both uses |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44967
diff
changeset
|
202 such format for their revision numbering |
19120
58e782f076e7
splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents:
19119
diff
changeset
|
203 """ |
37582
39ced3ef586d
py3: add b'' prefix to make the regex bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37463
diff
changeset
|
204 if not re.match(br'[0-9a-fA-F]{40,40}$', revstr): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
205 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43105
diff
changeset
|
206 _(b'%s entry %s is not a valid revision identifier') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
207 % (mapname, revstr) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
208 ) |
19120
58e782f076e7
splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents:
19119
diff
changeset
|
209 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
210 def before(self) -> None: |
5356
f0931c0240b4
convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents:
5287
diff
changeset
|
211 pass |
f0931c0240b4
convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents:
5287
diff
changeset
|
212 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
213 def after(self) -> None: |
5356
f0931c0240b4
convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents:
5287
diff
changeset
|
214 pass |
f0931c0240b4
convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents:
5287
diff
changeset
|
215 |
26035
86598f4fe1cf
convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
216 def targetfilebelongstosource(self, targetfilename): |
86598f4fe1cf
convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
217 """Returns true if the given targetfile belongs to the source repo. This |
86598f4fe1cf
convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
218 is useful when only a subdirectory of the target belongs to the source |
86598f4fe1cf
convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
219 repo.""" |
86598f4fe1cf
convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
220 # For normal full repo converts, this is always True. |
86598f4fe1cf
convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
221 return True |
86598f4fe1cf
convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents:
25748
diff
changeset
|
222 |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
223 def setrevmap(self, revmap): |
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
224 """set the map of already-converted revisions""" |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
225 |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
226 def getheads(self): |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
227 """Return a list of this repository's heads""" |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16265
diff
changeset
|
228 raise NotImplementedError |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
229 |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
230 def getfile(self, name, rev): |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
231 """Return a pair (data, mode) where data is the file content |
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
232 as a string and mode one of '', 'x' or 'l'. rev is the |
22296
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
21635
diff
changeset
|
233 identifier returned by a previous call to getchanges(). |
650b5b6e75ed
convert: use None value for missing files instead of overloading IOError
Mads Kiilerich <madski@unity3d.com>
parents:
21635
diff
changeset
|
234 Data is None if file is missing/deleted in rev. |
7055
0f4564b4cc2c
convert: improve convert_source documentation
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
235 """ |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16265
diff
changeset
|
236 raise NotImplementedError |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
237 |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
238 def getchanges(self, version, full): |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
239 """Returns a tuple of (files, copies, cleanp2). |
7055
0f4564b4cc2c
convert: improve convert_source documentation
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
240 |
0f4564b4cc2c
convert: improve convert_source documentation
Patrick Mezard <pmezard@gmail.com>
parents:
6956
diff
changeset
|
241 files is a sorted list of (filename, id) tuples for all files |
8444
057e96fe2955
convert: improve docstrings, comments.
Greg Ward <greg-hg@gerg.ca>
parents:
8250
diff
changeset
|
242 changed between version and its first parent returned by |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
243 getcommit(). If full, all files in that revision is returned. |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
244 id is the source revision id of the file. |
4516
96d8a56d4ef9
Removed trailing whitespace and tabs from python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4515
diff
changeset
|
245 |
5121
ef338e34a906
convert: look up copies in getchanges instead of getcommit
Brendan Cully <brendan@kublai.com>
parents:
5112
diff
changeset
|
246 copies is a dictionary of dest: source |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
247 |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
248 cleanp2 is the set of files filenames that are clean against p2. |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
249 (Files that are clean against p1 are already not in files (unless |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
250 full). This makes it possible to handle p2 clean files similarly.) |
5121
ef338e34a906
convert: look up copies in getchanges instead of getcommit
Brendan Cully <brendan@kublai.com>
parents:
5112
diff
changeset
|
251 """ |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16265
diff
changeset
|
252 raise NotImplementedError |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
253 |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
254 def getcommit(self, version): |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
255 """Return the commit object for version""" |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16265
diff
changeset
|
256 raise NotImplementedError |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
257 |
22411
c497e39d81a3
convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents:
22300
diff
changeset
|
258 def numcommits(self): |
c497e39d81a3
convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents:
22300
diff
changeset
|
259 """Return the number of commits in this source. |
c497e39d81a3
convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents:
22300
diff
changeset
|
260 |
c497e39d81a3
convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents:
22300
diff
changeset
|
261 If unknown, return None. |
c497e39d81a3
convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents:
22300
diff
changeset
|
262 """ |
c497e39d81a3
convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents:
22300
diff
changeset
|
263 return None |
c497e39d81a3
convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents:
22300
diff
changeset
|
264 |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
265 def gettags(self): |
8887
0332f8b44e54
convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
266 """Return the tags as a dictionary of name: revision |
0332f8b44e54
convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
267 |
0332f8b44e54
convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
268 Tag names must be UTF-8 strings. |
0332f8b44e54
convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
269 """ |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16265
diff
changeset
|
270 raise NotImplementedError |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
271 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
272 def recode(self, s: AnyStr, encoding: Optional[bytes] = None) -> bytes: |
4759
20ec5cc02f18
convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents:
4590
diff
changeset
|
273 if not encoding: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
274 encoding = self.encoding or b'utf-8' |
4957
cdd33a048289
removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4873
diff
changeset
|
275 |
48934
06de08b36c82
py3: use str instead of pycompat.unicode
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
276 if isinstance(s, str): |
5287
c6f932d3e0f6
Don't decode unicode strings.
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5173
diff
changeset
|
277 return s.encode("utf-8") |
4759
20ec5cc02f18
convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents:
4590
diff
changeset
|
278 try: |
37622
bfdd20d22a86
py3: make sure decode() first argument is str
Pulkit Goyal <7895pulkit@gmail.com>
parents:
37582
diff
changeset
|
279 return s.decode(pycompat.sysstr(encoding)).encode("utf-8") |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16687
diff
changeset
|
280 except UnicodeError: |
4759
20ec5cc02f18
convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents:
4590
diff
changeset
|
281 try: |
20ec5cc02f18
convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents:
4590
diff
changeset
|
282 return s.decode("latin-1").encode("utf-8") |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16687
diff
changeset
|
283 except UnicodeError: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
284 return s.decode(pycompat.sysstr(encoding), "replace").encode( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
285 "utf-8" |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
286 ) |
4759
20ec5cc02f18
convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents:
4590
diff
changeset
|
287 |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
288 def getchangedfiles(self, rev, i): |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
289 """Return the files changed by rev compared to parent[i]. |
5760
0145f9afb0e7
Removed tabs and trailing whitespace in python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5556
diff
changeset
|
290 |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
291 i is an index selecting one of the parents of rev. The return |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
292 value should be the list of files that are different in rev and |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
293 this parent. |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
294 |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
295 If rev has no parents, i is None. |
5760
0145f9afb0e7
Removed tabs and trailing whitespace in python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5556
diff
changeset
|
296 |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
297 This function is only needed to support --filemap |
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
298 """ |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16265
diff
changeset
|
299 raise NotImplementedError |
5377
756a43a30e34
convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5374
diff
changeset
|
300 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
301 def converted(self, rev, sinkrev) -> None: |
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5529
diff
changeset
|
302 '''Notify the source that a revision has been converted.''' |
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5529
diff
changeset
|
303 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
304 def hasnativeorder(self) -> bool: |
8691
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
305 """Return true if this source has a meaningful, native revision |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
306 order. For instance, Mercurial revisions are store sequentially |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
307 while there is no such global ordering with Darcs. |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
308 """ |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
309 return False |
a0a541d6fed6
convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents:
8690
diff
changeset
|
310 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
311 def hasnativeclose(self) -> bool: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44967
diff
changeset
|
312 """Return true if this source has ability to close branch.""" |
18819
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
17974
diff
changeset
|
313 return False |
05acdf8e1f23
convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents:
17974
diff
changeset
|
314 |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
315 def lookuprev(self, rev): |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
316 """If rev is a meaningful revision reference in source, return |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
317 the referenced identifier in the same format used by getcommit(). |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
318 return None otherwise. |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
319 """ |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
320 return None |
5554
2147a734dcf9
convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents:
5529
diff
changeset
|
321 |
13744
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
322 def getbookmarks(self): |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
323 """Return the bookmarks as a dictionary of name: revision |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
324 |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
325 Bookmark names are to be UTF-8 strings. |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
326 """ |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
327 return {} |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
328 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
329 def checkrevformat(self, revstr, mapname: bytes = b'splicemap') -> bool: |
19120
58e782f076e7
splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents:
19119
diff
changeset
|
330 """revstr is a string that describes a revision in the given |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44967
diff
changeset
|
331 source control system. Return true if revstr has correct |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
44967
diff
changeset
|
332 format. |
19120
58e782f076e7
splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents:
19119
diff
changeset
|
333 """ |
58e782f076e7
splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents:
19119
diff
changeset
|
334 return True |
58e782f076e7
splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents:
19119
diff
changeset
|
335 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
336 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48941
diff
changeset
|
337 class converter_sink: |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
338 """Conversion sink (target) interface""" |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
339 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
340 def __init__(self, ui: "uimod.ui", repotype: bytes, path: bytes) -> None: |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
341 """Initialize conversion sink (or raise NoRepo("message") |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
342 exception if path is not a valid repository) |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
343 |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
344 created is a list of paths to remove if a fatal error occurs |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
345 later""" |
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
346 self.ui = ui |
5440
b4ae8535f834
convert: add default constructor for converter_sink
Bryan O'Sullivan <bos@serpentine.com>
parents:
5439
diff
changeset
|
347 self.path = path |
5441
71e7c86adcb7
convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents:
5440
diff
changeset
|
348 self.created = [] |
35176
671aba341d90
convert: save an indicator of the repo type for sources and sinks
Matt Harbison <matt_harbison@yahoo.com>
parents:
34369
diff
changeset
|
349 self.repotype = repotype |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
350 |
5011
89fbb0a5e8e3
convert: rename mapfile to revmapfile, so we can map more than just revs
Bryan O'Sullivan <bos@serpentine.com>
parents:
4957
diff
changeset
|
351 def revmapfile(self): |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
352 """Path to a file that will contain lines |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
353 source_rev_id sink_rev_id |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
354 mapping equivalent revision identifiers for each system.""" |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16265
diff
changeset
|
355 raise NotImplementedError |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
356 |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
357 def authorfile(self): |
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
358 """Path to a file that will contain lines |
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
359 srcauthor=dstauthor |
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
360 mapping equivalent authors identifiers for each system.""" |
4590
80fb4ec512b5
convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents:
4589
diff
changeset
|
361 return None |
4589
451e91ed535e
convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents:
4536
diff
changeset
|
362 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
363 def putcommit( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
364 self, files, copies, parents, commit, source, revmap, full, cleanp2 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
365 ): |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
366 """Create a revision with all changed files listed in 'files' |
8693
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
367 and having listed parents. 'commit' is a commit object |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
368 containing at a minimum the author, date, and message for this |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
369 changeset. 'files' is a list of (path, version) tuples, |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
370 'copies' is a dictionary mapping destinations to sources, |
68e0a55eee6e
convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents:
8691
diff
changeset
|
371 'source' is the source repository, and 'revmap' is a mapfile |
11134
33010ff1fd6f
convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents:
10282
diff
changeset
|
372 of source revisions to converted revisions. Only getfile() and |
22300
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
373 lookuprev() should be called on 'source'. 'full' means that 'files' |
35ab037de989
convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents:
22296
diff
changeset
|
374 is complete and all other files should be removed. |
24395
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
375 'cleanp2' is a set of the filenames that are unchanged from p2 |
216fa1ba9993
convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents:
24306
diff
changeset
|
376 (only in the common merge case where there two parents). |
6716
c9b8d2565b92
convert: reintegrate file retrieval code in sinks
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
377 |
c9b8d2565b92
convert: reintegrate file retrieval code in sinks
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
378 Note that the sink repository is not told to update itself to |
c9b8d2565b92
convert: reintegrate file retrieval code in sinks
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
379 a particular revision (or even what that revision would be) |
c9b8d2565b92
convert: reintegrate file retrieval code in sinks
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
380 before it receives the file data. |
c9b8d2565b92
convert: reintegrate file retrieval code in sinks
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
381 """ |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16265
diff
changeset
|
382 raise NotImplementedError |
4447
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
383 |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
384 def puttags(self, tags): |
1b75e0eff532
document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents:
4114
diff
changeset
|
385 """Put tags into sink. |
8887
0332f8b44e54
convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
386 |
0332f8b44e54
convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
387 tags: {tagname: sink_rev_id, ...} where tagname is an UTF-8 string. |
9431
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8970
diff
changeset
|
388 Return a pair (tag_revision, tag_parent_revision), or (None, None) |
d1b135f2f415
convert: fix history topology when using hg.tagsbranch
Patrick Mezard <pmezard@gmail.com>
parents:
8970
diff
changeset
|
389 if nothing was changed. |
8887
0332f8b44e54
convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents:
8693
diff
changeset
|
390 """ |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16265
diff
changeset
|
391 raise NotImplementedError |
5127
39b6eaee6fd7
convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents:
5121
diff
changeset
|
392 |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5441
diff
changeset
|
393 def setbranch(self, branch, pbranches): |
6716
c9b8d2565b92
convert: reintegrate file retrieval code in sinks
Patrick Mezard <pmezard@gmail.com>
parents:
6332
diff
changeset
|
394 """Set the current branch name. Called before the first putcommit |
5173
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
395 on the branch. |
6b4c332f241b
convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents:
5143
diff
changeset
|
396 branch: branch name for subsequent commits |
5934
e495f3f35b2d
convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents:
5441
diff
changeset
|
397 pbranches: (converted parent revision, parent branch) tuples""" |
5378
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
398 |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
399 def setfilemapmode(self, active): |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
400 """Tell the destination that we're using a filemap |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
401 |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
402 Some converter_sources (svn in particular) can claim that a file |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
403 was changed in a revision, even if there was no change. This method |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
404 tells the destination that we're using a filemap and that it should |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
405 filter empty revisions. |
8a2915f57dfc
convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
5377
diff
changeset
|
406 """ |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
407 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
408 def before(self) -> None: |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
409 pass |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
410 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
411 def after(self) -> None: |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
412 pass |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
413 |
13744
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
414 def putbookmarks(self, bookmarks): |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
415 """Put bookmarks into sink. |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
416 |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
417 bookmarks: {bookmarkname: sink_rev_id, ...} |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
418 where bookmarkname is an UTF-8 string. |
7e525d2f9a75
convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents:
11134
diff
changeset
|
419 """ |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
420 |
21635
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
421 def hascommitfrommap(self, rev): |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
422 """Return False if a rev mentioned in a filemap is known to not be |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
423 present.""" |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
424 raise NotImplementedError |
5f2cc464e502
convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents:
21634
diff
changeset
|
425 |
21634
23b24d6a70c8
convert: rename sink hascommit to hascommitforsplicemap
Mads Kiilerich <madski@unity3d.com>
parents:
21076
diff
changeset
|
426 def hascommitforsplicemap(self, rev): |
23b24d6a70c8
convert: rename sink hascommit to hascommitforsplicemap
Mads Kiilerich <madski@unity3d.com>
parents:
21076
diff
changeset
|
427 """This method is for the special needs for splicemap handling and not |
23b24d6a70c8
convert: rename sink hascommit to hascommitforsplicemap
Mads Kiilerich <madski@unity3d.com>
parents:
21076
diff
changeset
|
428 for general use. Returns True if the sink contains rev, aborts on some |
23b24d6a70c8
convert: rename sink hascommit to hascommitforsplicemap
Mads Kiilerich <madski@unity3d.com>
parents:
21076
diff
changeset
|
429 special cases.""" |
16687
e34106fa0dc3
cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents:
16265
diff
changeset
|
430 raise NotImplementedError |
16106
d75aa756149b
convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents:
16105
diff
changeset
|
431 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
432 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48941
diff
changeset
|
433 class commandline: |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
434 def __init__(self, ui: "uimod.ui", command: bytes) -> None: |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
435 self.ui = ui |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
436 self.command = command |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
437 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
438 def prerun(self) -> None: |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
439 pass |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
440 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
441 def postrun(self) -> None: |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
442 pass |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
443 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
444 def _cmdline(self, cmd: bytes, *args: bytes, **kwargs) -> bytes: |
36329
93943eef696f
py3: use pycompat.byteskwargs in hgext/convert/
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36148
diff
changeset
|
445 kwargs = pycompat.byteskwargs(kwargs) |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
446 cmdline = [self.command, cmd] + list(args) |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
447 for k, v in kwargs.items(): |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
448 if len(k) == 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
449 cmdline.append(b'-' + k) |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
450 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
451 cmdline.append(b'--' + k.replace(b'_', b'-')) |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
452 try: |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
453 if len(k) == 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
454 cmdline.append(b'' + v) |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
455 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
456 cmdline[-1] += b'=' + v |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
457 except TypeError: |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
458 pass |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36607
diff
changeset
|
459 cmdline = [procutil.shellquote(arg) for arg in cmdline] |
7611
dafcc96c1285
convert: display child command output if --debug (fix 878466138b57)
Patrick Mezard <pmezard@gmail.com>
parents:
7610
diff
changeset
|
460 if not self.ui.debugflag: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
461 cmdline += [b'2>', pycompat.bytestr(os.devnull)] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
462 cmdline = b' '.join(cmdline) |
5832
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
463 return cmdline |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
464 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
465 def _run(self, cmd: bytes, *args: bytes, **kwargs): |
17413
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
466 def popen(cmdline): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
467 p = subprocess.Popen( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
468 procutil.tonativestr(cmdline), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
469 shell=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
470 bufsize=-1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
471 close_fds=procutil.closefds, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
472 stdout=subprocess.PIPE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
473 ) |
17413
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
474 return p |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
475 |
17413
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
476 return self._dorun(popen, cmd, *args, **kwargs) |
13759
49b818fd26d8
convert: add support to common commandline to access stdin of the process
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13744
diff
changeset
|
477 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
478 def _run2(self, cmd: bytes, *args: bytes, **kwargs): |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36607
diff
changeset
|
479 return self._dorun(procutil.popen2, cmd, *args, **kwargs) |
13759
49b818fd26d8
convert: add support to common commandline to access stdin of the process
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13744
diff
changeset
|
480 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
481 def _run3(self, cmd: bytes, *args: bytes, **kwargs): |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
36607
diff
changeset
|
482 return self._dorun(procutil.popen3, cmd, *args, **kwargs) |
28662
80cac1de6aea
convert: rewrite gitpipe to use common.commandline (SEC)
Mateusz Kwapich <mitrandir@fb.com>
parents:
26587
diff
changeset
|
483 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
484 def _dorun(self, openfunc, cmd: bytes, *args: bytes, **kwargs): |
17413
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
485 cmdline = self._cmdline(cmd, *args, **kwargs) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
486 self.ui.debug(b'running: %s\n' % (cmdline,)) |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
487 self.prerun() |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
488 try: |
13759
49b818fd26d8
convert: add support to common commandline to access stdin of the process
Daniel Atallah <daniel.atallah@gmail.com>
parents:
13744
diff
changeset
|
489 return openfunc(cmdline) |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
490 finally: |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
491 self.postrun() |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
492 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
493 def run(self, cmd: bytes, *args: bytes, **kwargs): |
17413
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
494 p = self._run(cmd, *args, **kwargs) |
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
495 output = p.communicate()[0] |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
496 self.ui.debug(output) |
17413
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
497 return output, p.returncode |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
498 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
499 def runlines(self, cmd: bytes, *args: bytes, **kwargs): |
17413
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
500 p = self._run(cmd, *args, **kwargs) |
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
501 output = p.stdout.readlines() |
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
502 p.wait() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
503 self.ui.debug(b''.join(output)) |
17413
97f1f22c2dba
convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents:
17412
diff
changeset
|
504 return output, p.returncode |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6001
diff
changeset
|
505 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
506 def checkexit(self, status, output: bytes = b'') -> None: |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
507 if status: |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
508 if output: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
509 self.ui.warn(_(b'%s error:\n') % self.command) |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
510 self.ui.warn(output) |
37463
bbd240f81ac5
procutil: make explainexit() simply return a message (API)
Yuya Nishihara <yuya@tcha.org>
parents:
37120
diff
changeset
|
511 msg = procutil.explainexit(status) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
512 raise error.Abort(b'%s %s' % (self.command, msg)) |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
513 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
514 def run0(self, cmd: bytes, *args: bytes, **kwargs): |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
515 output, status = self.run(cmd, *args, **kwargs) |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
516 self.checkexit(status, output) |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
517 return output |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
518 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
519 def runlines0(self, cmd: bytes, *args: bytes, **kwargs): |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6001
diff
changeset
|
520 output, status = self.runlines(cmd, *args, **kwargs) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
521 self.checkexit(status, b''.join(output)) |
6035
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6001
diff
changeset
|
522 return output |
df659eb23360
convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents:
6001
diff
changeset
|
523 |
15606
2ad4e9b44d8b
convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents:
14271
diff
changeset
|
524 @propertycache |
2ad4e9b44d8b
convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents:
14271
diff
changeset
|
525 def argmax(self): |
5832
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
526 # POSIX requires at least 4096 bytes for ARG_MAX |
15606
2ad4e9b44d8b
convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents:
14271
diff
changeset
|
527 argmax = 4096 |
5832
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
528 try: |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
529 argmax = os.sysconf("SC_ARG_MAX") |
16688
cfb6682961b8
cleanup: replace naked excepts with more specific ones
Brodie Rao <brodie@sf.io>
parents:
16687
diff
changeset
|
530 except (AttributeError, ValueError): |
5832
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
531 pass |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
532 |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
533 # Windows shells impose their own limits on command line length, |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
534 # down to 2047 bytes for cmd.exe under Windows NT/2k and 2500 bytes |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
535 # for older 4nt.exe. See http://support.microsoft.com/kb/830473 for |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
536 # details about cmd.exe limitations. |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
537 |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
538 # Since ARG_MAX is for command line _and_ environment, lower our limit |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
539 # (and make happy Windows shells while doing this). |
15791
a814f8fcc65a
Use explicit integer division
Martin Geisler <mg@aragost.com>
parents:
15611
diff
changeset
|
540 return argmax // 2 - 1 |
5832
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
541 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
542 def _limit_arglist(self, arglist, cmd: bytes, *args: bytes, **kwargs): |
17412
e169b11fa1e0
convert: make commandline.limit_arglist private, simplify
Patrick Mezard <patrick@mezard.eu>
parents:
17391
diff
changeset
|
543 cmdlen = len(self._cmdline(cmd, *args, **kwargs)) |
15606
2ad4e9b44d8b
convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents:
14271
diff
changeset
|
544 limit = self.argmax - cmdlen |
36331
e218830f6f0a
convert: don't use bytes as a variable name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36329
diff
changeset
|
545 numbytes = 0 |
5832
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
546 fl = [] |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
547 for fn in arglist: |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
548 b = len(fn) + 3 |
36331
e218830f6f0a
convert: don't use bytes as a variable name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36329
diff
changeset
|
549 if numbytes + b < limit or len(fl) == 0: |
5832
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
550 fl.append(fn) |
36331
e218830f6f0a
convert: don't use bytes as a variable name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36329
diff
changeset
|
551 numbytes += b |
5832
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
552 else: |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
553 yield fl |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
554 fl = [fn] |
36331
e218830f6f0a
convert: don't use bytes as a variable name
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36329
diff
changeset
|
555 numbytes = b |
5832
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
556 if fl: |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
557 yield fl |
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
558 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
559 def xargs(self, arglist, cmd: bytes, *args: bytes, **kwargs): |
17412
e169b11fa1e0
convert: make commandline.limit_arglist private, simplify
Patrick Mezard <patrick@mezard.eu>
parents:
17391
diff
changeset
|
560 for l in self._limit_arglist(arglist, cmd, *args, **kwargs): |
5832
2192ed187319
convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents:
5760
diff
changeset
|
561 self.run0(cmd, *(list(args) + l), **kwargs) |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
562 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
563 |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
564 class mapfile(dict): |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
565 def __init__(self, ui: "uimod.ui", path: bytes) -> None: |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
566 super(mapfile, self).__init__() |
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
567 self.ui = ui |
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
568 self.path = path |
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
569 self.fp = None |
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
570 self.order = [] |
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
571 self._read() |
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
572 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
573 def _read(self) -> None: |
7774
3b8f2750efcf
Handle when the slicemap option is an empty string
Stefan Rusek <stefan@rusek.org>
parents:
7611
diff
changeset
|
574 if not self.path: |
5996
3f9ce63da18c
convert: allow synthetic history to be spliced in.
Bryan O'Sullivan <bos@serpentine.com>
parents:
5959
diff
changeset
|
575 return |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
576 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
577 fp = open(self.path, b'rb') |
49306
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
49288
diff
changeset
|
578 except FileNotFoundError: |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
579 return |
51687
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
580 |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
581 try: |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
582 for i, line in enumerate(fp): |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
583 line = line.splitlines()[0].rstrip() |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
584 if not line: |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
585 # Ignore blank lines |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
586 continue |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
587 try: |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
588 key, value = line.rsplit(b' ', 1) |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
589 except ValueError: |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
590 raise error.Abort( |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
591 _(b'syntax error in %s(%d): key/value pair expected') |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
592 % (self.path, i + 1) |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
593 ) |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
594 if key not in self: |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
595 self.order.append(key) |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
596 super(mapfile, self).__setitem__(key, value) |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
597 finally: |
1eab9e40c0c8
convert: fix various leaked file descriptors
Matt Harbison <matt_harbison@yahoo.com>
parents:
51686
diff
changeset
|
598 fp.close() |
5760
0145f9afb0e7
Removed tabs and trailing whitespace in python files
Thomas Arendsen Hein <thomas@intevation.de>
parents:
5556
diff
changeset
|
599 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
600 def __setitem__(self, key, value) -> None: |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
601 if self.fp is None: |
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
602 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
603 self.fp = open(self.path, b'ab') |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25571
diff
changeset
|
604 except IOError as err: |
34022
d5b2beca16c0
python3: wrap all uses of <exception>.strerror with strtolocal
Augie Fackler <raf@durin42.com>
parents:
30659
diff
changeset
|
605 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
606 _(b'could not open map file %r: %s') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
607 % (self.path, encoding.strtolocal(err.strerror)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
608 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
609 self.fp.write(util.tonativeeol(b'%s %s\n' % (key, value))) |
5510
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
610 self.fp.flush() |
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
611 super(mapfile, self).__setitem__(key, value) |
11d7908a3ea8
convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents:
5497
diff
changeset
|
612 |
51685
0eb515c7bec8
typing: add trivial type hints to the convert extension's common modules
Matt Harbison <matt_harbison@yahoo.com>
parents:
51684
diff
changeset
|
613 def close(self) -> None: |
5512
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
614 if self.fp: |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
615 self.fp.close() |
8cd26ccc68f8
convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents:
5510
diff
changeset
|
616 self.fp = None |
16105
ebaa0aa749e2
convert: turn splicemap into a simple dictionary
Patrick Mezard <patrick@mezard.eu>
parents:
15791
diff
changeset
|
617 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42620
diff
changeset
|
618 |
51684
20e2a20674dc
convert: drop a duplicate implementation of `dateutil.makedate()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50752
diff
changeset
|
619 def makedatetimestamp(t: float) -> dateutil.hgdate: |
20e2a20674dc
convert: drop a duplicate implementation of `dateutil.makedate()`
Matt Harbison <matt_harbison@yahoo.com>
parents:
50752
diff
changeset
|
620 return dateutil.makedate(t) |