annotate hgext/convert/common.py @ 45718:87c35b5a14eb

posix: avoid a leaked file descriptor in a unix domain socket exception case Differential Revision: https://phab.mercurial-scm.org/D9206
author Matt Harbison <matt_harbison@yahoo.com>
date Tue, 13 Oct 2020 16:44:57 -0400
parents de7bdb0e2a95
children 89a2afe31e82
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 #
1b60efdb8bc5 convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents: 8155
diff changeset
3 # Copyright 2005-2009 Matt Mackall <mpm@selenic.com> and others
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
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9542
diff changeset
6 # GNU General Public License version 2 or any later version.
28410
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
7 from __future__ import absolute_import
8250
1b60efdb8bc5 convert: add copyright and license headers to back-ends
Martin Geisler <mg@lazybytes.net>
parents: 8155
diff changeset
8
28410
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
9 import base64
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
10 import datetime
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
11 import errno
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
12 import os
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
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
16
29205
a0939666b836 py3: move up symbol imports to enforce import-checker rules
Yuya Nishihara <yuya@tcha.org>
parents: 28900
diff changeset
17 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
18 from mercurial.pycompat import open
28410
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
19 from mercurial import (
34022
d5b2beca16c0 python3: wrap all uses of <exception>.strerror with strtolocal
Augie Fackler <raf@durin42.com>
parents: 30659
diff changeset
20 encoding,
28410
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
21 error,
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
22 phases,
36329
93943eef696f py3: use pycompat.byteskwargs in hgext/convert/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36148
diff changeset
23 pycompat,
28410
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
24 util,
48b04018c897 convert: common use absolute_import
timeless <timeless@mozdev.org>
parents: 26587
diff changeset
25 )
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
26 from mercurial.utils import procutil
5127
39b6eaee6fd7 convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents: 5121
diff changeset
27
29324
b501579147f1 py3: conditionalize cPickle import by adding in util
Pulkit Goyal <7895pulkit@gmail.com>
parents: 29205
diff changeset
28 pickle = util.pickle
15606
2ad4e9b44d8b convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents: 14271
diff changeset
29 propertycache = util.propertycache
2ad4e9b44d8b convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents: 14271
diff changeset
30
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
31
36557
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
32 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
33 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
34 return
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
35 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
36
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
37
36557
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
38 class _shlexpy3proxy(object):
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
39 def __init__(self, l):
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
40 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
41
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
42 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
43 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
44
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
45 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
46 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
47
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
48 @property
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
49 def infile(self):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
50 return self._l.infile or 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
51
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
52 @property
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
53 def lineno(self):
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
54 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
55
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
56
36557
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
57 def shlexer(data=None, filepath=None, wordchars=None, whitespace=None):
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
58 if data is None:
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
59 if pycompat.ispy3:
43506
9f70512ae2cf cleanup: remove pointless r-prefixes on single-quoted strings
Augie Fackler <augie@google.com>
parents: 43503
diff changeset
60 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
61 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
62 data = open(filepath, b'r')
36557
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
63 else:
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
64 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
65 raise error.ProgrammingError(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
66 b'shlexer only accepts data or filepath, not both'
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
67 )
36557
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
68 if pycompat.ispy3:
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
69 data = data.decode('latin1')
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
70 l = shlex.shlex(data, infile=filepath, posix=True)
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
71 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
72 l.whitespace_split = True
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
73 if pycompat.ispy3:
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
74 l.whitespace += whitespace.decode('latin1')
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
75 else:
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
76 l.whitespace += whitespace
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
77 if wordchars 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
78 if pycompat.ispy3:
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
79 l.wordchars += wordchars.decode('latin1')
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
80 else:
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
81 l.wordchars += wordchars
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
82 if pycompat.ispy3:
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
83 return _shlexpy3proxy(l)
d60430dc7853 convert: add some utility code for working with shlex on Python 3
Augie Fackler <augie@google.com>
parents: 36457
diff changeset
84 return l
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
44967
de7bdb0e2a95 py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents: 44964
diff changeset
87 if pycompat.ispy3:
de7bdb0e2a95 py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents: 44964
diff changeset
88 base64_encodebytes = base64.encodebytes
de7bdb0e2a95 py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents: 44964
diff changeset
89 base64_decodebytes = base64.decodebytes
de7bdb0e2a95 py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents: 44964
diff changeset
90 else:
de7bdb0e2a95 py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents: 44964
diff changeset
91 base64_encodebytes = base64.encodestring
de7bdb0e2a95 py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents: 44964
diff changeset
92 base64_decodebytes = base64.decodestring
de7bdb0e2a95 py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents: 44964
diff changeset
93
de7bdb0e2a95 py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents: 44964
diff changeset
94
5127
39b6eaee6fd7 convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents: 5121
diff changeset
95 def encodeargs(args):
39b6eaee6fd7 convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents: 5121
diff changeset
96 def encodearg(s):
44967
de7bdb0e2a95 py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents: 44964
diff changeset
97 lines = base64_encodebytes(s)
44964
d96d8bbbedb1 py3: fix bytes iteration
Manuel Jacob <me@manueljacob.de>
parents: 43506
diff changeset
98 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
99 return b''.join(lines)
5143
d4fa6bafc43a Remove trailing spaces, fix indentation
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5127
diff changeset
100
5127
39b6eaee6fd7 convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents: 5121
diff changeset
101 s = pickle.dumps(args)
39b6eaee6fd7 convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents: 5121
diff changeset
102 return encodearg(s)
39b6eaee6fd7 convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents: 5121
diff changeset
103
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
104
5127
39b6eaee6fd7 convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents: 5121
diff changeset
105 def decodeargs(s):
44967
de7bdb0e2a95 py3: suppress DeprecationWarning about deprecated base64 module aliases
Manuel Jacob <me@manueljacob.de>
parents: 44964
diff changeset
106 s = base64_decodebytes(s)
5127
39b6eaee6fd7 convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents: 5121
diff changeset
107 return pickle.loads(s)
4513
ac2fe196ac9b Turns convert.py into a real extension
Edouard Gomez <ed.gomez@free.fr>
parents: 4512
diff changeset
108
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
109
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
110 class MissingTool(Exception):
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
111 pass
6332
950e72fc7cf3 convert: allow missing tools not to stop source type detection
Patrick Mezard <pmezard@gmail.com>
parents: 6049
diff changeset
112
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
113
6332
950e72fc7cf3 convert: allow missing tools not to stop source type detection
Patrick Mezard <pmezard@gmail.com>
parents: 6049
diff changeset
114 def checktool(exe, name=None, abort=True):
5497
f0a3918abd42 convert: fail if an external required tool is not found
Patrick Mezard <pmezard@gmail.com>
parents: 5441
diff changeset
115 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
116 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
117 if abort:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26035
diff changeset
118 exc = error.Abort
24306
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22411
diff changeset
119 else:
6ddc86eedc3b style: kill ersatz if-else ternary operators
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents: 22411
diff changeset
120 exc = MissingTool
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
121 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
122
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
123
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
124 class NoRepo(Exception):
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
125 pass
3938
0fab73b3f453 convert-repo: add some smarts
Matt Mackall <mpm@selenic.com>
parents: 3917
diff changeset
126
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
127
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
128 SKIPREV = 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
129
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
130
4448
af013ae3ca10 use documented convert-repo interface
Daniel Holth <dholth@fastmail.fm>
parents: 4447
diff changeset
131 class commit(object):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
132 def __init__(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
133 self,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
134 author,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
135 date,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
136 desc,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
137 parents,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
138 branch=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
139 rev=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
140 extra=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
141 sortkey=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
142 saverev=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
143 phase=phases.draft,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
144 optparents=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
145 ctx=None,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
146 ):
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
147 self.author = author or b'unknown'
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
148 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
149 self.desc = desc
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
150 self.parents = parents # will be converted and used as parents
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
151 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
152 self.branch = branch
be25decfdb13 convert: make commit constructor clearer and less magical
Bryan O'Sullivan <bos@serpentine.com>
parents: 5011
diff changeset
153 self.rev = rev
30659
1404146157d9 convert: don't use {} as default argument value
Gregory Szorc <gregory.szorc@gmail.com>
parents: 30400
diff changeset
154 self.extra = extra or {}
8690
c5b4f662109f convert: add --sourcesort option for source specific sort
Patrick Mezard <pmezard@gmail.com>
parents: 8656
diff changeset
155 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
156 self.saverev = saverev
25571
1abfe639a70c convert: apply the appropriate phases to the destination (issue4165)
Matt Harbison <matt_harbison@yahoo.com>
parents: 25570
diff changeset
157 self.phase = phase
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
158 self.ctx = ctx # for hg to hg conversions
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
159
3954
9af4b853ed4d convert-repo: add CVS branch support
Matt Mackall <mpm@selenic.com>
parents: 3953
diff changeset
160
4448
af013ae3ca10 use documented convert-repo interface
Daniel Holth <dholth@fastmail.fm>
parents: 4447
diff changeset
161 class converter_source(object):
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
162 """Conversion source interface"""
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
163
35176
671aba341d90 convert: save an indicator of the repo type for sources and sinks
Matt Harbison <matt_harbison@yahoo.com>
parents: 34369
diff changeset
164 def __init__(self, ui, repotype, path=None, revs=None):
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
165 """Initialize conversion source (or raise NoRepo("message")
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
166 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
167 self.ui = ui
c2d529f288a1 convert: move some code into common init function
Brendan Cully <brendan@kublai.com>
parents: 4807
diff changeset
168 self.path = path
25748
baea47cafe75 convert: add support for specifying multiple revs
Durham Goode <durham@fb.com>
parents: 25660
diff changeset
169 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
170 self.repotype = repotype
4810
c2d529f288a1 convert: move some code into common init function
Brendan Cully <brendan@kublai.com>
parents: 4807
diff changeset
171
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
172 self.encoding = b'utf-8'
4812
a5209b0487e0 convert: export revmap to source.
Brendan Cully <brendan@kublai.com>
parents: 4810
diff changeset
173
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
174 def checkhexformat(self, revstr, mapname=b'splicemap'):
19120
58e782f076e7 splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents: 19119
diff changeset
175 """ fails if revstr is not a 40 byte hex. mercurial and git both uses
58e782f076e7 splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents: 19119
diff changeset
176 such format for their revision numbering
58e782f076e7 splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents: 19119
diff changeset
177 """
37582
39ced3ef586d py3: add b'' prefix to make the regex bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents: 37463
diff changeset
178 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
179 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
180 _(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
181 % (mapname, revstr)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
182 )
19120
58e782f076e7 splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents: 19119
diff changeset
183
5356
f0931c0240b4 convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents: 5287
diff changeset
184 def before(self):
f0931c0240b4 convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents: 5287
diff changeset
185 pass
f0931c0240b4 convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents: 5287
diff changeset
186
f0931c0240b4 convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents: 5287
diff changeset
187 def after(self):
f0931c0240b4 convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents: 5287
diff changeset
188 pass
f0931c0240b4 convert: add before/after hooks for converter sources
Bryan O'Sullivan <bos@serpentine.com>
parents: 5287
diff changeset
189
26035
86598f4fe1cf convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents: 25748
diff changeset
190 def targetfilebelongstosource(self, targetfilename):
86598f4fe1cf convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents: 25748
diff changeset
191 """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
192 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
193 repo."""
86598f4fe1cf convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents: 25748
diff changeset
194 # 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
195 return True
86598f4fe1cf convert: add function to test if file is from source
Durham Goode <durham@fb.com>
parents: 25748
diff changeset
196
5510
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
197 def setrevmap(self, revmap):
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
198 """set the map of already-converted revisions"""
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
199
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
200 def getheads(self):
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
201 """Return a list of this repository's heads"""
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16265
diff changeset
202 raise NotImplementedError
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
203
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
204 def getfile(self, name, rev):
11134
33010ff1fd6f convert: merge sources getmode() into getfile()
Patrick Mezard <pmezard@gmail.com>
parents: 10282
diff changeset
205 """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
206 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
207 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
208 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
209 """
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16265
diff changeset
210 raise NotImplementedError
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
211
22300
35ab037de989 convert: introduce --full for converting all files
Mads Kiilerich <madski@unity3d.com>
parents: 22296
diff changeset
212 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
213 """Returns a tuple of (files, copies, cleanp2).
7055
0f4564b4cc2c convert: improve convert_source documentation
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
214
0f4564b4cc2c convert: improve convert_source documentation
Patrick Mezard <pmezard@gmail.com>
parents: 6956
diff changeset
215 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
216 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
217 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
218 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
219
5121
ef338e34a906 convert: look up copies in getchanges instead of getcommit
Brendan Cully <brendan@kublai.com>
parents: 5112
diff changeset
220 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
221
216fa1ba9993 convert: optimize convert of files that are unmodified from p2 in merges
Mads Kiilerich <madski@unity3d.com>
parents: 24306
diff changeset
222 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
223 (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
224 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
225 """
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16265
diff changeset
226 raise NotImplementedError
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
227
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
228 def getcommit(self, version):
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
229 """Return the commit object for version"""
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16265
diff changeset
230 raise NotImplementedError
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
231
22411
c497e39d81a3 convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents: 22300
diff changeset
232 def numcommits(self):
c497e39d81a3 convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents: 22300
diff changeset
233 """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
234
c497e39d81a3 convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents: 22300
diff changeset
235 If unknown, return None.
c497e39d81a3 convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents: 22300
diff changeset
236 """
c497e39d81a3 convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents: 22300
diff changeset
237 return None
c497e39d81a3 convert: add support for deterministic progress bar on scanning phase
Augie Fackler <raf@durin42.com>
parents: 22300
diff changeset
238
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
239 def gettags(self):
8887
0332f8b44e54 convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents: 8693
diff changeset
240 """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
241
0332f8b44e54 convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents: 8693
diff changeset
242 Tag names must be UTF-8 strings.
0332f8b44e54 convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents: 8693
diff changeset
243 """
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16265
diff changeset
244 raise NotImplementedError
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
245
4759
20ec5cc02f18 convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents: 4590
diff changeset
246 def recode(self, s, encoding=None):
20ec5cc02f18 convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents: 4590
diff changeset
247 if not encoding:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
248 encoding = self.encoding or b'utf-8'
4957
cdd33a048289 removed trailing whitespace
Thomas Arendsen Hein <thomas@intevation.de>
parents: 4873
diff changeset
249
38312
79dd61a4554f py3: replace `unicode` with pycompat.unicode
Pulkit Goyal <7895pulkit@gmail.com>
parents: 37622
diff changeset
250 if isinstance(s, pycompat.unicode):
5287
c6f932d3e0f6 Don't decode unicode strings.
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5173
diff changeset
251 return s.encode("utf-8")
4759
20ec5cc02f18 convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents: 4590
diff changeset
252 try:
37622
bfdd20d22a86 py3: make sure decode() first argument is str
Pulkit Goyal <7895pulkit@gmail.com>
parents: 37582
diff changeset
253 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
254 except UnicodeError:
4759
20ec5cc02f18 convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents: 4590
diff changeset
255 try:
20ec5cc02f18 convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents: 4590
diff changeset
256 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
257 except UnicodeError:
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
258 return s.decode(pycompat.sysstr(encoding), "replace").encode(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
259 "utf-8"
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
260 )
4759
20ec5cc02f18 convert: ove recode method into converter_source
Brendan Cully <brendan@kublai.com>
parents: 4590
diff changeset
261
5377
756a43a30e34 convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5374
diff changeset
262 def getchangedfiles(self, rev, i):
756a43a30e34 convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5374
diff changeset
263 """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
264
5377
756a43a30e34 convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5374
diff changeset
265 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
266 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
267 this parent.
756a43a30e34 convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5374
diff changeset
268
756a43a30e34 convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5374
diff changeset
269 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
270
5377
756a43a30e34 convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5374
diff changeset
271 This function is only needed to support --filemap
756a43a30e34 convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5374
diff changeset
272 """
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16265
diff changeset
273 raise NotImplementedError
5377
756a43a30e34 convert: readd --filemap
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5374
diff changeset
274
5554
2147a734dcf9 convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents: 5529
diff changeset
275 def converted(self, rev, sinkrev):
2147a734dcf9 convert: tell the source repository when a rev has been converted
Bryan O'Sullivan <bos@serpentine.com>
parents: 5529
diff changeset
276 '''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
277
8691
a0a541d6fed6 convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents: 8690
diff changeset
278 def hasnativeorder(self):
a0a541d6fed6 convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents: 8690
diff changeset
279 """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
280 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
281 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
282 """
a0a541d6fed6 convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents: 8690
diff changeset
283 return False
a0a541d6fed6 convert: fail fast if source does not support --sourcesort
Patrick Mezard <pmezard@gmail.com>
parents: 8690
diff changeset
284
18819
05acdf8e1f23 convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents: 17974
diff changeset
285 def hasnativeclose(self):
05acdf8e1f23 convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents: 17974
diff changeset
286 """Return true if this source has ability to close branch.
05acdf8e1f23 convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents: 17974
diff changeset
287 """
05acdf8e1f23 convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents: 17974
diff changeset
288 return False
05acdf8e1f23 convert: add closesort algorithm to mercurial sources
Constantine Linnick <theaspect@gmail.com>
parents: 17974
diff changeset
289
8693
68e0a55eee6e convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents: 8691
diff changeset
290 def lookuprev(self, rev):
68e0a55eee6e convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents: 8691
diff changeset
291 """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
292 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
293 return None otherwise.
68e0a55eee6e convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents: 8691
diff changeset
294 """
68e0a55eee6e convert: rewrite tags when converting from hg to hg
Patrick Mezard <pmezard@gmail.com>
parents: 8691
diff changeset
295 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
296
13744
7e525d2f9a75 convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents: 11134
diff changeset
297 def getbookmarks(self):
7e525d2f9a75 convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents: 11134
diff changeset
298 """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
299
7e525d2f9a75 convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents: 11134
diff changeset
300 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
301 """
7e525d2f9a75 convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents: 11134
diff changeset
302 return {}
7e525d2f9a75 convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents: 11134
diff changeset
303
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
304 def checkrevformat(self, revstr, mapname=b'splicemap'):
19120
58e782f076e7 splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents: 19119
diff changeset
305 """revstr is a string that describes a revision in the given
58e782f076e7 splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents: 19119
diff changeset
306 source control system. Return true if revstr has correct
58e782f076e7 splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents: 19119
diff changeset
307 format.
58e782f076e7 splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents: 19119
diff changeset
308 """
58e782f076e7 splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents: 19119
diff changeset
309 return True
58e782f076e7 splicemap: improve error handling when source is hg (issue2084)
Ben Goswami <bengoswami@fb.com>
parents: 19119
diff changeset
310
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
311
4448
af013ae3ca10 use documented convert-repo interface
Daniel Holth <dholth@fastmail.fm>
parents: 4447
diff changeset
312 class converter_sink(object):
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
313 """Conversion sink (target) interface"""
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
314
35176
671aba341d90 convert: save an indicator of the repo type for sources and sinks
Matt Harbison <matt_harbison@yahoo.com>
parents: 34369
diff changeset
315 def __init__(self, ui, repotype, path):
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
316 """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
317 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
318
71e7c86adcb7 convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents: 5440
diff changeset
319 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
320 later"""
71e7c86adcb7 convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents: 5440
diff changeset
321 self.ui = ui
5440
b4ae8535f834 convert: add default constructor for converter_sink
Bryan O'Sullivan <bos@serpentine.com>
parents: 5439
diff changeset
322 self.path = path
5441
71e7c86adcb7 convert: refactor sink initialisation, to remove hardcoding of hg
Bryan O'Sullivan <bos@serpentine.com>
parents: 5440
diff changeset
323 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
324 self.repotype = repotype
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
325
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
326 def revmapfile(self):
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
327 """Path to a file that will contain lines
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
328 source_rev_id sink_rev_id
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
329 mapping equivalent revision identifiers for each system."""
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16265
diff changeset
330 raise NotImplementedError
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
331
4589
451e91ed535e convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents: 4536
diff changeset
332 def authorfile(self):
451e91ed535e convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents: 4536
diff changeset
333 """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
334 srcauthor=dstauthor
451e91ed535e convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents: 4536
diff changeset
335 mapping equivalent authors identifiers for each system."""
4590
80fb4ec512b5 convert: fix various authormap handling bugs
Brendan Cully <brendan@kublai.com>
parents: 4589
diff changeset
336 return None
4589
451e91ed535e convert extension: Add support for username mapping
Edouard Gomez <ed.gomez@free.fr>
parents: 4536
diff changeset
337
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
338 def putcommit(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
339 self, files, copies, parents, commit, source, revmap, full, cleanp2
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
340 ):
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
341 """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
342 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
343 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
344 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
345 '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
346 '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
347 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
348 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
349 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
350 '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
351 (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
352
c9b8d2565b92 convert: reintegrate file retrieval code in sinks
Patrick Mezard <pmezard@gmail.com>
parents: 6332
diff changeset
353 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
354 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
355 before it receives the file data.
c9b8d2565b92 convert: reintegrate file retrieval code in sinks
Patrick Mezard <pmezard@gmail.com>
parents: 6332
diff changeset
356 """
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16265
diff changeset
357 raise NotImplementedError
4447
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
358
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
359 def puttags(self, tags):
1b75e0eff532 document conversion interface
Daniel Holth <dholth@fastmail.fm>
parents: 4114
diff changeset
360 """Put tags into sink.
8887
0332f8b44e54 convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents: 8693
diff changeset
361
0332f8b44e54 convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents: 8693
diff changeset
362 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
363 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
364 if nothing was changed.
8887
0332f8b44e54 convert/svn: test svn tags encoding
Patrick Mezard <pmezard@gmail.com>
parents: 8693
diff changeset
365 """
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16265
diff changeset
366 raise NotImplementedError
5127
39b6eaee6fd7 convert: replace fork with subprocess call.
Patrick Mezard <pmezard@gmail.com>
parents: 5121
diff changeset
367
5934
e495f3f35b2d convert: hg.clonebranches must pull missing parents (issue941)
Patrick Mezard <pmezard@gmail.com>
parents: 5441
diff changeset
368 def setbranch(self, branch, pbranches):
6716
c9b8d2565b92 convert: reintegrate file retrieval code in sinks
Patrick Mezard <pmezard@gmail.com>
parents: 6332
diff changeset
369 """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
370 on the branch.
6b4c332f241b convert: hg: optionally create branches as clones
Brendan Cully <brendan@kublai.com>
parents: 5143
diff changeset
371 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
372 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
373
8a2915f57dfc convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5377
diff changeset
374 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
375 """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
376
8a2915f57dfc convert: add a mode where mercurial_sink skips empty revisions.
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents: 5377
diff changeset
377 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
378 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
379 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
380 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
381 """
5510
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
382
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
383 def before(self):
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
384 pass
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
385
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
386 def after(self):
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
387 pass
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
388
13744
7e525d2f9a75 convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents: 11134
diff changeset
389 def putbookmarks(self, bookmarks):
7e525d2f9a75 convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents: 11134
diff changeset
390 """Put bookmarks into sink.
7e525d2f9a75 convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents: 11134
diff changeset
391
7e525d2f9a75 convert: add bookmark support to common sink/source implementation
Edouard Gomez <ed.gomez@free.fr>
parents: 11134
diff changeset
392 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
393 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
394 """
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
395
21635
5f2cc464e502 convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents: 21634
diff changeset
396 def hascommitfrommap(self, rev):
5f2cc464e502 convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents: 21634
diff changeset
397 """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
398 present."""
5f2cc464e502 convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents: 21634
diff changeset
399 raise NotImplementedError
5f2cc464e502 convert: introduce hascommitfrommap sink method
Mads Kiilerich <madski@unity3d.com>
parents: 21634
diff changeset
400
21634
23b24d6a70c8 convert: rename sink hascommit to hascommitforsplicemap
Mads Kiilerich <madski@unity3d.com>
parents: 21076
diff changeset
401 def hascommitforsplicemap(self, rev):
23b24d6a70c8 convert: rename sink hascommit to hascommitforsplicemap
Mads Kiilerich <madski@unity3d.com>
parents: 21076
diff changeset
402 """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
403 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
404 special cases."""
16687
e34106fa0dc3 cleanup: "raise SomeException()" -> "raise SomeException"
Brodie Rao <brodie@sf.io>
parents: 16265
diff changeset
405 raise NotImplementedError
16106
d75aa756149b convert: use splicemap entries when sorting revisions (issue1748)
Patrick Mezard <patrick@mezard.eu>
parents: 16105
diff changeset
406
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
407
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
408 class commandline(object):
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
409 def __init__(self, ui, command):
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
410 self.ui = ui
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
411 self.command = command
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
412
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
413 def prerun(self):
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
414 pass
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
415
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
416 def postrun(self):
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
417 pass
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
418
17413
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
419 def _cmdline(self, cmd, *args, **kwargs):
36329
93943eef696f py3: use pycompat.byteskwargs in hgext/convert/
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36148
diff changeset
420 kwargs = pycompat.byteskwargs(kwargs)
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
421 cmdline = [self.command, cmd] + list(args)
43105
649d3ac37a12 py3: define and use pycompat.iteritems() for hgext/
Gregory Szorc <gregory.szorc@gmail.com>
parents: 43085
diff changeset
422 for k, v in pycompat.iteritems(kwargs):
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
423 if len(k) == 1:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
424 cmdline.append(b'-' + k)
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
425 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
426 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
427 try:
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
428 if len(k) == 1:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
429 cmdline.append(b'' + v)
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
430 else:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
431 cmdline[-1] += b'=' + v
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
432 except TypeError:
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
433 pass
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36607
diff changeset
434 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
435 if not self.ui.debugflag:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
436 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
437 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
438 return cmdline
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
439
5832
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
440 def _run(self, cmd, *args, **kwargs):
17413
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
441 def popen(cmdline):
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
442 p = subprocess.Popen(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
443 procutil.tonativestr(cmdline),
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
444 shell=True,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
445 bufsize=-1,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
446 close_fds=procutil.closefds,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
447 stdout=subprocess.PIPE,
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
448 )
17413
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
449 return p
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
450
17413
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
451 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
452
49b818fd26d8 convert: add support to common commandline to access stdin of the process
Daniel Atallah <daniel.atallah@gmail.com>
parents: 13744
diff changeset
453 def _run2(self, cmd, *args, **kwargs):
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36607
diff changeset
454 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
455
28662
80cac1de6aea convert: rewrite gitpipe to use common.commandline (SEC)
Mateusz Kwapich <mitrandir@fb.com>
parents: 26587
diff changeset
456 def _run3(self, cmd, *args, **kwargs):
37120
a8a902d7176e procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents: 36607
diff changeset
457 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
458
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
459 def _dorun(self, openfunc, cmd, *args, **kwargs):
17413
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
460 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
461 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
462 self.prerun()
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
463 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
464 return openfunc(cmdline)
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
465 finally:
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
466 self.postrun()
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
467
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
468 def run(self, cmd, *args, **kwargs):
17413
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
469 p = self._run(cmd, *args, **kwargs)
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
470 output = p.communicate()[0]
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
471 self.ui.debug(output)
17413
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
472 return output, p.returncode
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
473
6035
df659eb23360 convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents: 6001
diff changeset
474 def runlines(self, cmd, *args, **kwargs):
17413
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
475 p = self._run(cmd, *args, **kwargs)
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
476 output = p.stdout.readlines()
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
477 p.wait()
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
478 self.ui.debug(b''.join(output))
17413
97f1f22c2dba convert: use subprocess for all commandline calls
Patrick Mezard <patrick@mezard.eu>
parents: 17412
diff changeset
479 return output, p.returncode
6035
df659eb23360 convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents: 6001
diff changeset
480
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
481 def checkexit(self, status, output=b''):
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
482 if status:
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
483 if output:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
484 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
485 self.ui.warn(output)
37463
bbd240f81ac5 procutil: make explainexit() simply return a message (API)
Yuya Nishihara <yuya@tcha.org>
parents: 37120
diff changeset
486 msg = procutil.explainexit(status)
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
487 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
488
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
489 def run0(self, cmd, *args, **kwargs):
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
490 output, status = self.run(cmd, *args, **kwargs)
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
491 self.checkexit(status, output)
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
492 return output
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
493
6035
df659eb23360 convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents: 6001
diff changeset
494 def runlines0(self, cmd, *args, **kwargs):
df659eb23360 convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents: 6001
diff changeset
495 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
496 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
497 return output
df659eb23360 convert: added GNU Arch source converter
Aleix Conchillo Flaque <aleix@member.fsf.org>
parents: 6001
diff changeset
498
15606
2ad4e9b44d8b convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents: 14271
diff changeset
499 @propertycache
2ad4e9b44d8b convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents: 14271
diff changeset
500 def argmax(self):
5832
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
501 # 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
502 argmax = 4096
5832
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
503 try:
43503
313e3a279828 cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents: 43117
diff changeset
504 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
505 except (AttributeError, ValueError):
5832
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
506 pass
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
507
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
508 # 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
509 # 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
510 # 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
511 # 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
512
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
513 # 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
514 # (and make happy Windows shells while doing this).
15791
a814f8fcc65a Use explicit integer division
Martin Geisler <mg@aragost.com>
parents: 15611
diff changeset
515 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
516
17412
e169b11fa1e0 convert: make commandline.limit_arglist private, simplify
Patrick Mezard <patrick@mezard.eu>
parents: 17391
diff changeset
517 def _limit_arglist(self, arglist, cmd, *args, **kwargs):
e169b11fa1e0 convert: make commandline.limit_arglist private, simplify
Patrick Mezard <patrick@mezard.eu>
parents: 17391
diff changeset
518 cmdlen = len(self._cmdline(cmd, *args, **kwargs))
15606
2ad4e9b44d8b convert: simplify getargmax() with propertycache
Patrick Mezard <pmezard@gmail.com>
parents: 14271
diff changeset
519 limit = self.argmax - cmdlen
36331
e218830f6f0a convert: don't use bytes as a variable name
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36329
diff changeset
520 numbytes = 0
5832
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
521 fl = []
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
522 for fn in arglist:
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
523 b = len(fn) + 3
36331
e218830f6f0a convert: don't use bytes as a variable name
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36329
diff changeset
524 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
525 fl.append(fn)
36331
e218830f6f0a convert: don't use bytes as a variable name
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36329
diff changeset
526 numbytes += b
5832
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
527 else:
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
528 yield fl
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
529 fl = [fn]
36331
e218830f6f0a convert: don't use bytes as a variable name
Pulkit Goyal <7895pulkit@gmail.com>
parents: 36329
diff changeset
530 numbytes = b
5832
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
531 if fl:
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
532 yield fl
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
533
2192ed187319 convert: add commandline.xargs(), use it in svn_sink class
Maxim Dounin <mdounin@mdounin.ru>
parents: 5760
diff changeset
534 def xargs(self, arglist, cmd, *args, **kwargs):
17412
e169b11fa1e0 convert: make commandline.limit_arglist private, simplify
Patrick Mezard <patrick@mezard.eu>
parents: 17391
diff changeset
535 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
536 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
537
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
538
5510
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
539 class mapfile(dict):
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
540 def __init__(self, ui, path):
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
541 super(mapfile, self).__init__()
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
542 self.ui = ui
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
543 self.path = path
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
544 self.fp = None
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
545 self.order = []
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
546 self._read()
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
547
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
548 def _read(self):
7774
3b8f2750efcf Handle when the slicemap option is an empty string
Stefan Rusek <stefan@rusek.org>
parents: 7611
diff changeset
549 if not self.path:
5996
3f9ce63da18c convert: allow synthetic history to be spliced in.
Bryan O'Sullivan <bos@serpentine.com>
parents: 5959
diff changeset
550 return
5510
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
551 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
552 fp = open(self.path, b'rb')
25660
328739ea70c3 global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents: 25571
diff changeset
553 except IOError as err:
5510
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
554 if err.errno != errno.ENOENT:
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
555 raise
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
556 return
30400
d1a0a64f6e16 convert: migrate to util.iterfile
Jun Wu <quark@fb.com>
parents: 29324
diff changeset
557 for i, line in enumerate(util.iterfile(fp)):
16190
9479c28a22bf convert: ignore blank lines in mapfiles (issue3286)
Patrick Mezard <patrick@mezard.eu>
parents: 16118
diff changeset
558 line = line.splitlines()[0].rstrip()
9479c28a22bf convert: ignore blank lines in mapfiles (issue3286)
Patrick Mezard <patrick@mezard.eu>
parents: 16118
diff changeset
559 if not line:
9479c28a22bf convert: ignore blank lines in mapfiles (issue3286)
Patrick Mezard <patrick@mezard.eu>
parents: 16118
diff changeset
560 # Ignore blank lines
9479c28a22bf convert: ignore blank lines in mapfiles (issue3286)
Patrick Mezard <patrick@mezard.eu>
parents: 16118
diff changeset
561 continue
8047
04c62275cbc7 convert: better mapfile parsing errors (issue1581/1)
Patrick Mezard <pmezard@gmail.com>
parents: 7774
diff changeset
562 try:
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
563 key, value = line.rsplit(b' ', 1)
8047
04c62275cbc7 convert: better mapfile parsing errors (issue1581/1)
Patrick Mezard <pmezard@gmail.com>
parents: 7774
diff changeset
564 except ValueError:
26587
56b2bcea2529 error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents: 26035
diff changeset
565 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
566 _(b'syntax error in %s(%d): key/value pair expected')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
567 % (self.path, i + 1)
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
568 )
5510
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
569 if key not in self:
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
570 self.order.append(key)
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
571 super(mapfile, self).__setitem__(key, value)
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
572 fp.close()
5760
0145f9afb0e7 Removed tabs and trailing whitespace in python files
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5556
diff changeset
573
5510
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
574 def __setitem__(self, key, value):
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
575 if self.fp is None:
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 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
578 except IOError as err:
34022
d5b2beca16c0 python3: wrap all uses of <exception>.strerror with strtolocal
Augie Fackler <raf@durin42.com>
parents: 30659
diff changeset
579 raise error.Abort(
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
580 _(b'could not open map file %r: %s')
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
581 % (self.path, encoding.strtolocal(err.strerror))
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
582 )
43077
687b865b95ad formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents: 43076
diff changeset
583 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
584 self.fp.flush()
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
585 super(mapfile, self).__setitem__(key, value)
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
586
11d7908a3ea8 convert: abstract map files into a class
Bryan O'Sullivan <bos@serpentine.com>
parents: 5497
diff changeset
587 def close(self):
5512
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
588 if self.fp:
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
589 self.fp.close()
8cd26ccc68f8 convert: abstract darcs's commandline handling
Bryan O'Sullivan <bos@serpentine.com>
parents: 5510
diff changeset
590 self.fp = None
16105
ebaa0aa749e2 convert: turn splicemap into a simple dictionary
Patrick Mezard <patrick@mezard.eu>
parents: 15791
diff changeset
591
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
592
17974
337d728e644f convert: add config option to use the local time zone
Julian Cowley <julian@lava.net>
parents: 17413
diff changeset
593 def makedatetimestamp(t):
36607
c6061cadb400 util: extract all date-related utils in utils/dateutil module
Boris Feld <boris.feld@octobus.net>
parents: 36557
diff changeset
594 """Like dateutil.makedate() but for time t instead of current time"""
43076
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
595 delta = datetime.datetime.utcfromtimestamp(
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
596 t
2372284d9457 formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents: 42620
diff changeset
597 ) - datetime.datetime.fromtimestamp(t)
17974
337d728e644f convert: add config option to use the local time zone
Julian Cowley <julian@lava.net>
parents: 17413
diff changeset
598 tz = delta.days * 86400 + delta.seconds
337d728e644f convert: add config option to use the local time zone
Julian Cowley <julian@lava.net>
parents: 17413
diff changeset
599 return t, tz