Mercurial > hg
annotate mercurial/filemerge.py @ 47890:3853e6ee160d
dirstatemap: replace `removefile` by an explicit `entry.set_untracked()`
All the other caller goes through `reset_state`, so we can safely have an
explicit method on `DirstateItem` object.
This means that all the logic to preserve the previous state (from p2, merged,
etc) is now properly encapsulated within the DirstateItem. This pave the way to
using different storage for these information.
Differential Revision: https://phab.mercurial-scm.org/D11315
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Fri, 20 Aug 2021 11:27:01 +0200 |
parents | d55b71393907 |
children | 053dd53a0b59 |
rev | line source |
---|---|
6003
7855b88ba838
filemerge: pull file-merging code into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 # filemerge.py - file-level merge handling for Mercurial |
7855b88ba838
filemerge: pull file-merging code into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
46496
diff
changeset
|
3 # Copyright 2006, 2007, 2008 Olivia Mackall <olivia@selenic.com> |
6003
7855b88ba838
filemerge: pull file-merging code into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
6003
7855b88ba838
filemerge: pull file-merging code into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 |
25949
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
8 from __future__ import absolute_import |
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
9 |
36998
3723b42ff953
filemerge: move temp file unlinks to _maketempfiles
Kyle Lippincott <spectral@google.com>
parents:
36988
diff
changeset
|
10 import contextlib |
25949
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
11 import os |
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
12 import re |
36999
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
13 import shutil |
25949
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
14 |
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
15 from .i18n import _ |
40478
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
16 from .node import ( |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
17 hex, |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
18 short, |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
19 ) |
43089
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
20 from .pycompat import ( |
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
21 getattr, |
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
22 open, |
c59eb1560c44
py3: manually import getattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43085
diff
changeset
|
23 ) |
25949
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
24 |
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
25 from . import ( |
30636
f1c9fafcbf46
py3: replace os.environ with encoding.environ (part 3 of 5)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30538
diff
changeset
|
26 encoding, |
25949
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
27 error, |
28955
78759f78a44e
templater: factor out function that creates templater from string template
Yuya Nishihara <yuya@tcha.org>
parents:
28954
diff
changeset
|
28 formatter, |
25949
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
29 match, |
30073
aa23c93e636d
py3: make format strings unicodes and not bytes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
29775
diff
changeset
|
30 pycompat, |
33699
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
31 registrar, |
27651
07fc2f2134ba
origpath: move from cmdutil to scmutil
Siddharth Agarwal <sid0@fb.com>
parents:
27599
diff
changeset
|
32 scmutil, |
25949
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
33 simplemerge, |
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
34 tagmerge, |
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
35 templatekw, |
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
36 templater, |
40478
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
37 templateutil, |
25949
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
38 util, |
80aba76e29c1
filemerge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25835
diff
changeset
|
39 ) |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
40 |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37077
diff
changeset
|
41 from .utils import ( |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
42 procutil, |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37077
diff
changeset
|
43 stringutil, |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37077
diff
changeset
|
44 ) |
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37077
diff
changeset
|
45 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
46 |
34826
18a3274ed675
configitems: register the full 'merge-tools' config and sub-options
Boris Feld <boris.feld@octobus.net>
parents:
34797
diff
changeset
|
47 def _toolstr(ui, tool, part, *args): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
48 return ui.config(b"merge-tools", tool + b"." + part, *args) |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
49 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
50 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
51 def _toolbool(ui, tool, part, *args): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
52 return ui.configbool(b"merge-tools", tool + b"." + part, *args) |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
53 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
54 |
34826
18a3274ed675
configitems: register the full 'merge-tools' config and sub-options
Boris Feld <boris.feld@octobus.net>
parents:
34797
diff
changeset
|
55 def _toollist(ui, tool, part): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
56 return ui.configlist(b"merge-tools", tool + b"." + part) |
11148
a912f26777d3
merge: introduce tool.check parameter
David Champion <dgc@uchicago.edu>
parents:
11146
diff
changeset
|
57 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
58 |
16126
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
59 internals = {} |
24099
be83fd9d46d5
help.merge-tools: do not double document merge tools
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23270
diff
changeset
|
60 # Merge tools to document. |
be83fd9d46d5
help.merge-tools: do not double document merge tools
Gregory Szorc <gregory.szorc@gmail.com>
parents:
23270
diff
changeset
|
61 internalsdoc = {} |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
62 |
33699
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
63 internaltool = registrar.internalmerge() |
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
64 |
26525
abc2327e382a
filemerge: add some merge types
Siddharth Agarwal <sid0@fb.com>
parents:
26519
diff
changeset
|
65 # internal tool merge types |
33699
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
66 nomerge = internaltool.nomerge |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
67 mergeonly = internaltool.mergeonly # just the full merge, no premerge |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
68 fullmerge = internaltool.fullmerge # both premerge and merge |
26525
abc2327e382a
filemerge: add some merge types
Siddharth Agarwal <sid0@fb.com>
parents:
26519
diff
changeset
|
69 |
42565
4764e8436b2a
filemerge: make last line of prompts <40 english chars (issue6158)
Kyle Lippincott <spectral@google.com>
parents:
41600
diff
changeset
|
70 # IMPORTANT: keep the last line of this prompt very short ("What do you want to |
4764e8436b2a
filemerge: make last line of prompts <40 english chars (issue6158)
Kyle Lippincott <spectral@google.com>
parents:
41600
diff
changeset
|
71 # do?") because of issue6158, ideally to <40 English characters (to allow other |
4764e8436b2a
filemerge: make last line of prompts <40 english chars (issue6158)
Kyle Lippincott <spectral@google.com>
parents:
41600
diff
changeset
|
72 # languages that may take more columns to still have a chance to fit in an |
4764e8436b2a
filemerge: make last line of prompts <40 english chars (issue6158)
Kyle Lippincott <spectral@google.com>
parents:
41600
diff
changeset
|
73 # 80-column screen). |
32317
6587427b2018
filemerge: store error messages in module variables
Stanislau Hlebik <stash@fb.com>
parents:
32255
diff
changeset
|
74 _localchangedotherdeletedmsg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
75 b"file '%(fd)s' was deleted in other%(o)s but was modified in local%(l)s.\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
76 b"You can use (c)hanged version, (d)elete, or leave (u)nresolved.\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
77 b"What do you want to do?" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
78 b"$$ &Changed $$ &Delete $$ &Unresolved" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
79 ) |
32317
6587427b2018
filemerge: store error messages in module variables
Stanislau Hlebik <stash@fb.com>
parents:
32255
diff
changeset
|
80 |
6587427b2018
filemerge: store error messages in module variables
Stanislau Hlebik <stash@fb.com>
parents:
32255
diff
changeset
|
81 _otherchangedlocaldeletedmsg = _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
82 b"file '%(fd)s' was deleted in local%(l)s but was modified in other%(o)s.\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
83 b"You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved.\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
84 b"What do you want to do?" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
85 b"$$ &Changed $$ &Deleted $$ &Unresolved" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
86 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
87 |
32317
6587427b2018
filemerge: store error messages in module variables
Stanislau Hlebik <stash@fb.com>
parents:
32255
diff
changeset
|
88 |
26979
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
89 class absentfilectx(object): |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
90 """Represents a file that's ostensibly in a context but is actually not |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
91 present in it. |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
92 |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
93 This is here because it's very specific to the filemerge code for now -- |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
94 other code is likely going to break with the values this returns.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
95 |
26979
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
96 def __init__(self, ctx, f): |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
97 self._ctx = ctx |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
98 self._f = f |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
99 |
44872
aa790f7c967a
filemerge: add __bytes__ for absentfilectx
Augie Fackler <augie@google.com>
parents:
43846
diff
changeset
|
100 def __bytes__(self): |
aa790f7c967a
filemerge: add __bytes__ for absentfilectx
Augie Fackler <augie@google.com>
parents:
43846
diff
changeset
|
101 return b'absent file %s@%s' % (self._f, self._ctx) |
aa790f7c967a
filemerge: add __bytes__ for absentfilectx
Augie Fackler <augie@google.com>
parents:
43846
diff
changeset
|
102 |
26979
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
103 def path(self): |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
104 return self._f |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
105 |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
106 def size(self): |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
107 return None |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
108 |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
109 def data(self): |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
110 return None |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
111 |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
112 def filenode(self): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
113 return self._ctx.repo().nullid |
26979
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
114 |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
115 _customcmp = True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
116 |
26979
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
117 def cmp(self, fctx): |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
118 """compare with other file context |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
119 |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
120 returns True if different from fctx. |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
121 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
122 return not ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
123 fctx.isabsent() |
43846
d5ce99a6db52
filemerge: fix a missing attribute usage
Matt Harbison <matt_harbison@yahoo.com>
parents:
43845
diff
changeset
|
124 and fctx.changectx() == self.changectx() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
125 and fctx.path() == self.path() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
126 ) |
26979
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
127 |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
128 def flags(self): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
129 return b'' |
26979
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
130 |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
131 def changectx(self): |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
132 return self._ctx |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
133 |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
134 def isbinary(self): |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
135 return False |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
136 |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
137 def isabsent(self): |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
138 return True |
7b038ec6c5fd
filemerge: introduce class whose objects represent files not in a context
Siddharth Agarwal <sid0@fb.com>
parents:
26967
diff
changeset
|
139 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
140 |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
141 def _findtool(ui, tool): |
16126
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
142 if tool in internals: |
6522
2b181fb3a70a
use internal merge tool when specified for a merge-pattern in hgrc
Dov Feldstern <dfeldstern@fastimap.com>
parents:
6212
diff
changeset
|
143 return tool |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
144 cmd = _toolstr(ui, tool, b"executable", tool) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 if cmd.startswith(b'python:'): |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
146 return cmd |
23148
b405dd6c90bf
filemerge: split the logic for finding an external tool to its own function
Matt Harbison <matt_harbison@yahoo.com>
parents:
22707
diff
changeset
|
147 return findexternaltool(ui, tool) |
b405dd6c90bf
filemerge: split the logic for finding an external tool to its own function
Matt Harbison <matt_harbison@yahoo.com>
parents:
22707
diff
changeset
|
148 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
149 |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
150 def _quotetoolpath(cmd): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
151 if cmd.startswith(b'python:'): |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
152 return cmd |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
153 return procutil.shellquote(cmd) |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
154 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
155 |
23148
b405dd6c90bf
filemerge: split the logic for finding an external tool to its own function
Matt Harbison <matt_harbison@yahoo.com>
parents:
22707
diff
changeset
|
156 def findexternaltool(ui, tool): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
157 for kn in (b"regkey", b"regkeyalt"): |
13565
984175605311
filemerge: introduce a 'regkeyalt' merge tool variable
Steve Borho <steve@borho.org>
parents:
12788
diff
changeset
|
158 k = _toolstr(ui, tool, kn) |
984175605311
filemerge: introduce a 'regkeyalt' merge tool variable
Steve Borho <steve@borho.org>
parents:
12788
diff
changeset
|
159 if not k: |
984175605311
filemerge: introduce a 'regkeyalt' merge tool variable
Steve Borho <steve@borho.org>
parents:
12788
diff
changeset
|
160 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
161 p = util.lookupreg(k, _toolstr(ui, tool, b"regname")) |
6006
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
6005
diff
changeset
|
162 if p: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
163 p = procutil.findexe(p + _toolstr(ui, tool, b"regappend", b"")) |
6006
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
6005
diff
changeset
|
164 if p: |
3c9dbb743d20
merge: add registry look up bits to tool search
Matt Mackall <mpm@selenic.com>
parents:
6005
diff
changeset
|
165 return p |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
166 exe = _toolstr(ui, tool, b"executable", tool) |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
167 return procutil.findexe(util.expandpath(exe)) |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
168 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
169 |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
170 def _picktool(repo, ui, path, binary, symlink, changedelete): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
171 strictcheck = ui.configbool(b'merge', b'strict-capability-check') |
39125
cded904f7acc
filemerge: add config knob to check capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39124
diff
changeset
|
172 |
39123
4d7b11877dd0
filemerge: add the function to examine a capability of a internal tool
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39122
diff
changeset
|
173 def hascapability(tool, capability, strict=False): |
39266
82555d7186d0
filemerge: make capability check for internal tools ignore merge-tools section
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39126
diff
changeset
|
174 if tool in internals: |
82555d7186d0
filemerge: make capability check for internal tools ignore merge-tools section
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39126
diff
changeset
|
175 return strict and internals[tool].capabilities.get(capability) |
39123
4d7b11877dd0
filemerge: add the function to examine a capability of a internal tool
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39122
diff
changeset
|
176 return _toolbool(ui, tool, capability) |
4d7b11877dd0
filemerge: add the function to examine a capability of a internal tool
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39122
diff
changeset
|
177 |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
178 def supportscd(tool): |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
179 return tool in internals and internals[tool].mergetype == nomerge |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
180 |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
181 def check(tool, pat, symlink, binary, changedelete): |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
182 tmsg = tool |
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
183 if pat: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
184 tmsg = _(b"%s (for pattern %s)") % (tool, pat) |
7397
4c92d8971809
More verbose logging when filemerge searches for merge-tool
Mads Kiilerich <mads@kiilerich.com>
parents:
6762
diff
changeset
|
185 if not _findtool(ui, tool): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
186 if pat: # explicitly requested tool deserves a warning |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
187 ui.warn(_(b"couldn't find merge tool %s\n") % tmsg) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
188 else: # configured but non-existing tools are more silent |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
189 ui.note(_(b"couldn't find merge tool %s\n") % tmsg) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
190 elif symlink and not hascapability(tool, b"symlink", strictcheck): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
191 ui.warn(_(b"tool %s can't handle symlinks\n") % tmsg) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
192 elif binary and not hascapability(tool, b"binary", strictcheck): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
193 ui.warn(_(b"tool %s can't handle binary\n") % tmsg) |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
194 elif changedelete and not supportscd(tool): |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
195 # the nomerge tools are the only tools that support change/delete |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
196 # conflicts |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
197 pass |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
198 elif not procutil.gui() and _toolbool(ui, tool, b"gui"): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
199 ui.warn(_(b"tool %s requires a GUI\n") % tmsg) |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
200 else: |
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
201 return True |
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
202 return False |
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
203 |
25835
34ffe4c29782
filemerge: mark internal-only config option
Matt Mackall <mpm@selenic.com>
parents:
24987
diff
changeset
|
204 # internal config: ui.forcemerge |
12788
de793925862e
merge: implement --tool arguments using new ui.forcemerge configurable
Steve Borho <steve@borho.org>
parents:
12047
diff
changeset
|
205 # forcemerge comes from command line arguments, highest priority |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
206 force = ui.config(b'ui', b'forcemerge') |
12788
de793925862e
merge: implement --tool arguments using new ui.forcemerge configurable
Steve Borho <steve@borho.org>
parents:
12047
diff
changeset
|
207 if force: |
de793925862e
merge: implement --tool arguments using new ui.forcemerge configurable
Steve Borho <steve@borho.org>
parents:
12047
diff
changeset
|
208 toolpath = _findtool(ui, force) |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
209 if changedelete and not supportscd(toolpath): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
210 return b":prompt", None |
12788
de793925862e
merge: implement --tool arguments using new ui.forcemerge configurable
Steve Borho <steve@borho.org>
parents:
12047
diff
changeset
|
211 else: |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
212 if toolpath: |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
213 return (force, _quotetoolpath(toolpath)) |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
214 else: |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
215 # mimic HGMERGE if given tool not found |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
216 return (force, force) |
12788
de793925862e
merge: implement --tool arguments using new ui.forcemerge configurable
Steve Borho <steve@borho.org>
parents:
12047
diff
changeset
|
217 |
de793925862e
merge: implement --tool arguments using new ui.forcemerge configurable
Steve Borho <steve@borho.org>
parents:
12047
diff
changeset
|
218 # HGMERGE takes next precedence |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
219 hgmerge = encoding.environ.get(b"HGMERGE") |
6025
f2335246e5c7
filemerge: wrap quotes around tool path
Steve Borho <steve@borho.org>
parents:
6016
diff
changeset
|
220 if hgmerge: |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
221 if changedelete and not supportscd(hgmerge): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
222 return b":prompt", None |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
223 else: |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
224 return (hgmerge, hgmerge) |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
225 |
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
226 # then patterns |
39125
cded904f7acc
filemerge: add config knob to check capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39124
diff
changeset
|
227 |
cded904f7acc
filemerge: add config knob to check capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39124
diff
changeset
|
228 # whether binary capability should be checked strictly |
cded904f7acc
filemerge: add config knob to check capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39124
diff
changeset
|
229 binarycap = binary and strictcheck |
cded904f7acc
filemerge: add config knob to check capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39124
diff
changeset
|
230 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
231 for pat, tool in ui.configitems(b"merge-patterns"): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
232 mf = match.match(repo.root, b'', [pat]) |
39125
cded904f7acc
filemerge: add config knob to check capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39124
diff
changeset
|
233 if mf(path) and check(tool, pat, symlink, binarycap, changedelete): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
234 if binary and not hascapability(tool, b"binary", strict=True): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
235 ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
236 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
237 b"warning: check merge-patterns configurations," |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
238 b" if %r for binary file %r is unintentional\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
239 b"(see 'hg help merge-tools'" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
240 b" for binary files capability)\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
241 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
242 % (pycompat.bytestr(tool), pycompat.bytestr(path)) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
243 ) |
10339
23e608f42f2c
fix spaces/identation issues
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents:
10282
diff
changeset
|
244 toolpath = _findtool(ui, tool) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
245 return (tool, _quotetoolpath(toolpath)) |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
246 |
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
247 # then merge tools |
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
248 tools = {} |
26730
a1e43e85d294
merge-tools: allow marking a mergetool as completely disabled
Augie Fackler <augie@google.com>
parents:
26614
diff
changeset
|
249 disabled = set() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
250 for k, v in ui.configitems(b"merge-tools"): |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
251 t = k.split(b'.')[0] |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
252 if t not in tools: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
253 tools[t] = int(_toolstr(ui, t, b"priority")) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
254 if _toolbool(ui, t, b"disabled"): |
26730
a1e43e85d294
merge-tools: allow marking a mergetool as completely disabled
Augie Fackler <augie@google.com>
parents:
26614
diff
changeset
|
255 disabled.add(t) |
6076
0ee885fea464
filemerge: more backwards compatible behavior for ui.merge
Steve Borho <steve@borho.org>
parents:
6075
diff
changeset
|
256 names = tools.keys() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
257 tools = sorted( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
258 [(-p, tool) for tool, p in tools.items() if tool not in disabled] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
259 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
260 uimerge = ui.config(b"ui", b"merge") |
6076
0ee885fea464
filemerge: more backwards compatible behavior for ui.merge
Steve Borho <steve@borho.org>
parents:
6075
diff
changeset
|
261 if uimerge: |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
262 # external tools defined in uimerge won't be able to handle |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
263 # change/delete conflicts |
38952
0e58c5b20745
mergetool: warn if ui.merge points to nonexistent tool
Martin von Zweigbergk <martinvonz@google.com>
parents:
38793
diff
changeset
|
264 if check(uimerge, path, symlink, binary, changedelete): |
0e58c5b20745
mergetool: warn if ui.merge points to nonexistent tool
Martin von Zweigbergk <martinvonz@google.com>
parents:
38793
diff
changeset
|
265 if uimerge not in names and not changedelete: |
0e58c5b20745
mergetool: warn if ui.merge points to nonexistent tool
Martin von Zweigbergk <martinvonz@google.com>
parents:
38793
diff
changeset
|
266 return (uimerge, uimerge) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
267 tools.insert(0, (None, uimerge)) # highest priority |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
268 tools.append((None, b"hgmerge")) # the old default, if found |
10282
08a0f04b56bd
many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents:
10263
diff
changeset
|
269 for p, t in tools: |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
270 if check(t, None, symlink, binary, changedelete): |
7397
4c92d8971809
More verbose logging when filemerge searches for merge-tool
Mads Kiilerich <mads@kiilerich.com>
parents:
6762
diff
changeset
|
271 toolpath = _findtool(ui, t) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
272 return (t, _quotetoolpath(toolpath)) |
16254
c7eef052c9e3
filemerge: restore default prompt for binary/symlink lost in 83925d3a4559
Matt Mackall <mpm@selenic.com>
parents:
16205
diff
changeset
|
273 |
c7eef052c9e3
filemerge: restore default prompt for binary/symlink lost in 83925d3a4559
Matt Mackall <mpm@selenic.com>
parents:
16205
diff
changeset
|
274 # internal merge or prompt as last resort |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
275 if symlink or binary or changedelete: |
32253
7d4ce4b567c5
filemerge: show warning about choice of :prompt only at an actual fallback
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32047
diff
changeset
|
276 if not changedelete and len(tools): |
7d4ce4b567c5
filemerge: show warning about choice of :prompt only at an actual fallback
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32047
diff
changeset
|
277 # any tool is rejected by capability for symlink or binary |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
278 ui.warn(_(b"no tool found to merge %s\n") % path) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
279 return b":prompt", None |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
280 return b":merge", None |
6003
7855b88ba838
filemerge: pull file-merging code into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
281 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
282 |
6005
3c33032d8906
merge: add support for tool EOL fixups
Matt Mackall <mpm@selenic.com>
parents:
6004
diff
changeset
|
283 def _eoltype(data): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43503
diff
changeset
|
284 """Guess the EOL type of a file""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
285 if b'\0' in data: # binary |
6005
3c33032d8906
merge: add support for tool EOL fixups
Matt Mackall <mpm@selenic.com>
parents:
6004
diff
changeset
|
286 return None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
287 if b'\r\n' in data: # Windows |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
288 return b'\r\n' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
289 if b'\r' in data: # Old Mac |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
290 return b'\r' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
291 if b'\n' in data: # UNIX |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
292 return b'\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
293 return None # unknown |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
294 |
6005
3c33032d8906
merge: add support for tool EOL fixups
Matt Mackall <mpm@selenic.com>
parents:
6004
diff
changeset
|
295 |
34782
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
296 def _matcheol(file, back): |
43787
be8552f25cab
cleanup: fix docstring formatting
Matt Harbison <matt_harbison@yahoo.com>
parents:
43503
diff
changeset
|
297 """Convert EOL markers in a file to match origfile""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
298 tostyle = _eoltype(back.data()) # No repo.wread filters? |
6005
3c33032d8906
merge: add support for tool EOL fixups
Matt Mackall <mpm@selenic.com>
parents:
6004
diff
changeset
|
299 if tostyle: |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13565
diff
changeset
|
300 data = util.readfile(file) |
6005
3c33032d8906
merge: add support for tool EOL fixups
Matt Mackall <mpm@selenic.com>
parents:
6004
diff
changeset
|
301 style = _eoltype(data) |
3c33032d8906
merge: add support for tool EOL fixups
Matt Mackall <mpm@selenic.com>
parents:
6004
diff
changeset
|
302 if style: |
3c33032d8906
merge: add support for tool EOL fixups
Matt Mackall <mpm@selenic.com>
parents:
6004
diff
changeset
|
303 newdata = data.replace(style, tostyle) |
3c33032d8906
merge: add support for tool EOL fixups
Matt Mackall <mpm@selenic.com>
parents:
6004
diff
changeset
|
304 if newdata != data: |
14168
135e244776f0
prevent transient leaks of file handle by using new helper functions
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13565
diff
changeset
|
305 util.writefile(file, newdata) |
6005
3c33032d8906
merge: add support for tool EOL fixups
Matt Mackall <mpm@selenic.com>
parents:
6004
diff
changeset
|
306 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
307 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
308 @internaltool(b'prompt', nomerge) |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
309 def _iprompt(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None): |
28640
4fc640fd0026
filemerge: use revset notation for p1/p2 of local/other descriptions
timeless <timeless@mozdev.org>
parents:
28578
diff
changeset
|
310 """Asks the user which of the local `p1()` or the other `p2()` version to |
4fc640fd0026
filemerge: use revset notation for p1/p2 of local/other descriptions
timeless <timeless@mozdev.org>
parents:
28578
diff
changeset
|
311 keep as the merged version.""" |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
312 ui = repo.ui |
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
313 fd = fcd.path() |
41510
faa49a5914bb
merge: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
314 uipathfn = scmutil.getuipathfn(repo) |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
315 |
35282
46d7f0713a87
filemerge: raise InMemoryMergeConflictsError if we hit merge conflicts in IMM
Phil Cohen <phillco@fb.com>
parents:
35281
diff
changeset
|
316 # Avoid prompting during an in-memory merge since it doesn't support merge |
46d7f0713a87
filemerge: raise InMemoryMergeConflictsError if we hit merge conflicts in IMM
Phil Cohen <phillco@fb.com>
parents:
35281
diff
changeset
|
317 # conflicts. |
46d7f0713a87
filemerge: raise InMemoryMergeConflictsError if we hit merge conflicts in IMM
Phil Cohen <phillco@fb.com>
parents:
35281
diff
changeset
|
318 if fcd.changectx().isinmemory(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
319 raise error.InMemoryMergeConflictsError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
320 b'in-memory merge does not support file conflicts' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
321 ) |
35282
46d7f0713a87
filemerge: raise InMemoryMergeConflictsError if we hit merge conflicts in IMM
Phil Cohen <phillco@fb.com>
parents:
35281
diff
changeset
|
322 |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
323 prompts = partextras(labels) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
324 prompts[b'fd'] = uipathfn(fd) |
26898
33eb8a56d0c9
filemerge: treat EOF at prompt as fail, not abort
Siddharth Agarwal <sid0@fb.com>
parents:
26893
diff
changeset
|
325 try: |
27038
58a4eb16e722
filemerge: add support for change/delete conflicts to the ':prompt' tool
Siddharth Agarwal <sid0@fb.com>
parents:
27037
diff
changeset
|
326 if fco.isabsent(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
327 index = ui.promptchoice(_localchangedotherdeletedmsg % prompts, 2) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
328 choice = [b'local', b'other', b'unresolved'][index] |
27038
58a4eb16e722
filemerge: add support for change/delete conflicts to the ':prompt' tool
Siddharth Agarwal <sid0@fb.com>
parents:
27037
diff
changeset
|
329 elif fcd.isabsent(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
330 index = ui.promptchoice(_otherchangedlocaldeletedmsg % prompts, 2) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
331 choice = [b'other', b'local', b'unresolved'][index] |
27038
58a4eb16e722
filemerge: add support for change/delete conflicts to the ':prompt' tool
Siddharth Agarwal <sid0@fb.com>
parents:
27037
diff
changeset
|
332 else: |
42565
4764e8436b2a
filemerge: make last line of prompts <40 english chars (issue6158)
Kyle Lippincott <spectral@google.com>
parents:
41600
diff
changeset
|
333 # IMPORTANT: keep the last line of this prompt ("What do you want to |
4764e8436b2a
filemerge: make last line of prompts <40 english chars (issue6158)
Kyle Lippincott <spectral@google.com>
parents:
41600
diff
changeset
|
334 # do?") very short, see comment next to _localchangedotherdeletedmsg |
4764e8436b2a
filemerge: make last line of prompts <40 english chars (issue6158)
Kyle Lippincott <spectral@google.com>
parents:
41600
diff
changeset
|
335 # at the top of the file for details. |
27162
4ab69be0ea15
filemerge: add a 'leave unresolved' option to regular prompts
Siddharth Agarwal <sid0@fb.com>
parents:
27161
diff
changeset
|
336 index = ui.promptchoice( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
337 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
338 b"file '%(fd)s' needs to be resolved.\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
339 b"You can keep (l)ocal%(l)s, take (o)ther%(o)s, or leave " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
340 b"(u)nresolved.\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
341 b"What do you want to do?" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
342 b"$$ &Local $$ &Other $$ &Unresolved" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
343 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
344 % prompts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
345 2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
346 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
347 choice = [b'local', b'other', b'unresolved'][index] |
26851
859f453e8b4e
filemerge.prompt: separate out choice selection and action
Siddharth Agarwal <sid0@fb.com>
parents:
26730
diff
changeset
|
348 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
349 if choice == b'other': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
350 return _iother(repo, mynode, orig, fcd, fco, fca, toolconf, labels) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
351 elif choice == b'local': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
352 return _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf, labels) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
353 elif choice == b'unresolved': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
354 return _ifail(repo, mynode, orig, fcd, fco, fca, toolconf, labels) |
26898
33eb8a56d0c9
filemerge: treat EOF at prompt as fail, not abort
Siddharth Agarwal <sid0@fb.com>
parents:
26893
diff
changeset
|
355 except error.ResponseExpected: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
356 ui.write(b"\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
357 return _ifail(repo, mynode, orig, fcd, fco, fca, toolconf, labels) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
358 |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
359 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
360 @internaltool(b'local', nomerge) |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
361 def _ilocal(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None): |
28640
4fc640fd0026
filemerge: use revset notation for p1/p2 of local/other descriptions
timeless <timeless@mozdev.org>
parents:
28578
diff
changeset
|
362 """Uses the local `p1()` version of files as the merged version.""" |
27036
63d6bc874dea
filemerge: add support for change/delete conflicts to the ':local' merge tool
Siddharth Agarwal <sid0@fb.com>
parents:
27034
diff
changeset
|
363 return 0, fcd.isabsent() |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
364 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
365 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
366 @internaltool(b'other', nomerge) |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
367 def _iother(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None): |
28640
4fc640fd0026
filemerge: use revset notation for p1/p2 of local/other descriptions
timeless <timeless@mozdev.org>
parents:
28578
diff
changeset
|
368 """Uses the other `p2()` version of files as the merged version.""" |
27037
a8908c139f2f
filemerge: add support for change/delete conflicts to the ':other' merge tool
Siddharth Agarwal <sid0@fb.com>
parents:
27036
diff
changeset
|
369 if fco.isabsent(): |
a8908c139f2f
filemerge: add support for change/delete conflicts to the ':other' merge tool
Siddharth Agarwal <sid0@fb.com>
parents:
27036
diff
changeset
|
370 # local changed, remote deleted -- 'deleted' picked |
33151
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
371 _underlyingfctxifabsent(fcd).remove() |
27037
a8908c139f2f
filemerge: add support for change/delete conflicts to the ':other' merge tool
Siddharth Agarwal <sid0@fb.com>
parents:
27036
diff
changeset
|
372 deleted = True |
a8908c139f2f
filemerge: add support for change/delete conflicts to the ':other' merge tool
Siddharth Agarwal <sid0@fb.com>
parents:
27036
diff
changeset
|
373 else: |
33151
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
374 _underlyingfctxifabsent(fcd).write(fco.data(), fco.flags()) |
27037
a8908c139f2f
filemerge: add support for change/delete conflicts to the ':other' merge tool
Siddharth Agarwal <sid0@fb.com>
parents:
27036
diff
changeset
|
375 deleted = False |
a8908c139f2f
filemerge: add support for change/delete conflicts to the ':other' merge tool
Siddharth Agarwal <sid0@fb.com>
parents:
27036
diff
changeset
|
376 return 0, deleted |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
377 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
378 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
379 @internaltool(b'fail', nomerge) |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
380 def _ifail(repo, mynode, orig, fcd, fco, fca, toolconf, labels=None): |
16127
14dc2bbba6d2
filemerge: remove some redundancy in decorators/docstrings
Matt Mackall <mpm@selenic.com>
parents:
16126
diff
changeset
|
381 """ |
16126
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
382 Rather than attempting to merge files that were modified on both |
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
383 branches, it marks them as unresolved. The resolve command must be |
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
384 used to resolve these conflicts.""" |
27123
4dc5951df1e4
filemerge: in ':fail' tool, write out other side if local side is deleted
Siddharth Agarwal <sid0@fb.com>
parents:
27047
diff
changeset
|
385 # for change/delete conflicts write out the changed version, then fail |
4dc5951df1e4
filemerge: in ':fail' tool, write out other side if local side is deleted
Siddharth Agarwal <sid0@fb.com>
parents:
27047
diff
changeset
|
386 if fcd.isabsent(): |
33151
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
387 _underlyingfctxifabsent(fcd).write(fco.data(), fco.flags()) |
27032
28ee7af4b685
filemerge: return whether the file is deleted for nomerge internal tools
Siddharth Agarwal <sid0@fb.com>
parents:
26979
diff
changeset
|
388 return 1, False |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
389 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
390 |
33151
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
391 def _underlyingfctxifabsent(filectx): |
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
392 """Sometimes when resolving, our fcd is actually an absentfilectx, but |
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
393 we want to write to it (to do the resolve). This helper returns the |
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
394 underyling workingfilectx in that case. |
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
395 """ |
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
396 if filectx.isabsent(): |
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
397 return filectx.changectx()[filectx.path()] |
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
398 else: |
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
399 return filectx |
851825214aa3
filemerge: convert a couple of wvfs calls in internal mergetools to contexts
Phil Cohen <phillco@fb.com>
parents:
32873
diff
changeset
|
400 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
401 |
27041
0e330f59ef68
filemerge: don't attempt to premerge change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27040
diff
changeset
|
402 def _premerge(repo, fcd, fco, fca, toolconf, files, labels=None): |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
403 tool, toolpath, binary, symlink, scriptfn = toolconf |
27041
0e330f59ef68
filemerge: don't attempt to premerge change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27040
diff
changeset
|
404 if symlink or fcd.isabsent() or fco.isabsent(): |
18257
a35d0128545e
merge: never do premerge on symlinks
Mads Kiilerich <mads@kiilerich.com>
parents:
18256
diff
changeset
|
405 return 1 |
34032
67cfffbfb6a0
filemerge: eliminate most uses of tempfiles
Phil Cohen <phillco@fb.com>
parents:
34031
diff
changeset
|
406 unused, unused, unused, back = files |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
407 |
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
408 ui = repo.ui |
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
409 |
46139
3ca5ca380a34
filemerge: add support for the new "mergediff" marker style to premerge
Martin von Zweigbergk <martinvonz@google.com>
parents:
46108
diff
changeset
|
410 validkeep = [b'keep', b'keep-merge3', b'keep-mergediff'] |
22031
b36c60cfe46f
merge-tools: make premerge valid values extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22028
diff
changeset
|
411 |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
412 # do we attempt to simplemerge first? |
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
413 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
414 premerge = _toolbool(ui, tool, b"premerge", not binary) |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
415 except error.ConfigError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
416 premerge = _toolstr(ui, tool, b"premerge", b"").lower() |
22031
b36c60cfe46f
merge-tools: make premerge valid values extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22028
diff
changeset
|
417 if premerge not in validkeep: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
418 _valid = b', '.join([b"'" + v + b"'" for v in validkeep]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
419 raise error.ConfigError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
420 _(b"%s.premerge not valid ('%s' is neither boolean nor %s)") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
421 % (tool, premerge, _valid) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
422 ) |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
423 |
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
424 if premerge: |
46139
3ca5ca380a34
filemerge: add support for the new "mergediff" marker style to premerge
Martin von Zweigbergk <martinvonz@google.com>
parents:
46108
diff
changeset
|
425 mode = b'merge' |
3ca5ca380a34
filemerge: add support for the new "mergediff" marker style to premerge
Martin von Zweigbergk <martinvonz@google.com>
parents:
46108
diff
changeset
|
426 if premerge in {b'keep-merge3', b'keep-mergediff'}: |
22032
d7f25834ffbb
merge-tools: add a `premerge=keep-merge3` config option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22031
diff
changeset
|
427 if not labels: |
d7f25834ffbb
merge-tools: add a `premerge=keep-merge3` config option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22031
diff
changeset
|
428 labels = _defaultconflictlabels |
d7f25834ffbb
merge-tools: add a `premerge=keep-merge3` config option
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22031
diff
changeset
|
429 if len(labels) < 3: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
430 labels.append(b'base') |
46139
3ca5ca380a34
filemerge: add support for the new "mergediff" marker style to premerge
Martin von Zweigbergk <martinvonz@google.com>
parents:
46108
diff
changeset
|
431 if premerge == b'keep-mergediff': |
3ca5ca380a34
filemerge: add support for the new "mergediff" marker style to premerge
Martin von Zweigbergk <martinvonz@google.com>
parents:
46108
diff
changeset
|
432 mode = b'mergediff' |
3ca5ca380a34
filemerge: add support for the new "mergediff" marker style to premerge
Martin von Zweigbergk <martinvonz@google.com>
parents:
46108
diff
changeset
|
433 r = simplemerge.simplemerge( |
3ca5ca380a34
filemerge: add support for the new "mergediff" marker style to premerge
Martin von Zweigbergk <martinvonz@google.com>
parents:
46108
diff
changeset
|
434 ui, fcd, fca, fco, quiet=True, label=labels, mode=mode |
3ca5ca380a34
filemerge: add support for the new "mergediff" marker style to premerge
Martin von Zweigbergk <martinvonz@google.com>
parents:
46108
diff
changeset
|
435 ) |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
436 if not r: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
437 ui.debug(b" premerge successful\n") |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
438 return 0 |
22031
b36c60cfe46f
merge-tools: make premerge valid values extensible
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22028
diff
changeset
|
439 if premerge not in validkeep: |
34032
67cfffbfb6a0
filemerge: eliminate most uses of tempfiles
Phil Cohen <phillco@fb.com>
parents:
34031
diff
changeset
|
440 # restore from backup and try again |
34036
fe04c018eaac
filemerge: add _restorebackup
Phil Cohen <phillco@fb.com>
parents:
34035
diff
changeset
|
441 _restorebackup(fcd, back) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
442 return 1 # continue merging |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
443 |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
444 |
26948
067ab07435c9
filemerge: rename _symlinkcheck to _mergecheck
Siddharth Agarwal <sid0@fb.com>
parents:
26941
diff
changeset
|
445 def _mergecheck(repo, mynode, orig, fcd, fco, fca, toolconf): |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
446 tool, toolpath, binary, symlink, scriptfn = toolconf |
41510
faa49a5914bb
merge: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
447 uipathfn = scmutil.getuipathfn(repo) |
26515
0ffa7fe1076b
filemerge: add a precheck for symlinks
Siddharth Agarwal <sid0@fb.com>
parents:
26514
diff
changeset
|
448 if symlink: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
449 repo.ui.warn( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
450 _(b'warning: internal %s cannot merge symlinks for %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
451 % (tool, uipathfn(fcd.path())) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
452 ) |
26515
0ffa7fe1076b
filemerge: add a precheck for symlinks
Siddharth Agarwal <sid0@fb.com>
parents:
26514
diff
changeset
|
453 return False |
27040
1bde66b89bb2
filemerge._mergecheck: add check for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27039
diff
changeset
|
454 if fcd.isabsent() or fco.isabsent(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
455 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
456 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
457 b'warning: internal %s cannot merge change/delete ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
458 b'conflict for %s\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
459 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
460 % (tool, uipathfn(fcd.path())) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
461 ) |
27040
1bde66b89bb2
filemerge._mergecheck: add check for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27039
diff
changeset
|
462 return False |
26515
0ffa7fe1076b
filemerge: add a precheck for symlinks
Siddharth Agarwal <sid0@fb.com>
parents:
26514
diff
changeset
|
463 return True |
0ffa7fe1076b
filemerge: add a precheck for symlinks
Siddharth Agarwal <sid0@fb.com>
parents:
26514
diff
changeset
|
464 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
465 |
26070
e15966216aec
filemerge: split internal merge into api entry point and internal helper
Erik Huelsmann <ehuels@gmail.com>
parents:
25949
diff
changeset
|
466 def _merge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels, mode): |
16127
14dc2bbba6d2
filemerge: remove some redundancy in decorators/docstrings
Matt Mackall <mpm@selenic.com>
parents:
16126
diff
changeset
|
467 """ |
16126
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
468 Uses the internal non-interactive simple merge algorithm for merging |
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
469 files. It will fail if there are any conflicts and leave markers in |
22027
b98e5c7afc70
internal:merge: update documentation
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22026
diff
changeset
|
470 the partially merged file. Markers will have two sections, one for each side |
26070
e15966216aec
filemerge: split internal merge into api entry point and internal helper
Erik Huelsmann <ehuels@gmail.com>
parents:
25949
diff
changeset
|
471 of merge, unless mode equals 'union' which suppresses the markers.""" |
26572
c7850af6bb75
filemerge._merge: drop no longer necessary 'if r:' check
Siddharth Agarwal <sid0@fb.com>
parents:
26567
diff
changeset
|
472 ui = repo.ui |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
473 |
34049
6330df9d6393
simplemerge: remove unused `repo` parameter
Phil Cohen <phillco@fb.com>
parents:
34036
diff
changeset
|
474 r = simplemerge.simplemerge(ui, fcd, fca, fco, label=labels, mode=mode) |
27033
089dab8794dc
filemerge: return whether the file is deleted from all other merge tools
Siddharth Agarwal <sid0@fb.com>
parents:
27032
diff
changeset
|
475 return True, r, False |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
476 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
477 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
478 @internaltool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
479 b'union', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
480 fullmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
481 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
482 b"warning: conflicts while merging %s! " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
483 b"(edit, then use 'hg resolve --mark')\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
484 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
485 precheck=_mergecheck, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
486 ) |
26071
ff12a6c63c3d
filemerge: add 'union' merge to internal merge tool
Erik Huelsmann <ehuels@gmail.com>
parents:
26070
diff
changeset
|
487 def _iunion(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): |
ff12a6c63c3d
filemerge: add 'union' merge to internal merge tool
Erik Huelsmann <ehuels@gmail.com>
parents:
26070
diff
changeset
|
488 """ |
ff12a6c63c3d
filemerge: add 'union' merge to internal merge tool
Erik Huelsmann <ehuels@gmail.com>
parents:
26070
diff
changeset
|
489 Uses the internal non-interactive simple merge algorithm for merging |
ff12a6c63c3d
filemerge: add 'union' merge to internal merge tool
Erik Huelsmann <ehuels@gmail.com>
parents:
26070
diff
changeset
|
490 files. It will use both left and right sides for conflict regions. |
ff12a6c63c3d
filemerge: add 'union' merge to internal merge tool
Erik Huelsmann <ehuels@gmail.com>
parents:
26070
diff
changeset
|
491 No markers are inserted.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
492 return _merge( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
493 repo, mynode, orig, fcd, fco, fca, toolconf, files, labels, b'union' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
494 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
495 |
26071
ff12a6c63c3d
filemerge: add 'union' merge to internal merge tool
Erik Huelsmann <ehuels@gmail.com>
parents:
26070
diff
changeset
|
496 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
497 @internaltool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
498 b'merge', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
499 fullmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
500 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
501 b"warning: conflicts while merging %s! " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
502 b"(edit, then use 'hg resolve --mark')\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
503 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
504 precheck=_mergecheck, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
505 ) |
26070
e15966216aec
filemerge: split internal merge into api entry point and internal helper
Erik Huelsmann <ehuels@gmail.com>
parents:
25949
diff
changeset
|
506 def _imerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): |
e15966216aec
filemerge: split internal merge into api entry point and internal helper
Erik Huelsmann <ehuels@gmail.com>
parents:
25949
diff
changeset
|
507 """ |
e15966216aec
filemerge: split internal merge into api entry point and internal helper
Erik Huelsmann <ehuels@gmail.com>
parents:
25949
diff
changeset
|
508 Uses the internal non-interactive simple merge algorithm for merging |
e15966216aec
filemerge: split internal merge into api entry point and internal helper
Erik Huelsmann <ehuels@gmail.com>
parents:
25949
diff
changeset
|
509 files. It will fail if there are any conflicts and leave markers in |
e15966216aec
filemerge: split internal merge into api entry point and internal helper
Erik Huelsmann <ehuels@gmail.com>
parents:
25949
diff
changeset
|
510 the partially merged file. Markers will have two sections, one for each side |
e15966216aec
filemerge: split internal merge into api entry point and internal helper
Erik Huelsmann <ehuels@gmail.com>
parents:
25949
diff
changeset
|
511 of merge.""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
512 return _merge( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
513 repo, mynode, orig, fcd, fco, fca, toolconf, files, labels, b'merge' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
514 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
515 |
26070
e15966216aec
filemerge: split internal merge into api entry point and internal helper
Erik Huelsmann <ehuels@gmail.com>
parents:
25949
diff
changeset
|
516 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
517 @internaltool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
518 b'merge3', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
519 fullmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
520 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
521 b"warning: conflicts while merging %s! " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
522 b"(edit, then use 'hg resolve --mark')\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
523 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
524 precheck=_mergecheck, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
525 ) |
22028
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
526 def _imerge3(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): |
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
527 """ |
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
528 Uses the internal non-interactive simple merge algorithm for merging |
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
529 files. It will fail if there are any conflicts and leave markers in |
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
530 the partially merged file. Marker will have three sections, one from each |
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
531 side of the merge and one for the base content.""" |
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
532 if not labels: |
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
533 labels = _defaultconflictlabels |
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
534 if len(labels) < 3: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
535 labels.append(b'base') |
22028
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
536 return _imerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels) |
3d0572ab3b4a
merge: add an internal:merge3 tool
Pierre-Yves David <pierre-yves.david@ens-lyon.org>
parents:
22027
diff
changeset
|
537 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
538 |
46108
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
539 @internaltool( |
46365
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
540 b'merge3-lie-about-conflicts', |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
541 fullmerge, |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
542 b'', |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
543 precheck=_mergecheck, |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
544 ) |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
545 def _imerge3alwaysgood(*args, **kwargs): |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
546 # Like merge3, but record conflicts as resolved with markers in place. |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
547 # |
46496
d57e607d9e33
diff: replace --merge option by config option
Martin von Zweigbergk <martinvonz@google.com>
parents:
46365
diff
changeset
|
548 # This is used for `diff.merge` to show the differences between |
46365
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
549 # the auto-merge state and the committed merge state. It may be |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
550 # useful for other things. |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
551 b1, junk, b2 = _imerge3(*args, **kwargs) |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
552 # TODO is this right? I'm not sure what these return values mean, |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
553 # but as far as I can tell this will indicate to callers tha the |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
554 # merge succeeded. |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
555 return b1, False, b2 |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
556 |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
557 |
63dfaca9087f
filemerge: add a hacktastic version of internal:merge3 for merge diffs
Augie Fackler <augie@google.com>
parents:
46356
diff
changeset
|
558 @internaltool( |
46108
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
559 b'mergediff', |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
560 fullmerge, |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
561 _( |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
562 b"warning: conflicts while merging %s! " |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
563 b"(edit, then use 'hg resolve --mark')\n" |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
564 ), |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
565 precheck=_mergecheck, |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
566 ) |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
567 def _imerge_diff( |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
568 repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
569 ): |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
570 """ |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
571 Uses the internal non-interactive simple merge algorithm for merging |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
572 files. It will fail if there are any conflicts and leave markers in |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
573 the partially merged file. The marker will have two sections, one with the |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
574 content from one side of the merge, and one with a diff from the base |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
575 content to the content on the other side. (experimental)""" |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
576 if not labels: |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
577 labels = _defaultconflictlabels |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
578 if len(labels) < 3: |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
579 labels.append(b'base') |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
580 return _merge( |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
581 repo, mynode, orig, fcd, fco, fca, toolconf, files, labels, b'mergediff' |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
582 ) |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
583 |
bdc2bf68f19e
mergetools: add new conflict marker format with diffs in
Martin von Zweigbergk <martinvonz@google.com>
parents:
45942
diff
changeset
|
584 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
585 def _imergeauto( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
586 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
587 mynode, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
588 orig, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
589 fcd, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
590 fco, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
591 fca, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
592 toolconf, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
593 files, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
594 labels=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
595 localorother=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
596 ): |
26224
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
597 """ |
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
598 Generic driver for _imergelocal and _imergeother |
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
599 """ |
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
600 assert localorother is not None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
601 r = simplemerge.simplemerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
602 repo.ui, fcd, fca, fco, label=labels, localorother=localorother |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
603 ) |
26224
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
604 return True, r |
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
605 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
606 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
607 @internaltool(b'merge-local', mergeonly, precheck=_mergecheck) |
26224
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
608 def _imergelocal(*args, **kwargs): |
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
609 """ |
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
610 Like :merge, but resolve all conflicts non-interactively in favor |
28640
4fc640fd0026
filemerge: use revset notation for p1/p2 of local/other descriptions
timeless <timeless@mozdev.org>
parents:
28578
diff
changeset
|
611 of the local `p1()` changes.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
612 success, status = _imergeauto(localorother=b'local', *args, **kwargs) |
27033
089dab8794dc
filemerge: return whether the file is deleted from all other merge tools
Siddharth Agarwal <sid0@fb.com>
parents:
27032
diff
changeset
|
613 return success, status, False |
26224
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
614 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
615 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
616 @internaltool(b'merge-other', mergeonly, precheck=_mergecheck) |
26224
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
617 def _imergeother(*args, **kwargs): |
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
618 """ |
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
619 Like :merge, but resolve all conflicts non-interactively in favor |
28640
4fc640fd0026
filemerge: use revset notation for p1/p2 of local/other descriptions
timeless <timeless@mozdev.org>
parents:
28578
diff
changeset
|
620 of the other `p2()` changes.""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
621 success, status = _imergeauto(localorother=b'other', *args, **kwargs) |
27033
089dab8794dc
filemerge: return whether the file is deleted from all other merge tools
Siddharth Agarwal <sid0@fb.com>
parents:
27032
diff
changeset
|
622 return success, status, False |
26224
a4da463df6cf
filemerge: add non-interactive :merge-local and :merge-other
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
26071
diff
changeset
|
623 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
624 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
625 @internaltool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
626 b'tagmerge', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
627 mergeonly, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
628 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
629 b"automatic tag merging of %s failed! " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
630 b"(use 'hg resolve --tool :merge' or another merge " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
631 b"tool of your choice)\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
632 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
633 ) |
21922
50e20154cb68
filemerge: add internal:tagmerge merge tool
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21921
diff
changeset
|
634 def _itagmerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): |
50e20154cb68
filemerge: add internal:tagmerge merge tool
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21921
diff
changeset
|
635 """ |
50e20154cb68
filemerge: add internal:tagmerge merge tool
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21921
diff
changeset
|
636 Uses the internal tag merge algorithm (experimental). |
50e20154cb68
filemerge: add internal:tagmerge merge tool
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21921
diff
changeset
|
637 """ |
27033
089dab8794dc
filemerge: return whether the file is deleted from all other merge tools
Siddharth Agarwal <sid0@fb.com>
parents:
27032
diff
changeset
|
638 success, status = tagmerge.merge(repo, fcd, fco, fca) |
089dab8794dc
filemerge: return whether the file is deleted from all other merge tools
Siddharth Agarwal <sid0@fb.com>
parents:
27032
diff
changeset
|
639 return success, status, False |
21922
50e20154cb68
filemerge: add internal:tagmerge merge tool
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
21921
diff
changeset
|
640 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
641 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
642 @internaltool(b'dump', fullmerge, binary=True, symlink=True) |
21273
20b8090d8125
merge: define conflict marker labels in filemerge()
Durham Goode <durham@fb.com>
parents:
21100
diff
changeset
|
643 def _idump(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): |
16127
14dc2bbba6d2
filemerge: remove some redundancy in decorators/docstrings
Matt Mackall <mpm@selenic.com>
parents:
16126
diff
changeset
|
644 """ |
16126
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
645 Creates three versions of the files to merge, containing the |
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
646 contents of local, other and base. These files can then be used to |
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
647 perform a merge manually. If the file to be merged is named |
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
648 ``a.txt``, these files will accordingly be named ``a.txt.local``, |
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
649 ``a.txt.other`` and ``a.txt.base`` and they will be placed in the |
32255
7e35d31b41fd
filemerge: add internal merge tool to dump files forcibly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32254
diff
changeset
|
650 same directory as ``a.txt``. |
7e35d31b41fd
filemerge: add internal merge tool to dump files forcibly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32254
diff
changeset
|
651 |
34915
cab34bda259e
help: fix typo in hg merge documentation
Joe Blaylock <jrbl@google.com>
parents:
34826
diff
changeset
|
652 This implies premerge. Therefore, files aren't dumped, if premerge |
32255
7e35d31b41fd
filemerge: add internal merge tool to dump files forcibly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32254
diff
changeset
|
653 runs successfully. Use :forcedump to forcibly write files out. |
7e35d31b41fd
filemerge: add internal merge tool to dump files forcibly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32254
diff
changeset
|
654 """ |
34034
7558917f291e
filemerge: add `_workingpath`
Phil Cohen <phillco@fb.com>
parents:
34033
diff
changeset
|
655 a = _workingpath(repo, fcd) |
26573
a875773cf537
filemerge._idump: drop no longer necessary 'if r:' check
Siddharth Agarwal <sid0@fb.com>
parents:
26572
diff
changeset
|
656 fd = fcd.path() |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
657 |
34785
1af4561b6bfe
filemerge: add a missing flushall()
Phil Cohen <phillco@fb.com>
parents:
34784
diff
changeset
|
658 from . import context |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
659 |
34785
1af4561b6bfe
filemerge: add a missing flushall()
Phil Cohen <phillco@fb.com>
parents:
34784
diff
changeset
|
660 if isinstance(fcd, context.overlayworkingfilectx): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
661 raise error.InMemoryMergeConflictsError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
662 b'in-memory merge does not support the :dump tool.' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
663 ) |
34785
1af4561b6bfe
filemerge: add a missing flushall()
Phil Cohen <phillco@fb.com>
parents:
34784
diff
changeset
|
664 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
665 util.writefile(a + b".local", fcd.decodeddata()) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
666 repo.wwrite(fd + b".other", fco.data(), fco.flags()) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
667 repo.wwrite(fd + b".base", fca.data(), fca.flags()) |
27033
089dab8794dc
filemerge: return whether the file is deleted from all other merge tools
Siddharth Agarwal <sid0@fb.com>
parents:
27032
diff
changeset
|
668 return False, 1, False |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
669 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
670 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
671 @internaltool(b'forcedump', mergeonly, binary=True, symlink=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
672 def _forcedump(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): |
32255
7e35d31b41fd
filemerge: add internal merge tool to dump files forcibly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32254
diff
changeset
|
673 """ |
7e35d31b41fd
filemerge: add internal merge tool to dump files forcibly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32254
diff
changeset
|
674 Creates three versions of the files as same as :dump, but omits premerge. |
7e35d31b41fd
filemerge: add internal merge tool to dump files forcibly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32254
diff
changeset
|
675 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
676 return _idump( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
677 repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=labels |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
678 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
679 |
32255
7e35d31b41fd
filemerge: add internal merge tool to dump files forcibly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
32254
diff
changeset
|
680 |
35463
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
681 def _xmergeimm(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels=None): |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
682 # In-memory merge simply raises an exception on all external merge tools, |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
683 # for now. |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
684 # |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
685 # It would be possible to run most tools with temporary files, but this |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
686 # raises the question of what to do if the user only partially resolves the |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
687 # file -- we can't leave a merge state. (Copy to somewhere in the .hg/ |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
688 # directory and tell the user how to get it is my best idea, but it's |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
689 # clunky.) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
690 raise error.InMemoryMergeConflictsError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
691 b'in-memory merge does not support external merge tools' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
692 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
693 |
35463
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
694 |
40478
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
695 def _describemerge(ui, repo, mynode, fcl, fcb, fco, env, toolpath, args): |
45768
5effb1992c17
config: move ui.pre-merge-tool-output-template into [command-templates]
Martin von Zweigbergk <martinvonz@google.com>
parents:
45767
diff
changeset
|
696 tmpl = ui.config(b'command-templates', b'pre-merge-tool-output') |
40478
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
697 if not tmpl: |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
698 return |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
699 |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
700 mappingdict = templateutil.mappingdict |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
701 props = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
702 b'ctx': fcl.changectx(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
703 b'node': hex(mynode), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
704 b'path': fcl.path(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
705 b'local': mappingdict( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
706 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
707 b'ctx': fcl.changectx(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
708 b'fctx': fcl, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
709 b'node': hex(mynode), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
710 b'name': _(b'local'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
711 b'islink': b'l' in fcl.flags(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
712 b'label': env[b'HG_MY_LABEL'], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
713 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
714 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
715 b'base': mappingdict( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
716 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
717 b'ctx': fcb.changectx(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
718 b'fctx': fcb, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
719 b'name': _(b'base'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
720 b'islink': b'l' in fcb.flags(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
721 b'label': env[b'HG_BASE_LABEL'], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
722 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
723 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
724 b'other': mappingdict( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
725 { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
726 b'ctx': fco.changectx(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
727 b'fctx': fco, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
728 b'name': _(b'other'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
729 b'islink': b'l' in fco.flags(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
730 b'label': env[b'HG_OTHER_LABEL'], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
731 } |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
732 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
733 b'toolpath': toolpath, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
734 b'toolargs': args, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
735 } |
40478
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
736 |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
737 # TODO: make all of this something that can be specified on a per-tool basis |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
738 tmpl = templater.unquotestring(tmpl) |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
739 |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
740 # Not using cmdutil.rendertemplate here since it causes errors importing |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
741 # things for us to import cmdutil. |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
742 tres = formatter.templateresources(ui, repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
743 t = formatter.maketemplater( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
744 ui, tmpl, defaults=templatekw.keywords, resources=tres |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
745 ) |
40478
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
746 ui.status(t.renderdefault(props)) |
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
747 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
748 |
43845
1ffbd03c8d75
filemerge: drop a default argument to appease pytype
Matt Harbison <matt_harbison@yahoo.com>
parents:
43787
diff
changeset
|
749 def _xmerge(repo, mynode, orig, fcd, fco, fca, toolconf, files, labels): |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
750 tool, toolpath, binary, symlink, scriptfn = toolconf |
41510
faa49a5914bb
merge: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
751 uipathfn = scmutil.getuipathfn(repo) |
27042
30b919bc49bf
filemerge: don't try using external tools on change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27041
diff
changeset
|
752 if fcd.isabsent() or fco.isabsent(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
753 repo.ui.warn( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
754 _(b'warning: %s cannot merge change/delete conflict for %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
755 % (tool, uipathfn(fcd.path())) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
756 ) |
27042
30b919bc49bf
filemerge: don't try using external tools on change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27041
diff
changeset
|
757 return False, 1, None |
34035
96123bdea43e
filemerge: reduce creation of tempfiles until needed
Phil Cohen <phillco@fb.com>
parents:
34034
diff
changeset
|
758 unused, unused, unused, back = files |
36976
a4a95bd7158d
filemerge: give some variables in _xmerge more descriptive names
Kyle Lippincott <spectral@google.com>
parents:
36835
diff
changeset
|
759 localpath = _workingpath(repo, fcd) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
760 args = _toolstr(repo.ui, tool, b"args") |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
761 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
762 with _maketempfiles( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
763 repo, fco, fca, repo.wvfs.join(back.path()), b"$output" in args |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
764 ) as temppaths: |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
765 basepath, otherpath, localoutputpath = temppaths |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
766 outpath = b"" |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
767 mylabel, otherlabel = labels[:2] |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
768 if len(labels) >= 3: |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
769 baselabel = labels[2] |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
770 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
771 baselabel = b'base' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
772 env = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
773 b'HG_FILE': fcd.path(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
774 b'HG_MY_NODE': short(mynode), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
775 b'HG_OTHER_NODE': short(fco.changectx().node()), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
776 b'HG_BASE_NODE': short(fca.changectx().node()), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
777 b'HG_MY_ISLINK': b'l' in fcd.flags(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
778 b'HG_OTHER_ISLINK': b'l' in fco.flags(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
779 b'HG_BASE_ISLINK': b'l' in fca.flags(), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
780 b'HG_MY_LABEL': mylabel, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
781 b'HG_OTHER_LABEL': otherlabel, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
782 b'HG_BASE_LABEL': baselabel, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
783 } |
34035
96123bdea43e
filemerge: reduce creation of tempfiles until needed
Phil Cohen <phillco@fb.com>
parents:
34034
diff
changeset
|
784 ui = repo.ui |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
785 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
786 if b"$output" in args: |
34782
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
787 # read input from backup, write to original |
36976
a4a95bd7158d
filemerge: give some variables in _xmerge more descriptive names
Kyle Lippincott <spectral@google.com>
parents:
36835
diff
changeset
|
788 outpath = localpath |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
789 localpath = localoutputpath |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
790 replace = { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
791 b'local': localpath, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
792 b'base': basepath, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
793 b'other': otherpath, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
794 b'output': outpath, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
795 b'labellocal': mylabel, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
796 b'labelother': otherlabel, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
797 b'labelbase': baselabel, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
798 } |
37120
a8a902d7176e
procutil: bulk-replace function calls to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37084
diff
changeset
|
799 args = util.interpolate( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
800 br'\$', |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
801 replace, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
802 args, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
803 lambda s: procutil.shellquote(util.localpath(s)), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
804 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
805 if _toolbool(ui, tool, b"gui"): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
806 repo.ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
807 _(b'running merge tool %s for file %s\n') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
808 % (tool, uipathfn(fcd.path())) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
809 ) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
810 if scriptfn is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
811 cmd = toolpath + b' ' + args |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
812 repo.ui.debug(b'launching merge tool: %s\n' % cmd) |
40478
86dfae98a3a2
merge-tools: when calling external merge tool, describe the resolve inputs
Kyle Lippincott <spectral@google.com>
parents:
39359
diff
changeset
|
813 _describemerge(ui, repo, mynode, fcd, fca, fco, env, toolpath, args) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
814 r = ui.system( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
815 cmd, cwd=repo.root, environ=env, blockedtag=b'mergetool' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
816 ) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
817 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
818 repo.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
819 b'launching python merge script: %s:%s\n' % (toolpath, scriptfn) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
820 ) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
821 r = 0 |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
822 try: |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
823 # avoid cycle cmdutil->merge->filemerge->extensions->cmdutil |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
824 from . import extensions |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
825 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
826 mod = extensions.loadpath(toolpath, b'hgmerge.%s' % tool) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
827 except Exception: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
828 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
829 _(b"loading python merge script failed: %s") % toolpath |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
830 ) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
831 mergefn = getattr(mod, scriptfn, None) |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
832 if mergefn is None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
833 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
834 _(b"%s does not have function: %s") % (toolpath, scriptfn) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
835 ) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
836 argslist = procutil.shellsplit(args) |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
837 # avoid cycle cmdutil->merge->filemerge->hook->extensions->cmdutil |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
838 from . import hook |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
839 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
840 ret, raised = hook.pythonhook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
841 ui, repo, b"merge", toolpath, mergefn, {b'args': argslist}, True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
842 ) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
843 if raised: |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
844 r = 1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
845 repo.ui.debug(b'merge tool returned: %d\n' % r) |
34035
96123bdea43e
filemerge: reduce creation of tempfiles until needed
Phil Cohen <phillco@fb.com>
parents:
34034
diff
changeset
|
846 return True, r, False |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
847 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
848 |
35482
c240657febb7
templater: drop unneeded resources from conflict-marker data
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
849 def _formatconflictmarker(ctx, template, label, pad): |
21519
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
850 """Applies the given template to the ctx, prefixed by the label. |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
851 |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
852 Pad is the minimum width of the label prefix, so that multiple markers |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
853 can have aligned templated parts. |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
854 """ |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
855 if ctx.node() is None: |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
856 ctx = ctx.p1() |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
857 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
858 props = {b'ctx': ctx} |
36988
317382151ac3
templater: rename .render(mapping) to .renderdefault(mapping) (API)
Yuya Nishihara <yuya@tcha.org>
parents:
36976
diff
changeset
|
859 templateresult = template.renderdefault(props) |
21519
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
860 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
861 label = (b'%s:' % label).ljust(pad + 1) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
862 mark = b'%s %s' % (label, templateresult) |
21519
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
863 |
21864
755bf1bbe0a9
filemerge: use only the first line of the generated conflict marker for safety
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21693
diff
changeset
|
864 if mark: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
865 mark = mark.splitlines()[0] # split for safety |
21864
755bf1bbe0a9
filemerge: use only the first line of the generated conflict marker for safety
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21693
diff
changeset
|
866 |
21865
78e56e70c70a
filemerge: use 'util.ellipsis' to trim custom conflict markers correctly
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
21864
diff
changeset
|
867 # 8 for the prefix of conflict marker lines (e.g. '<<<<<<< ') |
37084
f0b6fbea00cf
stringutil: bulk-replace call sites to point to new module
Yuya Nishihara <yuya@tcha.org>
parents:
37077
diff
changeset
|
868 return stringutil.ellipsis(mark, 80 - 8) |
21519
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
869 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
870 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
871 _defaultconflictlabels = [b'local', b'other'] |
21524
47b97d9af27e
merge: add labels parameter from merge.update to filemerge
Durham Goode <durham@fb.com>
parents:
21519
diff
changeset
|
872 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
873 |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
874 def _formatlabels(repo, fcd, fco, fca, labels, tool=None): |
21519
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
875 """Formats the given labels using the conflict marker template. |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
876 |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
877 Returns a list of formatted labels. |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
878 """ |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
879 cd = fcd.changectx() |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
880 co = fco.changectx() |
22026
6966542768ff
filemerge: allow the formatting of three labels instead of two
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22025
diff
changeset
|
881 ca = fca.changectx() |
21519
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
882 |
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
883 ui = repo.ui |
45767
40411ad2f5d2
config: rename ui.mergemarkertemplate to command-templates.mergemarker
Martin von Zweigbergk <martinvonz@google.com>
parents:
44872
diff
changeset
|
884 template = ui.config(b'command-templates', b'mergemarker') |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
885 if tool is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
886 template = _toolstr(ui, tool, b'mergemarkertemplate', template) |
32047
458f7294dfee
filemerge: optionally strip quotes from merge marker template (BC)
Yuya Nishihara <yuya@tcha.org>
parents:
31436
diff
changeset
|
887 template = templater.unquotestring(template) |
35469
f1c54d003327
templater: move repo, ui and cache to per-engine resources
Yuya Nishihara <yuya@tcha.org>
parents:
35463
diff
changeset
|
888 tres = formatter.templateresources(ui, repo) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
889 tmpl = formatter.maketemplater( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
890 ui, template, defaults=templatekw.keywords, resources=tres |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
891 ) |
21519
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
892 |
22026
6966542768ff
filemerge: allow the formatting of three labels instead of two
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22025
diff
changeset
|
893 pad = max(len(l) for l in labels) |
21519
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
894 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
895 newlabels = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
896 _formatconflictmarker(cd, tmpl, labels[0], pad), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
897 _formatconflictmarker(co, tmpl, labels[1], pad), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
898 ] |
22026
6966542768ff
filemerge: allow the formatting of three labels instead of two
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22025
diff
changeset
|
899 if len(labels) > 2: |
35482
c240657febb7
templater: drop unneeded resources from conflict-marker data
Yuya Nishihara <yuya@tcha.org>
parents:
35469
diff
changeset
|
900 newlabels.append(_formatconflictmarker(ca, tmpl, labels[2], pad)) |
22026
6966542768ff
filemerge: allow the formatting of three labels instead of two
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
22025
diff
changeset
|
901 return newlabels |
21519
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
902 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
903 |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
904 def partextras(labels): |
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
905 """Return a dictionary of extra labels for use in prompts to the user |
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
906 |
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
907 Intended use is in strings of the form "(l)ocal%(l)s". |
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
908 """ |
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
909 if labels is None: |
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
910 return { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
911 b"l": b"", |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
912 b"o": b"", |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
913 } |
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
914 |
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
915 return { |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
916 b"l": b" [%s]" % labels[0], |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
917 b"o": b" [%s]" % labels[1], |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
918 } |
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
919 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
920 |
34036
fe04c018eaac
filemerge: add _restorebackup
Phil Cohen <phillco@fb.com>
parents:
34035
diff
changeset
|
921 def _restorebackup(fcd, back): |
fe04c018eaac
filemerge: add _restorebackup
Phil Cohen <phillco@fb.com>
parents:
34035
diff
changeset
|
922 # TODO: Add a workingfilectx.write(otherfilectx) path so we can use |
fe04c018eaac
filemerge: add _restorebackup
Phil Cohen <phillco@fb.com>
parents:
34035
diff
changeset
|
923 # util.copy here instead. |
34782
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
924 fcd.write(back.data(), fcd.flags()) |
34036
fe04c018eaac
filemerge: add _restorebackup
Phil Cohen <phillco@fb.com>
parents:
34035
diff
changeset
|
925 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
926 |
34782
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
927 def _makebackup(repo, ui, wctx, fcd, premerge): |
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
928 """Makes and returns a filectx-like object for ``fcd``'s backup file. |
34031
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
929 |
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
930 In addition to preserving the user's pre-existing modifications to `fcd` |
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
931 (if any), the backup is used to undo certain premerges, confirm whether a |
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
932 merge changed anything, and determine what line endings the new file should |
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
933 have. |
35702
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
934 |
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
935 Backups only need to be written once (right before the premerge) since their |
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
936 content doesn't change afterwards. |
34031
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
937 """ |
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
938 if fcd.isabsent(): |
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
939 return None |
34782
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
940 # TODO: Break this import cycle somehow. (filectx -> ctx -> fileset -> |
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
941 # merge -> filemerge). (I suspect the fileset import is the weakest link) |
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
942 from . import context |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
943 |
41600
a8ccd821b7d2
filemerge: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41510
diff
changeset
|
944 back = scmutil.backuppath(ui, repo, fcd.path()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
945 inworkingdir = back.startswith(repo.wvfs.base) and not back.startswith( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
946 repo.vfs.base |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
947 ) |
34784
123a68e6b473
filemerge: store backups in the overlayworkingctx if using imm
Phil Cohen <phillco@fb.com>
parents:
34782
diff
changeset
|
948 if isinstance(fcd, context.overlayworkingfilectx) and inworkingdir: |
123a68e6b473
filemerge: store backups in the overlayworkingctx if using imm
Phil Cohen <phillco@fb.com>
parents:
34782
diff
changeset
|
949 # If the backup file is to be in the working directory, and we're |
123a68e6b473
filemerge: store backups in the overlayworkingctx if using imm
Phil Cohen <phillco@fb.com>
parents:
34782
diff
changeset
|
950 # merging in-memory, we must redirect the backup to the memory context |
123a68e6b473
filemerge: store backups in the overlayworkingctx if using imm
Phil Cohen <phillco@fb.com>
parents:
34782
diff
changeset
|
951 # so we don't disturb the working directory. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
952 relpath = back[len(repo.wvfs.base) + 1 :] |
35703
9a50ffd15b25
filemerge: only write in-memory backup during premerge
Phil Cohen <phillco@fb.com>
parents:
35702
diff
changeset
|
953 if premerge: |
9a50ffd15b25
filemerge: only write in-memory backup during premerge
Phil Cohen <phillco@fb.com>
parents:
35702
diff
changeset
|
954 wctx[relpath].write(fcd.data(), fcd.flags()) |
34784
123a68e6b473
filemerge: store backups in the overlayworkingctx if using imm
Phil Cohen <phillco@fb.com>
parents:
34782
diff
changeset
|
955 return wctx[relpath] |
123a68e6b473
filemerge: store backups in the overlayworkingctx if using imm
Phil Cohen <phillco@fb.com>
parents:
34782
diff
changeset
|
956 else: |
35702
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
957 if premerge: |
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
958 # Otherwise, write to wherever path the user specified the backups |
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
959 # should go. We still need to switch based on whether the source is |
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
960 # in-memory so we can use the fast path of ``util.copy`` if both are |
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
961 # on disk. |
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
962 if isinstance(fcd, context.overlayworkingfilectx): |
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
963 util.writefile(back, fcd.data()) |
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
964 else: |
41600
a8ccd821b7d2
filemerge: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41510
diff
changeset
|
965 a = _workingpath(repo, fcd) |
35702
c0439e11af16
filemerge: fix backing up an in-memory file to a custom location
Phil Cohen <phillco@fb.com>
parents:
35483
diff
changeset
|
966 util.copyfile(a, back) |
34784
123a68e6b473
filemerge: store backups in the overlayworkingctx if using imm
Phil Cohen <phillco@fb.com>
parents:
34782
diff
changeset
|
967 # A arbitraryfilectx is returned, so we can run the same functions on |
123a68e6b473
filemerge: store backups in the overlayworkingctx if using imm
Phil Cohen <phillco@fb.com>
parents:
34782
diff
changeset
|
968 # the backup context regardless of where it lives. |
123a68e6b473
filemerge: store backups in the overlayworkingctx if using imm
Phil Cohen <phillco@fb.com>
parents:
34782
diff
changeset
|
969 return context.arbitraryfilectx(back, repo=repo) |
34031
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
970 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
971 |
36998
3723b42ff953
filemerge: move temp file unlinks to _maketempfiles
Kyle Lippincott <spectral@google.com>
parents:
36988
diff
changeset
|
972 @contextlib.contextmanager |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
973 def _maketempfiles(repo, fco, fca, localpath, uselocalpath): |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
974 """Writes out `fco` and `fca` as temporary files, and (if uselocalpath) |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
975 copies `localpath` to another temporary file, so an external merge tool may |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
976 use them. |
34031
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
977 """ |
36999
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
978 tmproot = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
979 tmprootprefix = repo.ui.config(b'experimental', b'mergetempdirprefix') |
36999
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
980 if tmprootprefix: |
38165
2ce60954b1b7
py3: wrap tempfile.mkdtemp() to use bytes path
Yuya Nishihara <yuya@tcha.org>
parents:
38164
diff
changeset
|
981 tmproot = pycompat.mkdtemp(prefix=tmprootprefix) |
36999
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
982 |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
983 def maketempfrompath(prefix, path): |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
984 fullbase, ext = os.path.splitext(path) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
985 pre = b"%s~%s" % (os.path.basename(fullbase), prefix) |
36999
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
986 if tmproot: |
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
987 name = os.path.join(tmproot, pre) |
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
988 if ext: |
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
989 name += ext |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
990 f = open(name, "wb") |
36999
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
991 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
992 fd, name = pycompat.mkstemp(prefix=pre + b'.', suffix=ext) |
43503
313e3a279828
cleanup: remove pointless r-prefixes on double-quoted strings
Augie Fackler <augie@google.com>
parents:
43117
diff
changeset
|
993 f = os.fdopen(fd, "wb") |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
994 return f, name |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
995 |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
996 def tempfromcontext(prefix, ctx): |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
997 f, name = maketempfrompath(prefix, ctx.path()) |
34031
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
998 data = repo.wwritedata(ctx.path(), ctx.data()) |
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
999 f.write(data) |
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
1000 f.close() |
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
1001 return name |
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
1002 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1003 b = tempfromcontext(b"base", fca) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1004 c = tempfromcontext(b"other", fco) |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1005 d = localpath |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1006 if uselocalpath: |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1007 # We start off with this being the backup filename, so remove the .orig |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1008 # to make syntax-highlighting more likely. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1009 if d.endswith(b'.orig'): |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1010 d, _ = os.path.splitext(d) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1011 f, d = maketempfrompath(b"local", d) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1012 with open(localpath, b'rb') as src: |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1013 f.write(src.read()) |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1014 f.close() |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1015 |
36998
3723b42ff953
filemerge: move temp file unlinks to _maketempfiles
Kyle Lippincott <spectral@google.com>
parents:
36988
diff
changeset
|
1016 try: |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1017 yield b, c, d |
36998
3723b42ff953
filemerge: move temp file unlinks to _maketempfiles
Kyle Lippincott <spectral@google.com>
parents:
36988
diff
changeset
|
1018 finally: |
36999
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
1019 if tmproot: |
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
1020 shutil.rmtree(tmproot) |
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
1021 else: |
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
1022 util.unlink(b) |
e349ad5cbb71
filemerge: use a single temp dir instead of temp files
Kyle Lippincott <spectral@google.com>
parents:
36998
diff
changeset
|
1023 util.unlink(c) |
37077
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1024 # if not uselocalpath, d is the 'orig'/backup file which we |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1025 # shouldn't delete. |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1026 if d and uselocalpath: |
1e30a26a65d0
filemerge: make the 'local' path match the format that 'base' and 'other' use
Kyle Lippincott <spectral@google.com>
parents:
36999
diff
changeset
|
1027 util.unlink(d) |
34031
52bd006b4f49
filemerge: extract _maketemp and _makebackup
Phil Cohen <phillco@fb.com>
parents:
33906
diff
changeset
|
1028 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1029 |
34122
c0ce60459d84
merge: pass wctx to premerge, filemerge
Phil Cohen <phillco@fb.com>
parents:
34076
diff
changeset
|
1030 def _filemerge(premerge, repo, wctx, mynode, orig, fcd, fco, fca, labels=None): |
6003
7855b88ba838
filemerge: pull file-merging code into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1031 """perform a 3-way merge in the working directory |
7855b88ba838
filemerge: pull file-merging code into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1032 |
26607
45a6233d5f50
filemerge: introduce a premerge flag and function
Siddharth Agarwal <sid0@fb.com>
parents:
26606
diff
changeset
|
1033 premerge = whether this is a premerge |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6212
diff
changeset
|
1034 mynode = parent node before merge |
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6212
diff
changeset
|
1035 orig = original local filename before merge |
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6212
diff
changeset
|
1036 fco = other file context |
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6212
diff
changeset
|
1037 fca = ancestor file context |
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6212
diff
changeset
|
1038 fcd = local file context for current/destination file |
26606
2a405d307f8c
filemerge: also return whether the merge is complete
Siddharth Agarwal <sid0@fb.com>
parents:
26605
diff
changeset
|
1039 |
27034
86ede9eda252
filemerge: return whether the file was deleted
Siddharth Agarwal <sid0@fb.com>
parents:
27033
diff
changeset
|
1040 Returns whether the merge is complete, the return value of the merge, and |
86ede9eda252
filemerge: return whether the file was deleted
Siddharth Agarwal <sid0@fb.com>
parents:
27033
diff
changeset
|
1041 a boolean indicating whether the file was deleted from disk.""" |
6003
7855b88ba838
filemerge: pull file-merging code into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1042 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1043 if not fco.cmp(fcd): # files identical? |
27034
86ede9eda252
filemerge: return whether the file was deleted
Siddharth Agarwal <sid0@fb.com>
parents:
27033
diff
changeset
|
1044 return True, None, False |
26512
4c52dd406adc
filemerge: indent filemerge.filemerge
Siddharth Agarwal <sid0@fb.com>
parents:
26224
diff
changeset
|
1045 |
26608
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1046 ui = repo.ui |
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1047 fd = fcd.path() |
41510
faa49a5914bb
merge: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
1048 uipathfn = scmutil.getuipathfn(repo) |
faa49a5914bb
merge: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
1049 fduipath = uipathfn(fd) |
26608
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1050 binary = fcd.isbinary() or fco.isbinary() or fca.isbinary() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1051 symlink = b'l' in fcd.flags() + fco.flags() |
27039
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
1052 changedelete = fcd.isabsent() or fco.isabsent() |
d7517deedf86
filemerge._picktool: only pick from nomerge tools for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27038
diff
changeset
|
1053 tool, toolpath = _picktool(repo, ui, fd, binary, symlink, changedelete) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1054 scriptfn = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1055 if tool in internals and tool.startswith(b'internal:'): |
26608
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1056 # normalize to new-style names (':merge' etc) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1057 tool = tool[len(b'internal') :] |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1058 if toolpath and toolpath.startswith(b'python:'): |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1059 invalidsyntax = False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1060 if toolpath.count(b':') >= 2: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1061 script, scriptfn = toolpath[7:].rsplit(b':', 1) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1062 if not scriptfn: |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1063 invalidsyntax = True |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1064 # missing :callable can lead to spliting on windows drive letter |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1065 if b'\\' in scriptfn or b'/' in scriptfn: |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1066 invalidsyntax = True |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1067 else: |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1068 invalidsyntax = True |
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1069 if invalidsyntax: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1070 raise error.Abort(_(b"invalid 'python:' syntax: %s") % toolpath) |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1071 toolpath = script |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1072 ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1073 b"picked tool '%s' for %s (binary %s symlink %s changedelete %s)\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1074 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1075 tool, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1076 fduipath, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1077 pycompat.bytestr(binary), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1078 pycompat.bytestr(symlink), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1079 pycompat.bytestr(changedelete), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1080 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1081 ) |
6003
7855b88ba838
filemerge: pull file-merging code into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1082 |
26608
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1083 if tool in internals: |
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1084 func = internals[tool] |
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1085 mergetype = func.mergetype |
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1086 onfailure = func.onfailure |
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1087 precheck = func.precheck |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1088 isexternal = False |
26608
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1089 else: |
35463
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
1090 if wctx.isinmemory(): |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
1091 func = _xmergeimm |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
1092 else: |
ef7e667a4f7b
filemerge: only raise InMemoryMergeConflictsError when running _xmerge
Phil Cohen <phillco@fb.com>
parents:
35282
diff
changeset
|
1093 func = _xmerge |
26608
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1094 mergetype = fullmerge |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1095 onfailure = _(b"merging %s failed!\n") |
26608
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1096 precheck = None |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1097 isexternal = True |
26512
4c52dd406adc
filemerge: indent filemerge.filemerge
Siddharth Agarwal <sid0@fb.com>
parents:
26224
diff
changeset
|
1098 |
38041
242eb5132203
filemerge: support specifying a python function to custom merge-tools
hindlemail <tom_hindle@sil.org>
parents:
37120
diff
changeset
|
1099 toolconf = tool, toolpath, binary, symlink, scriptfn |
6003
7855b88ba838
filemerge: pull file-merging code into its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1100 |
26608
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1101 if mergetype == nomerge: |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29660
diff
changeset
|
1102 r, deleted = func(repo, mynode, orig, fcd, fco, fca, toolconf, labels) |
27034
86ede9eda252
filemerge: return whether the file was deleted
Siddharth Agarwal <sid0@fb.com>
parents:
27033
diff
changeset
|
1103 return True, r, deleted |
26512
4c52dd406adc
filemerge: indent filemerge.filemerge
Siddharth Agarwal <sid0@fb.com>
parents:
26224
diff
changeset
|
1104 |
26609
47681e77e484
filemerge: only print out "merging f" output at premerge step
Siddharth Agarwal <sid0@fb.com>
parents:
26608
diff
changeset
|
1105 if premerge: |
47681e77e484
filemerge: only print out "merging f" output at premerge step
Siddharth Agarwal <sid0@fb.com>
parents:
26608
diff
changeset
|
1106 if orig != fco.path(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1107 ui.status( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1108 _(b"merging %s and %s to %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1109 % (uipathfn(orig), uipathfn(fco.path()), fduipath) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1110 ) |
26609
47681e77e484
filemerge: only print out "merging f" output at premerge step
Siddharth Agarwal <sid0@fb.com>
parents:
26608
diff
changeset
|
1111 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1112 ui.status(_(b"merging %s\n") % fduipath) |
26528
8bfef5737321
filemerge: move 'merging' output to before file creation
Siddharth Agarwal <sid0@fb.com>
parents:
26527
diff
changeset
|
1113 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1114 ui.debug(b"my %s other %s ancestor %s\n" % (fcd, fco, fca)) |
26528
8bfef5737321
filemerge: move 'merging' output to before file creation
Siddharth Agarwal <sid0@fb.com>
parents:
26527
diff
changeset
|
1115 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1116 if precheck and not precheck(repo, mynode, orig, fcd, fco, fca, toolconf): |
26608
ae5b60d3294f
filemerge: deindent the parts of filemerge outside the try block
Siddharth Agarwal <sid0@fb.com>
parents:
26607
diff
changeset
|
1117 if onfailure: |
35282
46d7f0713a87
filemerge: raise InMemoryMergeConflictsError if we hit merge conflicts in IMM
Phil Cohen <phillco@fb.com>
parents:
35281
diff
changeset
|
1118 if wctx.isinmemory(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1119 raise error.InMemoryMergeConflictsError( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1120 b'in-memory merge does not support merge conflicts' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1121 ) |
41510
faa49a5914bb
merge: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
1122 ui.warn(onfailure % fduipath) |
27034
86ede9eda252
filemerge: return whether the file was deleted
Siddharth Agarwal <sid0@fb.com>
parents:
27033
diff
changeset
|
1123 return True, 1, False |
26529
7833b13b001f
filemerge: move precheck to before files are written out
Siddharth Agarwal <sid0@fb.com>
parents:
26528
diff
changeset
|
1124 |
34782
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
1125 back = _makebackup(repo, ui, wctx, fcd, premerge) |
34035
96123bdea43e
filemerge: reduce creation of tempfiles until needed
Phil Cohen <phillco@fb.com>
parents:
34034
diff
changeset
|
1126 files = (None, None, None, back) |
26589
fb388aa26453
filemerge: clean up temp files in a finally block
Siddharth Agarwal <sid0@fb.com>
parents:
26575
diff
changeset
|
1127 r = 1 |
fb388aa26453
filemerge: clean up temp files in a finally block
Siddharth Agarwal <sid0@fb.com>
parents:
26575
diff
changeset
|
1128 try: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1129 internalmarkerstyle = ui.config(b'ui', b'mergemarkers') |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1130 if isexternal: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1131 markerstyle = _toolstr(ui, tool, b'mergemarkers') |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1132 else: |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1133 markerstyle = internalmarkerstyle |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1134 |
26529
7833b13b001f
filemerge: move precheck to before files are written out
Siddharth Agarwal <sid0@fb.com>
parents:
26528
diff
changeset
|
1135 if not labels: |
7833b13b001f
filemerge: move precheck to before files are written out
Siddharth Agarwal <sid0@fb.com>
parents:
26528
diff
changeset
|
1136 labels = _defaultconflictlabels |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1137 formattedlabels = labels |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1138 if markerstyle != b'basic': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1139 formattedlabels = _formatlabels( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1140 repo, fcd, fco, fca, labels, tool=tool |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1141 ) |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
1142 |
26607
45a6233d5f50
filemerge: introduce a premerge flag and function
Siddharth Agarwal <sid0@fb.com>
parents:
26606
diff
changeset
|
1143 if premerge and mergetype == fullmerge: |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1144 # conflict markers generated by premerge will use 'detailed' |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1145 # settings if either ui.mergemarkers or the tool's mergemarkers |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1146 # setting is 'detailed'. This way tools can have basic labels in |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1147 # space-constrained areas of the UI, but still get full information |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1148 # in conflict markers if premerge is 'keep' or 'keep-merge3'. |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1149 premergelabels = labels |
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1150 labeltool = None |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1151 if markerstyle != b'basic': |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1152 # respect 'tool's mergemarkertemplate (which defaults to |
45767
40411ad2f5d2
config: rename ui.mergemarkertemplate to command-templates.mergemarker
Martin von Zweigbergk <martinvonz@google.com>
parents:
44872
diff
changeset
|
1153 # command-templates.mergemarker) |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1154 labeltool = tool |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1155 if internalmarkerstyle != b'basic' or markerstyle != b'basic': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1156 premergelabels = _formatlabels( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1157 repo, fcd, fco, fca, premergelabels, tool=labeltool |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1158 ) |
35907
9037c29e9f53
filemerge: support passing labels to external merge tools
Kyle Lippincott <spectral@google.com>
parents:
35829
diff
changeset
|
1159 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1160 r = _premerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1161 repo, fcd, fco, fca, toolconf, files, labels=premergelabels |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1162 ) |
26611
a5ff66e6d77a
filemerge: break overall filemerge into separate premerge and merge steps
Siddharth Agarwal <sid0@fb.com>
parents:
26610
diff
changeset
|
1163 # complete if premerge successful (r is 0) |
27034
86ede9eda252
filemerge: return whether the file was deleted
Siddharth Agarwal <sid0@fb.com>
parents:
27033
diff
changeset
|
1164 return not r, r, False |
26567
f18646cf0e93
filemerge: call premerge directly from main merge function
Siddharth Agarwal <sid0@fb.com>
parents:
26529
diff
changeset
|
1165 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1166 needcheck, r, deleted = func( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1167 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1168 mynode, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1169 orig, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1170 fcd, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1171 fco, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1172 fca, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1173 toolconf, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1174 files, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1175 labels=formattedlabels, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1176 ) |
27033
089dab8794dc
filemerge: return whether the file is deleted from all other merge tools
Siddharth Agarwal <sid0@fb.com>
parents:
27032
diff
changeset
|
1177 |
26575
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1178 if needcheck: |
34034
7558917f291e
filemerge: add `_workingpath`
Phil Cohen <phillco@fb.com>
parents:
34033
diff
changeset
|
1179 r = _check(repo, r, ui, tool, fcd, files) |
21519
25d5a9ecbb85
merge: add conflict marker formatter (BC)
Durham Goode <durham@fb.com>
parents:
21273
diff
changeset
|
1180 |
16125
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
1181 if r: |
83925d3a4559
filemerge: refactoring of 'filemerge()'
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
15738
diff
changeset
|
1182 if onfailure: |
35282
46d7f0713a87
filemerge: raise InMemoryMergeConflictsError if we hit merge conflicts in IMM
Phil Cohen <phillco@fb.com>
parents:
35281
diff
changeset
|
1183 if wctx.isinmemory(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1184 raise error.InMemoryMergeConflictsError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1185 b'in-memory merge ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1186 b'does not support ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1187 b'merge conflicts' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1188 ) |
41510
faa49a5914bb
merge: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
1189 ui.warn(onfailure % fduipath) |
34797
284fa44f7f39
merge: allow user to halt merge on merge-tool failures
Ryan McElroy <rmcelroy@fb.com>
parents:
34796
diff
changeset
|
1190 _onfilemergefailure(ui) |
26589
fb388aa26453
filemerge: clean up temp files in a finally block
Siddharth Agarwal <sid0@fb.com>
parents:
26575
diff
changeset
|
1191 |
27034
86ede9eda252
filemerge: return whether the file was deleted
Siddharth Agarwal <sid0@fb.com>
parents:
27033
diff
changeset
|
1192 return True, r, deleted |
26589
fb388aa26453
filemerge: clean up temp files in a finally block
Siddharth Agarwal <sid0@fb.com>
parents:
26575
diff
changeset
|
1193 finally: |
27047
e1458049dca5
filemerge: don't try to copy files known to be absent
Siddharth Agarwal <sid0@fb.com>
parents:
27042
diff
changeset
|
1194 if not r and back is not None: |
34782
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
1195 back.remove() |
6004
5af5f0f9d724
merge: allow smarter tool configuration
Matt Mackall <mpm@selenic.com>
parents:
6003
diff
changeset
|
1196 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1197 |
34796
ed91846c29cf
filemerge: introduce functions to halt merge flow
Ryan McElroy <rmcelroy@fb.com>
parents:
34785
diff
changeset
|
1198 def _haltmerge(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1199 msg = _(b'merge halted after failed merge (see hg resolve)') |
34796
ed91846c29cf
filemerge: introduce functions to halt merge flow
Ryan McElroy <rmcelroy@fb.com>
parents:
34785
diff
changeset
|
1200 raise error.InterventionRequired(msg) |
ed91846c29cf
filemerge: introduce functions to halt merge flow
Ryan McElroy <rmcelroy@fb.com>
parents:
34785
diff
changeset
|
1201 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1202 |
34796
ed91846c29cf
filemerge: introduce functions to halt merge flow
Ryan McElroy <rmcelroy@fb.com>
parents:
34785
diff
changeset
|
1203 def _onfilemergefailure(ui): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1204 action = ui.config(b'merge', b'on-failure') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1205 if action == b'prompt': |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1206 msg = _(b'continue merge operation (yn)?$$ &Yes $$ &No') |
34796
ed91846c29cf
filemerge: introduce functions to halt merge flow
Ryan McElroy <rmcelroy@fb.com>
parents:
34785
diff
changeset
|
1207 if ui.promptchoice(msg, 0) == 1: |
ed91846c29cf
filemerge: introduce functions to halt merge flow
Ryan McElroy <rmcelroy@fb.com>
parents:
34785
diff
changeset
|
1208 _haltmerge() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1209 if action == b'halt': |
34796
ed91846c29cf
filemerge: introduce functions to halt merge flow
Ryan McElroy <rmcelroy@fb.com>
parents:
34785
diff
changeset
|
1210 _haltmerge() |
ed91846c29cf
filemerge: introduce functions to halt merge flow
Ryan McElroy <rmcelroy@fb.com>
parents:
34785
diff
changeset
|
1211 # default action is 'continue', in which case we neither prompt nor halt |
ed91846c29cf
filemerge: introduce functions to halt merge flow
Ryan McElroy <rmcelroy@fb.com>
parents:
34785
diff
changeset
|
1212 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1213 |
38793
6c8e3c847977
resolve: add option to warn/abort on -m with unresolved conflict markers
Kyle Lippincott <spectral@google.com>
parents:
38165
diff
changeset
|
1214 def hasconflictmarkers(data): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1215 return bool( |
46356
0c95b59a89f1
resolve: also detect new :mergediff conflict markers
Martin von Zweigbergk <martinvonz@google.com>
parents:
46139
diff
changeset
|
1216 re.search( |
0c95b59a89f1
resolve: also detect new :mergediff conflict markers
Martin von Zweigbergk <martinvonz@google.com>
parents:
46139
diff
changeset
|
1217 br"^(<<<<<<<.*|=======.*|------- .*|\+\+\+\+\+\+\+ .*|>>>>>>>.*)$", |
0c95b59a89f1
resolve: also detect new :mergediff conflict markers
Martin von Zweigbergk <martinvonz@google.com>
parents:
46139
diff
changeset
|
1218 data, |
0c95b59a89f1
resolve: also detect new :mergediff conflict markers
Martin von Zweigbergk <martinvonz@google.com>
parents:
46139
diff
changeset
|
1219 re.MULTILINE, |
0c95b59a89f1
resolve: also detect new :mergediff conflict markers
Martin von Zweigbergk <martinvonz@google.com>
parents:
46139
diff
changeset
|
1220 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1221 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1222 |
38793
6c8e3c847977
resolve: add option to warn/abort on -m with unresolved conflict markers
Kyle Lippincott <spectral@google.com>
parents:
38165
diff
changeset
|
1223 |
34034
7558917f291e
filemerge: add `_workingpath`
Phil Cohen <phillco@fb.com>
parents:
34033
diff
changeset
|
1224 def _check(repo, r, ui, tool, fcd, files): |
26575
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1225 fd = fcd.path() |
41510
faa49a5914bb
merge: respect ui.relative-paths
Martin von Zweigbergk <martinvonz@google.com>
parents:
41365
diff
changeset
|
1226 uipathfn = scmutil.getuipathfn(repo) |
34034
7558917f291e
filemerge: add `_workingpath`
Phil Cohen <phillco@fb.com>
parents:
34033
diff
changeset
|
1227 unused, unused, unused, back = files |
26575
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1228 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1229 if not r and ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1230 _toolbool(ui, tool, b"checkconflicts") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1231 or b'conflicts' in _toollist(ui, tool, b"check") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1232 ): |
38793
6c8e3c847977
resolve: add option to warn/abort on -m with unresolved conflict markers
Kyle Lippincott <spectral@google.com>
parents:
38165
diff
changeset
|
1233 if hasconflictmarkers(fcd.data()): |
26575
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1234 r = 1 |
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1235 |
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1236 checked = False |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1237 if b'prompt' in _toollist(ui, tool, b"check"): |
26575
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1238 checked = True |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1239 if ui.promptchoice( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1240 _(b"was merge of '%s' successful (yn)?$$ &Yes $$ &No") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1241 % uipathfn(fd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1242 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1243 ): |
26575
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1244 r = 1 |
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1245 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1246 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1247 not r |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1248 and not checked |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1249 and ( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1250 _toolbool(ui, tool, b"checkchanged") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1251 or b'changed' in _toollist(ui, tool, b"check") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1252 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1253 ): |
34782
f21eecc64ace
filemerge: use arbitraryfilectx for backups
Phil Cohen <phillco@fb.com>
parents:
34506
diff
changeset
|
1254 if back is not None and not fcd.cmp(back): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1255 if ui.promptchoice( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1256 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1257 b" output file %s appears unchanged\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1258 b"was merge successful (yn)?" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1259 b"$$ &Yes $$ &No" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1260 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1261 % uipathfn(fd), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1262 1, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1263 ): |
26575
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1264 r = 1 |
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1265 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1266 if back is not None and _toolbool(ui, tool, b"fixeol"): |
34034
7558917f291e
filemerge: add `_workingpath`
Phil Cohen <phillco@fb.com>
parents:
34033
diff
changeset
|
1267 _matcheol(_workingpath(repo, fcd), back) |
26575
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1268 |
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1269 return r |
d60815664c34
filemerge: move post-merge checks into a separate function
Siddharth Agarwal <sid0@fb.com>
parents:
26574
diff
changeset
|
1270 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1271 |
34034
7558917f291e
filemerge: add `_workingpath`
Phil Cohen <phillco@fb.com>
parents:
34033
diff
changeset
|
1272 def _workingpath(repo, ctx): |
7558917f291e
filemerge: add `_workingpath`
Phil Cohen <phillco@fb.com>
parents:
34033
diff
changeset
|
1273 return repo.wjoin(ctx.path()) |
7558917f291e
filemerge: add `_workingpath`
Phil Cohen <phillco@fb.com>
parents:
34033
diff
changeset
|
1274 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1275 |
34122
c0ce60459d84
merge: pass wctx to premerge, filemerge
Phil Cohen <phillco@fb.com>
parents:
34076
diff
changeset
|
1276 def premerge(repo, wctx, mynode, orig, fcd, fco, fca, labels=None): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1277 return _filemerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1278 True, repo, wctx, mynode, orig, fcd, fco, fca, labels=labels |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1279 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1280 |
26607
45a6233d5f50
filemerge: introduce a premerge flag and function
Siddharth Agarwal <sid0@fb.com>
parents:
26606
diff
changeset
|
1281 |
34122
c0ce60459d84
merge: pass wctx to premerge, filemerge
Phil Cohen <phillco@fb.com>
parents:
34076
diff
changeset
|
1282 def filemerge(repo, wctx, mynode, orig, fcd, fco, fca, labels=None): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1283 return _filemerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1284 False, repo, wctx, mynode, orig, fcd, fco, fca, labels=labels |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1285 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1286 |
26605
ef21a2c41629
filemerge: add a wrapper around the filemerge function
Siddharth Agarwal <sid0@fb.com>
parents:
26589
diff
changeset
|
1287 |
33699
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
1288 def loadinternalmerge(ui, extname, registrarobj): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45768
diff
changeset
|
1289 """Load internal merge tool from specified registrarobj""" |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43089
diff
changeset
|
1290 for name, func in pycompat.iteritems(registrarobj._table): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1291 fullname = b':' + name |
33699
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
1292 internals[fullname] = func |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1293 internals[b'internal:' + name] = func |
33699
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
1294 internalsdoc[fullname] = func |
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
1295 |
39126
e09fad982ef5
filemerge: show actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39125
diff
changeset
|
1296 capabilities = sorted([k for k, v in func.capabilities.items() if v]) |
e09fad982ef5
filemerge: show actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39125
diff
changeset
|
1297 if capabilities: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1298 capdesc = b" (actual capabilities: %s)" % b', '.join( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1299 capabilities |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1300 ) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1301 func.__doc__ = func.__doc__ + pycompat.sysstr(b"\n\n%s" % capdesc) |
39267
88c5a3ef54b1
filemerge: avoid putting translated text into docstring
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39266
diff
changeset
|
1302 |
88c5a3ef54b1
filemerge: avoid putting translated text into docstring
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39266
diff
changeset
|
1303 # to put i18n comments into hg.pot for automatically generated texts |
88c5a3ef54b1
filemerge: avoid putting translated text into docstring
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39266
diff
changeset
|
1304 |
39359
bc0eb1dc6aae
filemerge: fix an i18n comment typo
Matt Harbison <matt_harbison@yahoo.com>
parents:
39285
diff
changeset
|
1305 # i18n: "binary" and "symlink" are keywords |
39267
88c5a3ef54b1
filemerge: avoid putting translated text into docstring
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39266
diff
changeset
|
1306 # i18n: this text is added automatically |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1307 _(b" (actual capabilities: binary, symlink)") |
39267
88c5a3ef54b1
filemerge: avoid putting translated text into docstring
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39266
diff
changeset
|
1308 # i18n: "binary" is keyword |
88c5a3ef54b1
filemerge: avoid putting translated text into docstring
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39266
diff
changeset
|
1309 # i18n: this text is added automatically |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1310 _(b" (actual capabilities: binary)") |
39267
88c5a3ef54b1
filemerge: avoid putting translated text into docstring
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39266
diff
changeset
|
1311 # i18n: "symlink" is keyword |
88c5a3ef54b1
filemerge: avoid putting translated text into docstring
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39266
diff
changeset
|
1312 # i18n: this text is added automatically |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1313 _(b" (actual capabilities: symlink)") |
39126
e09fad982ef5
filemerge: show actual capabilities of internal merge tools
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
39125
diff
changeset
|
1314 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42565
diff
changeset
|
1315 |
33699
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
1316 # load built-in merge tools explicitly to setup internalsdoc |
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
1317 loadinternalmerge(None, None, internaltool) |
50c44dee741a
filemerge: move decorator definition for internal merge tools to registrar
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
33523
diff
changeset
|
1318 |
16126
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
1319 # tell hggettext to extract docstrings from these functions: |
0c4bec9596d8
filemerge: create detail of internal merge tools from documentation string
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
16125
diff
changeset
|
1320 i18nfunctions = internals.values() |