Mercurial > hg
annotate mercurial/merge.py @ 43763:3fd6ec54704c
locarepo: also fastpath `nullid` lookup in __getitem__
We already use that fastpath for `"null"` and `nullrev`, using it for `nullid`
is similar.
Differential Revision: https://phab.mercurial-scm.org/D7486
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sat, 23 Nov 2019 16:49:34 -0800 |
parents | 95d2eab0a7b9 |
children | be8552f25cab |
rev | line source |
---|---|
2775
b550cd82f92a
Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
1 # merge.py - directory-level update/merge handling for Mercurial |
b550cd82f92a
Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2 # |
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4633
diff
changeset
|
3 # Copyright 2006, 2007 Matt Mackall <mpm@selenic.com> |
2775
b550cd82f92a
Move merge code to 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:
8152
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. |
2775
b550cd82f92a
Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
7 |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
8 from __future__ import absolute_import |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
9 |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
10 import errno |
29341
0d83ad967bf8
cleanup: replace uses of util.(md5|sha1|sha256|sha512) with hashlib.\1
Augie Fackler <raf@durin42.com>
parents:
29242
diff
changeset
|
11 import hashlib |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
12 import shutil |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
13 import stat |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
14 import struct |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
15 |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
16 from .i18n import _ |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
17 from .node import ( |
30361
1070df141718
dirstate: change added/modified placeholder hash length to 20 bytes
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
18 addednodeid, |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
19 bin, |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
20 hex, |
30362
3c6893ba2d36
merge: change modified indicator to be 20 bytes
Durham Goode <durham@fb.com>
parents:
30361
diff
changeset
|
21 modifiednodeid, |
27031
8be0af32e513
mergestate: allow storing and retrieving change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27027
diff
changeset
|
22 nullhex, |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
23 nullid, |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
24 nullrev, |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
25 ) |
43090
1f339b503a40
py3: manually import pycompat.delattr where it is needed
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43077
diff
changeset
|
26 from .pycompat import delattr |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
27 from .thirdparty import attr |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
28 from . import ( |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
29 copies, |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39464
diff
changeset
|
30 encoding, |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26570
diff
changeset
|
31 error, |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
32 filemerge, |
31257
11831d755b51
merge: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31175
diff
changeset
|
33 match as matchmod, |
33146
7017567ebdf2
obsutil: move 'foreground' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33095
diff
changeset
|
34 obsutil, |
43633
0b7733719d21
utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43421
diff
changeset
|
35 pathutil, |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30486
diff
changeset
|
36 pycompat, |
27656
57c0d4888ca8
batchget: add support for backing up files
Siddharth Agarwal <sid0@fb.com>
parents:
27655
diff
changeset
|
37 scmutil, |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35726
diff
changeset
|
38 subrepoutil, |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
39 util, |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
40 worker, |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
41 ) |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
42 |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
43 _pack = struct.pack |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
44 _unpack = struct.unpack |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
45 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
46 |
20593
3678707e4017
merge: add "other" file node in the merge state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20592
diff
changeset
|
47 def _droponode(data): |
3678707e4017
merge: add "other" file node in the merge state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20592
diff
changeset
|
48 # used for compatibility for v1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
49 bits = data.split(b'\0') |
20593
3678707e4017
merge: add "other" file node in the merge state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20592
diff
changeset
|
50 bits = bits[:-2] + bits[-1:] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
51 return b'\0'.join(bits) |
20593
3678707e4017
merge: add "other" file node in the merge state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20592
diff
changeset
|
52 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
53 |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
54 # Merge state record types. See ``mergestate`` docs for more. |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
55 RECORD_LOCAL = b'L' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
56 RECORD_OTHER = b'O' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
57 RECORD_MERGED = b'F' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
58 RECORD_CHANGEDELETE_CONFLICT = b'C' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
59 RECORD_MERGE_DRIVER_MERGE = b'D' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
60 RECORD_PATH_CONFLICT = b'P' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
61 RECORD_MERGE_DRIVER_STATE = b'm' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
62 RECORD_FILE_VALUES = b'f' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
63 RECORD_LABELS = b'l' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
64 RECORD_OVERRIDE = b't' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
65 RECORD_UNSUPPORTED_MANDATORY = b'X' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
66 RECORD_UNSUPPORTED_ADVISORY = b'x' |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
67 |
37110
1b158ca37ea4
merge: use constants for merge driver state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37109
diff
changeset
|
68 MERGE_DRIVER_STATE_UNMARKED = b'u' |
1b158ca37ea4
merge: use constants for merge driver state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37109
diff
changeset
|
69 MERGE_DRIVER_STATE_MARKED = b'm' |
1b158ca37ea4
merge: use constants for merge driver state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37109
diff
changeset
|
70 MERGE_DRIVER_STATE_SUCCESS = b's' |
1b158ca37ea4
merge: use constants for merge driver state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37109
diff
changeset
|
71 |
37111
aa5199c7aa42
merge: use constants for merge record state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
72 MERGE_RECORD_UNRESOLVED = b'u' |
aa5199c7aa42
merge: use constants for merge record state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
73 MERGE_RECORD_RESOLVED = b'r' |
aa5199c7aa42
merge: use constants for merge record state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
74 MERGE_RECORD_UNRESOLVED_PATH = b'pu' |
aa5199c7aa42
merge: use constants for merge record state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
75 MERGE_RECORD_RESOLVED_PATH = b'pr' |
aa5199c7aa42
merge: use constants for merge record state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
76 MERGE_RECORD_DRIVER_RESOLVED = b'd' |
aa5199c7aa42
merge: use constants for merge record state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
77 |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
78 ACTION_FORGET = b'f' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
79 ACTION_REMOVE = b'r' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
80 ACTION_ADD = b'a' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
81 ACTION_GET = b'g' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
82 ACTION_PATH_CONFLICT = b'p' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
83 ACTION_PATH_CONFLICT_RESOLVE = b'pr' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
84 ACTION_ADD_MODIFIED = b'am' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
85 ACTION_CREATED = b'c' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
86 ACTION_DELETED_CHANGED = b'dc' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
87 ACTION_CHANGED_DELETED = b'cd' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
88 ACTION_MERGE = b'm' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
89 ACTION_LOCAL_DIR_RENAME_GET = b'dg' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
90 ACTION_DIR_RENAME_MOVE_LOCAL = b'dm' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
91 ACTION_KEEP = b'k' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
92 ACTION_EXEC = b'e' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
93 ACTION_CREATED_MERGE = b'cm' |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
94 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
95 |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
96 class mergestate(object): |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
97 '''track 3-way merge state of individual files |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
98 |
27022
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
99 The merge state is stored on disk when needed. Two files are used: one with |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
100 an old format (version 1), and one with a new format (version 2). Version 2 |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
101 stores a superset of the data in version 1, including new kinds of records |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
102 in the future. For more about the new format, see the documentation for |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
103 `_readrecordsv2`. |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
104 |
27022
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
105 Each record can contain arbitrary content, and has an associated type. This |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
106 `type` should be a letter. If `type` is uppercase, the record is mandatory: |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
107 versions of Mercurial that don't support it should abort. If `type` is |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
108 lowercase, the record can be safely ignored. |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
109 |
27022
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
110 Currently known records: |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
111 |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
112 L: the node of the "local" part of the merge (hexified version) |
20591
02c60e380fd0
merge: record the "other" node in merge state
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20590
diff
changeset
|
113 O: the node of the "other" part of the merge (hexified version) |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
114 F: a file to be merged entry |
27031
8be0af32e513
mergestate: allow storing and retrieving change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27027
diff
changeset
|
115 C: a change/delete or delete/change conflict |
26650
6ff5534c8afc
merge.mergestate: add support for persisting driver-resolved files
Siddharth Agarwal <sid0@fb.com>
parents:
26649
diff
changeset
|
116 D: a file that the external merge driver will merge internally |
6ff5534c8afc
merge.mergestate: add support for persisting driver-resolved files
Siddharth Agarwal <sid0@fb.com>
parents:
26649
diff
changeset
|
117 (experimental) |
34545
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
118 P: a path conflict (file vs directory) |
26649
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
119 m: the external merge driver defined for this merge plus its run state |
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
120 (experimental) |
30332
318a24b52eeb
spelling: fixes of non-dictionary words
Mads Kiilerich <madski@unity3d.com>
parents:
30200
diff
changeset
|
121 f: a (filename, dictionary) tuple of optional values for a given file |
27027
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
122 X: unsupported mandatory record type (used in tests) |
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
123 x: unsupported advisory record type (used in tests) |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
124 l: the labels for the parts of the merge. |
26649
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
125 |
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
126 Merge driver run states (experimental): |
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
127 u: driver-resolved files unmarked -- needs to be run next time we're about |
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
128 to resolve or commit |
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
129 m: driver-resolved files marked -- only needs to be run before commit |
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
130 s: success/skipped -- does not need to be run any more |
27022
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
131 |
34545
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
132 Merge record states (stored in self._state, indexed by filename): |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
133 u: unresolved conflict |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
134 r: resolved conflict |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
135 pu: unresolved path conflict (file conflicts with directory) |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
136 pr: resolved path conflict |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
137 d: driver-resolved conflict |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
138 |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
139 The resolve command transitions between 'u' and 'r' for conflicts and |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
140 'pu' and 'pr' for path conflicts. |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
141 ''' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
142 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
143 statepathv1 = b'merge/state' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
144 statepathv2 = b'merge/state2' |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
145 |
26987
416b2b7d3068
mergestate: add a constructor that sets up a clean merge state
Siddharth Agarwal <sid0@fb.com>
parents:
26986
diff
changeset
|
146 @staticmethod |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
147 def clean(repo, node=None, other=None, labels=None): |
26987
416b2b7d3068
mergestate: add a constructor that sets up a clean merge state
Siddharth Agarwal <sid0@fb.com>
parents:
26986
diff
changeset
|
148 """Initialize a brand new merge state, removing any existing state on |
416b2b7d3068
mergestate: add a constructor that sets up a clean merge state
Siddharth Agarwal <sid0@fb.com>
parents:
26986
diff
changeset
|
149 disk.""" |
416b2b7d3068
mergestate: add a constructor that sets up a clean merge state
Siddharth Agarwal <sid0@fb.com>
parents:
26986
diff
changeset
|
150 ms = mergestate(repo) |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
151 ms.reset(node, other, labels) |
26987
416b2b7d3068
mergestate: add a constructor that sets up a clean merge state
Siddharth Agarwal <sid0@fb.com>
parents:
26986
diff
changeset
|
152 return ms |
416b2b7d3068
mergestate: add a constructor that sets up a clean merge state
Siddharth Agarwal <sid0@fb.com>
parents:
26986
diff
changeset
|
153 |
26991
2ddc92bae4a7
mergestate: add a constructor that reads state from disk
Siddharth Agarwal <sid0@fb.com>
parents:
26990
diff
changeset
|
154 @staticmethod |
2ddc92bae4a7
mergestate: add a constructor that reads state from disk
Siddharth Agarwal <sid0@fb.com>
parents:
26990
diff
changeset
|
155 def read(repo): |
2ddc92bae4a7
mergestate: add a constructor that reads state from disk
Siddharth Agarwal <sid0@fb.com>
parents:
26990
diff
changeset
|
156 """Initialize the merge state, reading it from disk.""" |
2ddc92bae4a7
mergestate: add a constructor that reads state from disk
Siddharth Agarwal <sid0@fb.com>
parents:
26990
diff
changeset
|
157 ms = mergestate(repo) |
27005
3185c01c551c
mergestate: move _read() call to read constructor
Siddharth Agarwal <sid0@fb.com>
parents:
26991
diff
changeset
|
158 ms._read() |
26991
2ddc92bae4a7
mergestate: add a constructor that reads state from disk
Siddharth Agarwal <sid0@fb.com>
parents:
26990
diff
changeset
|
159 return ms |
2ddc92bae4a7
mergestate: add a constructor that reads state from disk
Siddharth Agarwal <sid0@fb.com>
parents:
26990
diff
changeset
|
160 |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
161 def __init__(self, repo): |
27005
3185c01c551c
mergestate: move _read() call to read constructor
Siddharth Agarwal <sid0@fb.com>
parents:
26991
diff
changeset
|
162 """Initialize the merge state. |
3185c01c551c
mergestate: move _read() call to read constructor
Siddharth Agarwal <sid0@fb.com>
parents:
26991
diff
changeset
|
163 |
3185c01c551c
mergestate: move _read() call to read constructor
Siddharth Agarwal <sid0@fb.com>
parents:
26991
diff
changeset
|
164 Do not use this directly! Instead call read() or clean().""" |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
165 self._repo = repo |
12369
6f0d9d79111f
merge: delay writing the mergestate during until commit is called
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12279
diff
changeset
|
166 self._dirty = False |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
167 self._labels = None |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
168 |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
169 def reset(self, node=None, other=None, labels=None): |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
170 self._state = {} |
28009
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
171 self._stateextras = {} |
21261
6ca05c46aa95
mergestate: consistently set variables to None
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21203
diff
changeset
|
172 self._local = None |
6ca05c46aa95
mergestate: consistently set variables to None
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21203
diff
changeset
|
173 self._other = None |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
174 self._labels = labels |
43421
be384a2052aa
py3: don't use bytes with vars() or __dict__
Martin von Zweigbergk <martinvonz@google.com>
parents:
43117
diff
changeset
|
175 for var in ('localctx', 'otherctx'): |
27130
6f045b563fa5
mergestate: add a cached property accessor for the local context
Siddharth Agarwal <sid0@fb.com>
parents:
27129
diff
changeset
|
176 if var in vars(self): |
6f045b563fa5
mergestate: add a cached property accessor for the local context
Siddharth Agarwal <sid0@fb.com>
parents:
27129
diff
changeset
|
177 delattr(self, var) |
7848
89e05c02a4af
resolve: move reset to localrepo.commit
Matt Mackall <mpm@selenic.com>
parents:
7768
diff
changeset
|
178 if node: |
89e05c02a4af
resolve: move reset to localrepo.commit
Matt Mackall <mpm@selenic.com>
parents:
7768
diff
changeset
|
179 self._local = node |
20591
02c60e380fd0
merge: record the "other" node in merge state
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20590
diff
changeset
|
180 self._other = other |
26768
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
181 self._readmergedriver = None |
26769
5b00ec4c05cb
merge.mergestate: set merge driver state to 's' if there's none present
Siddharth Agarwal <sid0@fb.com>
parents:
26768
diff
changeset
|
182 if self.mergedriver: |
37110
1b158ca37ea4
merge: use constants for merge driver state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37109
diff
changeset
|
183 self._mdstate = MERGE_DRIVER_STATE_SUCCESS |
26769
5b00ec4c05cb
merge.mergestate: set merge driver state to 's' if there's none present
Siddharth Agarwal <sid0@fb.com>
parents:
26768
diff
changeset
|
184 else: |
37110
1b158ca37ea4
merge: use constants for merge driver state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37109
diff
changeset
|
185 self._mdstate = MERGE_DRIVER_STATE_UNMARKED |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
186 shutil.rmtree(self._repo.vfs.join(b'merge'), True) |
27074
78b0c88ab0db
mergestate._resolve: store return code and action for each file
Siddharth Agarwal <sid0@fb.com>
parents:
27049
diff
changeset
|
187 self._results = {} |
12369
6f0d9d79111f
merge: delay writing the mergestate during until commit is called
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12279
diff
changeset
|
188 self._dirty = False |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
189 |
6518 | 190 def _read(self): |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
191 """Analyse each record content to restore a serialized state from disk |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
192 |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
193 This function process "record" entry produced by the de-serialization |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
194 of on disk file. |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
195 """ |
6518 | 196 self._state = {} |
28009
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
197 self._stateextras = {} |
21261
6ca05c46aa95
mergestate: consistently set variables to None
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21203
diff
changeset
|
198 self._local = None |
6ca05c46aa95
mergestate: consistently set variables to None
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21203
diff
changeset
|
199 self._other = None |
43421
be384a2052aa
py3: don't use bytes with vars() or __dict__
Martin von Zweigbergk <martinvonz@google.com>
parents:
43117
diff
changeset
|
200 for var in ('localctx', 'otherctx'): |
27130
6f045b563fa5
mergestate: add a cached property accessor for the local context
Siddharth Agarwal <sid0@fb.com>
parents:
27129
diff
changeset
|
201 if var in vars(self): |
6f045b563fa5
mergestate: add a cached property accessor for the local context
Siddharth Agarwal <sid0@fb.com>
parents:
27129
diff
changeset
|
202 delattr(self, var) |
26768
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
203 self._readmergedriver = None |
37110
1b158ca37ea4
merge: use constants for merge driver state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37109
diff
changeset
|
204 self._mdstate = MERGE_DRIVER_STATE_SUCCESS |
26986
1ee5e48f09d4
mergestate: raise structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents:
26975
diff
changeset
|
205 unsupported = set() |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
206 records = self._readrecords() |
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
207 for rtype, record in records: |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
208 if rtype == RECORD_LOCAL: |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
209 self._local = bin(record) |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
210 elif rtype == RECORD_OTHER: |
20591
02c60e380fd0
merge: record the "other" node in merge state
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20590
diff
changeset
|
211 self._other = bin(record) |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
212 elif rtype == RECORD_MERGE_DRIVER_STATE: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
213 bits = record.split(b'\0', 1) |
26649
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
214 mdstate = bits[1] |
37110
1b158ca37ea4
merge: use constants for merge driver state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37109
diff
changeset
|
215 if len(mdstate) != 1 or mdstate not in ( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
216 MERGE_DRIVER_STATE_UNMARKED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
217 MERGE_DRIVER_STATE_MARKED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
218 MERGE_DRIVER_STATE_SUCCESS, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
219 ): |
26649
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
220 # the merge driver should be idempotent, so just rerun it |
37110
1b158ca37ea4
merge: use constants for merge driver state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37109
diff
changeset
|
221 mdstate = MERGE_DRIVER_STATE_UNMARKED |
26649
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
222 |
26768
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
223 self._readmergedriver = bits[0] |
26649
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
224 self._mdstate = mdstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
225 elif rtype in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
226 RECORD_MERGED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
227 RECORD_CHANGEDELETE_CONFLICT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
228 RECORD_PATH_CONFLICT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
229 RECORD_MERGE_DRIVER_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
230 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
231 bits = record.split(b'\0') |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
232 self._state[bits[0]] = bits[1:] |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
233 elif rtype == RECORD_FILE_VALUES: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
234 filename, rawextras = record.split(b'\0', 1) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
235 extraparts = rawextras.split(b'\0') |
28009
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
236 extras = {} |
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
237 i = 0 |
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
238 while i < len(extraparts): |
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
239 extras[extraparts[i]] = extraparts[i + 1] |
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
240 i += 2 |
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
241 |
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
242 self._stateextras[filename] = extras |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
243 elif rtype == RECORD_LABELS: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
244 labels = record.split(b'\0', 2) |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
245 self._labels = [l for l in labels if len(l) > 0] |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
246 elif not rtype.islower(): |
26986
1ee5e48f09d4
mergestate: raise structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents:
26975
diff
changeset
|
247 unsupported.add(rtype) |
27074
78b0c88ab0db
mergestate._resolve: store return code and action for each file
Siddharth Agarwal <sid0@fb.com>
parents:
27049
diff
changeset
|
248 self._results = {} |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
249 self._dirty = False |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
250 |
26986
1ee5e48f09d4
mergestate: raise structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents:
26975
diff
changeset
|
251 if unsupported: |
1ee5e48f09d4
mergestate: raise structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents:
26975
diff
changeset
|
252 raise error.UnsupportedMergeRecords(unsupported) |
1ee5e48f09d4
mergestate: raise structured exception for unsupported merge records
Siddharth Agarwal <sid0@fb.com>
parents:
26975
diff
changeset
|
253 |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
254 def _readrecords(self): |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
255 """Read merge state from disk and return a list of record (TYPE, data) |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
256 |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
20945
diff
changeset
|
257 We read data from both v1 and v2 files and decide which one to use. |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
258 |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
20945
diff
changeset
|
259 V1 has been used by version prior to 2.9.1 and contains less data than |
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
20945
diff
changeset
|
260 v2. We read both versions and check if no data in v2 contradicts |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
261 v1. If there is not contradiction we can safely assume that both v1 |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
262 and v2 were written at the same time and use the extract data in v2. If |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
263 there is contradiction we ignore v2 content as we assume an old version |
21024
7731a2281cf0
spelling: fixes from spell checker
Mads Kiilerich <madski@unity3d.com>
parents:
20945
diff
changeset
|
264 of Mercurial has overwritten the mergestate file and left an old v2 |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
265 file around. |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
266 |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
267 returns list of record [(TYPE, data), ...]""" |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
268 v1records = self._readrecordsv1() |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
269 v2records = self._readrecordsv2() |
26500
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
270 if self._v1v2match(v1records, v2records): |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
271 return v2records |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
272 else: |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
273 # v1 file is newer than v2 file, use it |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
274 # we have to infer the "other" changeset of the merge |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
275 # we cannot do better than that with v1 of the format |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
276 mctx = self._repo[None].parents()[-1] |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
277 v1records.append((RECORD_OTHER, mctx.hex())) |
26500
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
278 # add place holder "other" file node information |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
279 # nobody is using it yet so we do no need to fetch the data |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
280 # if mctx was wrong `mctx[bits[-2]]` may fails. |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
281 for idx, r in enumerate(v1records): |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
282 if r[0] == RECORD_MERGED: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
283 bits = r[1].split(b'\0') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
284 bits.insert(-2, b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
285 v1records[idx] = (r[0], b'\0'.join(bits)) |
26500
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
286 return v1records |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
287 |
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
288 def _v1v2match(self, v1records, v2records): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
289 oldv2 = set() # old format version of v2 record |
20593
3678707e4017
merge: add "other" file node in the merge state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20592
diff
changeset
|
290 for rec in v2records: |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
291 if rec[0] == RECORD_LOCAL: |
20593
3678707e4017
merge: add "other" file node in the merge state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20592
diff
changeset
|
292 oldv2.add(rec) |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
293 elif rec[0] == RECORD_MERGED: |
20593
3678707e4017
merge: add "other" file node in the merge state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20592
diff
changeset
|
294 # drop the onode data (not contained in v1) |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
295 oldv2.add((RECORD_MERGED, _droponode(rec[1]))) |
20593
3678707e4017
merge: add "other" file node in the merge state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20592
diff
changeset
|
296 for rec in v1records: |
3678707e4017
merge: add "other" file node in the merge state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20592
diff
changeset
|
297 if rec not in oldv2: |
26500
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
298 return False |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
299 else: |
26500
5bd7c4c07f6d
merge.mergestate: factor out code to validate v1/v2 records
Siddharth Agarwal <sid0@fb.com>
parents:
26361
diff
changeset
|
300 return True |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
301 |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
302 def _readrecordsv1(self): |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
303 """read on disk merge state for version 1 file |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
304 |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
305 returns list of record [(TYPE, data), ...] |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
306 |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
307 Note: the "F" data from this file are one entry short |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
308 (no "other file node" entry) |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
309 """ |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
310 records = [] |
6518 | 311 try: |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23656
diff
changeset
|
312 f = self._repo.vfs(self.statepathv1) |
6530
4b92591c69a7
merge: replace readline() call, missing from posixfile_nt
Patrick Mezard <pmezard@gmail.com>
parents:
6518
diff
changeset
|
313 for i, l in enumerate(f): |
4b92591c69a7
merge: replace readline() call, missing from posixfile_nt
Patrick Mezard <pmezard@gmail.com>
parents:
6518
diff
changeset
|
314 if i == 0: |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
315 records.append((RECORD_LOCAL, l[:-1])) |
6530
4b92591c69a7
merge: replace readline() call, missing from posixfile_nt
Patrick Mezard <pmezard@gmail.com>
parents:
6518
diff
changeset
|
316 else: |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
317 records.append((RECORD_MERGED, l[:-1])) |
13400
14f3795a5ed7
explicitly close files
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
13323
diff
changeset
|
318 f.close() |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25151
diff
changeset
|
319 except IOError as err: |
6518 | 320 if err.errno != errno.ENOENT: |
321 raise | |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
322 return records |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
323 |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
324 def _readrecordsv2(self): |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
325 """read on disk merge state for version 2 file |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
326 |
27022
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
327 This format is a list of arbitrary records of the form: |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
328 |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
329 [type][length][content] |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
330 |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
331 `type` is a single character, `length` is a 4 byte integer, and |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
332 `content` is an arbitrary byte sequence of length `length`. |
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
333 |
27027
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
334 Mercurial versions prior to 3.7 have a bug where if there are |
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
335 unsupported mandatory merge records, attempting to clear out the merge |
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
336 state with hg update --clean or similar aborts. The 't' record type |
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
337 works around that by writing out what those versions treat as an |
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
338 advisory record, but later versions interpret as special: the first |
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
339 character is the 'real' record type and everything onwards is the data. |
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
340 |
27022
35102876d648
mergestate: move binary format documentation into _readrecordsv2
Siddharth Agarwal <sid0@fb.com>
parents:
27006
diff
changeset
|
341 Returns list of records [(TYPE, data), ...].""" |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
342 records = [] |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
343 try: |
23877
7cc77030c557
localrepo: remove all external users of localrepo.opener
Angel Ezquerra <angel.ezquerra@gmail.com>
parents:
23656
diff
changeset
|
344 f = self._repo.vfs(self.statepathv2) |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
345 data = f.read() |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
346 off = 0 |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
347 end = len(data) |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
348 while off < end: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
349 rtype = data[off : off + 1] |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
350 off += 1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
351 length = _unpack(b'>I', data[off : (off + 4)])[0] |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
352 off += 4 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
353 record = data[off : (off + length)] |
20607
abd448767465
merge: fix spelling of length
Olle Lundberg <geek@nerd.sh>
parents:
20594
diff
changeset
|
354 off += length |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
355 if rtype == RECORD_OVERRIDE: |
36537
1d99260c3a81
py3: slice over bytes to prevent getting ascii values
Pulkit Goyal <7895pulkit@gmail.com>
parents:
36477
diff
changeset
|
356 rtype, record = record[0:1], record[1:] |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
357 records.append((rtype, record)) |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
358 f.close() |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25151
diff
changeset
|
359 except IOError as err: |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
360 if err.errno != errno.ENOENT: |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
361 raise |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
362 return records |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
363 |
26649
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
364 @util.propertycache |
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
365 def mergedriver(self): |
26768
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
366 # protect against the following: |
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
367 # - A configures a malicious merge driver in their hgrc, then |
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
368 # pauses the merge |
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
369 # - A edits their hgrc to remove references to the merge driver |
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
370 # - A gives a copy of their entire repo, including .hg, to B |
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
371 # - B inspects .hgrc and finds it to be clean |
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
372 # - B then continues the merge and the malicious merge driver |
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
373 # gets invoked |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
374 configmergedriver = self._repo.ui.config( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
375 b'experimental', b'mergedriver' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
376 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
377 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
378 self._readmergedriver is not None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
379 and self._readmergedriver != configmergedriver |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
380 ): |
26768
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
381 raise error.ConfigError( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
382 _(b"merge driver changed since merge started"), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
383 hint=_(b"revert merge driver change or abort merge"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
384 ) |
26768
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
385 |
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
386 return configmergedriver |
ac68769a5985
merge.mergestate: only check for merge driver when property is accessed
Siddharth Agarwal <sid0@fb.com>
parents:
26766
diff
changeset
|
387 |
26765
45976219eb80
merge.mergestate: add a way to get the other side of the merge
Siddharth Agarwal <sid0@fb.com>
parents:
26752
diff
changeset
|
388 @util.propertycache |
27130
6f045b563fa5
mergestate: add a cached property accessor for the local context
Siddharth Agarwal <sid0@fb.com>
parents:
27129
diff
changeset
|
389 def localctx(self): |
6f045b563fa5
mergestate: add a cached property accessor for the local context
Siddharth Agarwal <sid0@fb.com>
parents:
27129
diff
changeset
|
390 if self._local is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
391 msg = b"localctx accessed but self._local isn't set" |
31646 | 392 raise error.ProgrammingError(msg) |
27130
6f045b563fa5
mergestate: add a cached property accessor for the local context
Siddharth Agarwal <sid0@fb.com>
parents:
27129
diff
changeset
|
393 return self._repo[self._local] |
6f045b563fa5
mergestate: add a cached property accessor for the local context
Siddharth Agarwal <sid0@fb.com>
parents:
27129
diff
changeset
|
394 |
6f045b563fa5
mergestate: add a cached property accessor for the local context
Siddharth Agarwal <sid0@fb.com>
parents:
27129
diff
changeset
|
395 @util.propertycache |
26765
45976219eb80
merge.mergestate: add a way to get the other side of the merge
Siddharth Agarwal <sid0@fb.com>
parents:
26752
diff
changeset
|
396 def otherctx(self): |
27129
1bf1a7c3df43
mergestate: raise exception if otherctx is accessed but _other isn't set
Siddharth Agarwal <sid0@fb.com>
parents:
27122
diff
changeset
|
397 if self._other is None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
398 msg = b"otherctx accessed but self._other isn't set" |
31646 | 399 raise error.ProgrammingError(msg) |
26765
45976219eb80
merge.mergestate: add a way to get the other side of the merge
Siddharth Agarwal <sid0@fb.com>
parents:
26752
diff
changeset
|
400 return self._repo[self._other] |
26649
f618b6aa8cdd
merge.mergestate: add support for persisting a custom merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26641
diff
changeset
|
401 |
21264
4e932dc5c113
resolve: abort when not applicable (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21261
diff
changeset
|
402 def active(self): |
4e932dc5c113
resolve: abort when not applicable (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21261
diff
changeset
|
403 """Whether mergestate is active. |
4e932dc5c113
resolve: abort when not applicable (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21261
diff
changeset
|
404 |
4e932dc5c113
resolve: abort when not applicable (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21261
diff
changeset
|
405 Returns True if there appears to be mergestate. This is a rough proxy |
4e932dc5c113
resolve: abort when not applicable (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21261
diff
changeset
|
406 for "is a merge in progress." |
4e932dc5c113
resolve: abort when not applicable (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21261
diff
changeset
|
407 """ |
4e932dc5c113
resolve: abort when not applicable (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21261
diff
changeset
|
408 # Check local variables before looking at filesystem for performance |
4e932dc5c113
resolve: abort when not applicable (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21261
diff
changeset
|
409 # reasons. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
410 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
411 bool(self._local) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
412 or bool(self._state) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
413 or self._repo.vfs.exists(self.statepathv1) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
414 or self._repo.vfs.exists(self.statepathv2) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
415 ) |
21264
4e932dc5c113
resolve: abort when not applicable (BC)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21261
diff
changeset
|
416 |
12369
6f0d9d79111f
merge: delay writing the mergestate during until commit is called
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12279
diff
changeset
|
417 def commit(self): |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
418 """Write current state on disk (if necessary)""" |
12369
6f0d9d79111f
merge: delay writing the mergestate during until commit is called
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12279
diff
changeset
|
419 if self._dirty: |
27006
9d58dc193c46
mergestate.commit: factor out making the list of records
Siddharth Agarwal <sid0@fb.com>
parents:
27005
diff
changeset
|
420 records = self._makerecords() |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
421 self._writerecords(records) |
12369
6f0d9d79111f
merge: delay writing the mergestate during until commit is called
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12279
diff
changeset
|
422 self._dirty = False |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
423 |
27006
9d58dc193c46
mergestate.commit: factor out making the list of records
Siddharth Agarwal <sid0@fb.com>
parents:
27005
diff
changeset
|
424 def _makerecords(self): |
9d58dc193c46
mergestate.commit: factor out making the list of records
Siddharth Agarwal <sid0@fb.com>
parents:
27005
diff
changeset
|
425 records = [] |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
426 records.append((RECORD_LOCAL, hex(self._local))) |
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
427 records.append((RECORD_OTHER, hex(self._other))) |
27006
9d58dc193c46
mergestate.commit: factor out making the list of records
Siddharth Agarwal <sid0@fb.com>
parents:
27005
diff
changeset
|
428 if self.mergedriver: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
429 records.append( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
430 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
431 RECORD_MERGE_DRIVER_STATE, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
432 b'\0'.join([self.mergedriver, self._mdstate]), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
433 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
434 ) |
34560
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
435 # Write out state items. In all cases, the value of the state map entry |
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
436 # is written as the contents of the record. The record type depends on |
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
437 # the type of state that is stored, and capital-letter records are used |
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
438 # to prevent older versions of Mercurial that do not support the feature |
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
439 # from loading them. |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
440 for filename, v in pycompat.iteritems(self._state): |
37111
aa5199c7aa42
merge: use constants for merge record state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
441 if v[0] == MERGE_RECORD_DRIVER_RESOLVED: |
34560
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
442 # Driver-resolved merge. These are stored in 'D' records. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
443 records.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
444 (RECORD_MERGE_DRIVER_MERGE, b'\0'.join([filename] + v)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
445 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
446 elif v[0] in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
447 MERGE_RECORD_UNRESOLVED_PATH, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
448 MERGE_RECORD_RESOLVED_PATH, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
449 ): |
34560
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
450 # Path conflicts. These are stored in 'P' records. The current |
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
451 # resolution state ('pu' or 'pr') is stored within the record. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
452 records.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
453 (RECORD_PATH_CONFLICT, b'\0'.join([filename] + v)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
454 ) |
27031
8be0af32e513
mergestate: allow storing and retrieving change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27027
diff
changeset
|
455 elif v[1] == nullhex or v[6] == nullhex: |
34560
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
456 # Change/Delete or Delete/Change conflicts. These are stored in |
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
457 # 'C' records. v[1] is the local file, and is nullhex when the |
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
458 # file is deleted locally ('dc'). v[6] is the remote file, and |
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
459 # is nullhex when the file is deleted remotely ('cd'). |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
460 records.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
461 (RECORD_CHANGEDELETE_CONFLICT, b'\0'.join([filename] + v)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
462 ) |
27006
9d58dc193c46
mergestate.commit: factor out making the list of records
Siddharth Agarwal <sid0@fb.com>
parents:
27005
diff
changeset
|
463 else: |
34560
1248aa48cac9
merge: improve comments in mergestate._makerecords
Mark Thomas <mbthomas@fb.com>
parents:
34555
diff
changeset
|
464 # Normal files. These are stored in 'F' records. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
465 records.append((RECORD_MERGED, b'\0'.join([filename] + v))) |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
466 for filename, extras in sorted(pycompat.iteritems(self._stateextras)): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
467 rawextras = b'\0'.join( |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
468 b'%s\0%s' % (k, v) for k, v in pycompat.iteritems(extras) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
469 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
470 records.append( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
471 (RECORD_FILE_VALUES, b'%s\0%s' % (filename, rawextras)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
472 ) |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
473 if self._labels is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
474 labels = b'\0'.join(self._labels) |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
475 records.append((RECORD_LABELS, labels)) |
27006
9d58dc193c46
mergestate.commit: factor out making the list of records
Siddharth Agarwal <sid0@fb.com>
parents:
27005
diff
changeset
|
476 return records |
9d58dc193c46
mergestate.commit: factor out making the list of records
Siddharth Agarwal <sid0@fb.com>
parents:
27005
diff
changeset
|
477 |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
478 def _writerecords(self, records): |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
479 """Write current state on disk (both v1 and v2)""" |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
480 self._writerecordsv1(records) |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
481 self._writerecordsv2(records) |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
482 |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
483 def _writerecordsv1(self, records): |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
484 """Write current state on disk in a version 1 file""" |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
485 f = self._repo.vfs(self.statepathv1, b'wb') |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
486 irecords = iter(records) |
29216
ead25aa27a43
py3: convert to next() function
timeless <timeless@mozdev.org>
parents:
29148
diff
changeset
|
487 lrecords = next(irecords) |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
488 assert lrecords[0] == RECORD_LOCAL |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
489 f.write(hex(self._local) + b'\n') |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
490 for rtype, data in irecords: |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
491 if rtype == RECORD_MERGED: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
492 f.write(b'%s\n' % _droponode(data)) |
20589
31993cd23b11
merge: change the merge state serialisation to use a record based logic
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20588
diff
changeset
|
493 f.close() |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
494 |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
495 def _writerecordsv2(self, records): |
27027
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
496 """Write current state on disk in a version 2 file |
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
497 |
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
498 See the docstring for _readrecordsv2 for why we use 't'.""" |
a01ecbcfaf84
mergestate: handle additional record types specially
Siddharth Agarwal <sid0@fb.com>
parents:
27022
diff
changeset
|
499 # these are the records that all version 2 clients can read |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
500 allowlist = (RECORD_LOCAL, RECORD_OTHER, RECORD_MERGED) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
501 f = self._repo.vfs(self.statepathv2, b'wb') |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
502 for key, data in records: |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
503 assert len(key) == 1 |
37109
a532b2f54f95
merge: use constants for merge state record types
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37107
diff
changeset
|
504 if key not in allowlist: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
505 key, data = RECORD_OVERRIDE, b'%s%s' % (key, data) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
506 format = b'>sI%is' % len(data) |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
507 f.write(_pack(format, key, len(data), data)) |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
508 f.close() |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
509 |
41155
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
510 @staticmethod |
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
511 def getlocalkey(path): |
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
512 """hash the path of a local file context for storage in the .hg/merge |
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
513 directory.""" |
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
514 |
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
515 return hex(hashlib.sha1(path).digest()) |
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
516 |
18338
384df4db6520
merge: merge file flags together with file content
Mads Kiilerich <mads@kiilerich.com>
parents:
18336
diff
changeset
|
517 def add(self, fcl, fco, fca, fd): |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
518 """add a new (potentially?) conflicting file the merge state |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
519 fcl: file context for local, |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
520 fco: file context for remote, |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
521 fca: file context for ancestors, |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
522 fd: file path of the resulting merge. |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
523 |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
524 note: also write the local version to the `.hg/merge` directory. |
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
525 """ |
27049
0d61f7ec7f76
mergestate.add: store absentfilectxes as nullhex
Siddharth Agarwal <sid0@fb.com>
parents:
27048
diff
changeset
|
526 if fcl.isabsent(): |
41155
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
527 localkey = nullhex |
27049
0d61f7ec7f76
mergestate.add: store absentfilectxes as nullhex
Siddharth Agarwal <sid0@fb.com>
parents:
27048
diff
changeset
|
528 else: |
41155
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
529 localkey = mergestate.getlocalkey(fcl.path()) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
530 self._repo.vfs.write(b'merge/' + localkey, fcl.data()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
531 self._state[fd] = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
532 MERGE_RECORD_UNRESOLVED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
533 localkey, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
534 fcl.path(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
535 fca.path(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
536 hex(fca.filenode()), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
537 fco.path(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
538 hex(fco.filenode()), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
539 fcl.flags(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
540 ] |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
541 self._stateextras[fd] = {b'ancestorlinknode': hex(fca.node())} |
12369
6f0d9d79111f
merge: delay writing the mergestate during until commit is called
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12279
diff
changeset
|
542 self._dirty = True |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
543 |
34545
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
544 def addpath(self, path, frename, forigin): |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
545 """add a new conflicting path to the merge state |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
546 path: the path that conflicts |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
547 frename: the filename the conflicting file was renamed to |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
548 forigin: origin of the file ('l' or 'r' for local/remote) |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
549 """ |
37111
aa5199c7aa42
merge: use constants for merge record state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
550 self._state[path] = [MERGE_RECORD_UNRESOLVED_PATH, frename, forigin] |
34545
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
551 self._dirty = True |
1913162854f2
merge: add pathconflict merge state
Mark Thomas <mbthomas@fb.com>
parents:
34522
diff
changeset
|
552 |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
553 def __contains__(self, dfile): |
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
554 return dfile in self._state |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
555 |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
556 def __getitem__(self, dfile): |
6518 | 557 return self._state[dfile][0] |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
558 |
6518 | 559 def __iter__(self): |
21268
a0b8a912ec81
merge: simplify mergestate iter
Mads Kiilerich <mads@kiilerich.com>
parents:
21266
diff
changeset
|
560 return iter(sorted(self._state)) |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
561 |
19285
feaf5749d7a4
merge: add a files method to the mergestate class
Bryan O'Sullivan <bryano@fb.com>
parents:
19226
diff
changeset
|
562 def files(self): |
feaf5749d7a4
merge: add a files method to the mergestate class
Bryan O'Sullivan <bryano@fb.com>
parents:
19226
diff
changeset
|
563 return self._state.keys() |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
564 |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
565 def mark(self, dfile, state): |
6518 | 566 self._state[dfile][0] = state |
12369
6f0d9d79111f
merge: delay writing the mergestate during until commit is called
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
12279
diff
changeset
|
567 self._dirty = True |
20651
c1a52dd56eb4
merge: add blank line between mergestate's method
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20642
diff
changeset
|
568 |
26766
a83110faece1
merge.mergestate: add a way to get the merge driver state
Siddharth Agarwal <sid0@fb.com>
parents:
26765
diff
changeset
|
569 def mdstate(self): |
a83110faece1
merge.mergestate: add a way to get the merge driver state
Siddharth Agarwal <sid0@fb.com>
parents:
26765
diff
changeset
|
570 return self._mdstate |
a83110faece1
merge.mergestate: add a way to get the merge driver state
Siddharth Agarwal <sid0@fb.com>
parents:
26765
diff
changeset
|
571 |
21266
19d6fec60b81
resolve: print message when no unresolved files remain (issue4214)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21264
diff
changeset
|
572 def unresolved(self): |
19d6fec60b81
resolve: print message when no unresolved files remain (issue4214)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21264
diff
changeset
|
573 """Obtain the paths of unresolved files.""" |
19d6fec60b81
resolve: print message when no unresolved files remain (issue4214)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21264
diff
changeset
|
574 |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
575 for f, entry in pycompat.iteritems(self._state): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
576 if entry[0] in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
577 MERGE_RECORD_UNRESOLVED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
578 MERGE_RECORD_UNRESOLVED_PATH, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
579 ): |
21266
19d6fec60b81
resolve: print message when no unresolved files remain (issue4214)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21264
diff
changeset
|
580 yield f |
19d6fec60b81
resolve: print message when no unresolved files remain (issue4214)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
21264
diff
changeset
|
581 |
26740
f4a27c05c43f
merge.mergestate: add a generator for driver-resolved files
Siddharth Agarwal <sid0@fb.com>
parents:
26682
diff
changeset
|
582 def driverresolved(self): |
f4a27c05c43f
merge.mergestate: add a generator for driver-resolved files
Siddharth Agarwal <sid0@fb.com>
parents:
26682
diff
changeset
|
583 """Obtain the paths of driver-resolved files.""" |
f4a27c05c43f
merge.mergestate: add a generator for driver-resolved files
Siddharth Agarwal <sid0@fb.com>
parents:
26682
diff
changeset
|
584 |
f4a27c05c43f
merge.mergestate: add a generator for driver-resolved files
Siddharth Agarwal <sid0@fb.com>
parents:
26682
diff
changeset
|
585 for f, entry in self._state.items(): |
37111
aa5199c7aa42
merge: use constants for merge record state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
586 if entry[0] == MERGE_RECORD_DRIVER_RESOLVED: |
26740
f4a27c05c43f
merge.mergestate: add a generator for driver-resolved files
Siddharth Agarwal <sid0@fb.com>
parents:
26682
diff
changeset
|
587 yield f |
f4a27c05c43f
merge.mergestate: add a generator for driver-resolved files
Siddharth Agarwal <sid0@fb.com>
parents:
26682
diff
changeset
|
588 |
28009
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
589 def extras(self, filename): |
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
590 return self._stateextras.setdefault(filename, {}) |
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
591 |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
592 def _resolve(self, preresolve, dfile, wctx): |
20652
2a4871c2511d
merge: adds documentation to the mergestate class
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20651
diff
changeset
|
593 """rerun merge process for file path `dfile`""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
594 if self[dfile] in (MERGE_RECORD_RESOLVED, MERGE_RECORD_DRIVER_RESOLVED): |
26616
2f1fce0d4e86
merge.mergestate._resolve: also return completed status
Siddharth Agarwal <sid0@fb.com>
parents:
26615
diff
changeset
|
595 return True, 0 |
20593
3678707e4017
merge: add "other" file node in the merge state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20592
diff
changeset
|
596 stateentry = self._state[dfile] |
41155
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
597 state, localkey, lfile, afile, anode, ofile, onode, flags = stateentry |
20594
ba619c50a355
resolve: use "other" changeset from merge state (issue4163)
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20593
diff
changeset
|
598 octx = self._repo[self._other] |
28011
8abd9f785030
merge: add file ancestor linknode to mergestate
Durham Goode <durham@fb.com>
parents:
28009
diff
changeset
|
599 extras = self.extras(dfile) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
600 anccommitnode = extras.get(b'ancestorlinknode') |
28011
8abd9f785030
merge: add file ancestor linknode to mergestate
Durham Goode <durham@fb.com>
parents:
28009
diff
changeset
|
601 if anccommitnode: |
8abd9f785030
merge: add file ancestor linknode to mergestate
Durham Goode <durham@fb.com>
parents:
28009
diff
changeset
|
602 actx = self._repo[anccommitnode] |
8abd9f785030
merge: add file ancestor linknode to mergestate
Durham Goode <durham@fb.com>
parents:
28009
diff
changeset
|
603 else: |
8abd9f785030
merge: add file ancestor linknode to mergestate
Durham Goode <durham@fb.com>
parents:
28009
diff
changeset
|
604 actx = None |
41155
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
605 fcd = self._filectxorabsent(localkey, wctx, dfile) |
27048
86290f6f6599
mergestate._resolve: handle change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27035
diff
changeset
|
606 fco = self._filectxorabsent(onode, octx, ofile) |
86290f6f6599
mergestate._resolve: handle change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27035
diff
changeset
|
607 # TODO: move this to filectxorabsent |
37172
daef13da66fe
context: avoid using a context object as a changeid
Martin von Zweigbergk <martinvonz@google.com>
parents:
37125
diff
changeset
|
608 fca = self._repo.filectx(afile, fileid=anode, changectx=actx) |
18338
384df4db6520
merge: merge file flags together with file content
Mads Kiilerich <mads@kiilerich.com>
parents:
18336
diff
changeset
|
609 # "premerge" x flags |
384df4db6520
merge: merge file flags together with file content
Mads Kiilerich <mads@kiilerich.com>
parents:
18336
diff
changeset
|
610 flo = fco.flags() |
384df4db6520
merge: merge file flags together with file content
Mads Kiilerich <mads@kiilerich.com>
parents:
18336
diff
changeset
|
611 fla = fca.flags() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
612 if b'x' in flags + flo + fla and b'l' not in flags + flo + fla: |
30161
339f9d93daa6
merge: only show "cannot merge flags for %s" warning if flags are different
Mads Kiilerich <madski@unity3d.com>
parents:
30096
diff
changeset
|
613 if fca.node() == nullid and flags != flo: |
26617
dfd9811c5c9b
merge: introduce a preresolve function
Siddharth Agarwal <sid0@fb.com>
parents:
26616
diff
changeset
|
614 if preresolve: |
dfd9811c5c9b
merge: introduce a preresolve function
Siddharth Agarwal <sid0@fb.com>
parents:
26616
diff
changeset
|
615 self._repo.ui.warn( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
616 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
617 b'warning: cannot merge flags for %s ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
618 b'without common ancestor - keeping local flags\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
619 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
620 % afile |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
621 ) |
18338
384df4db6520
merge: merge file flags together with file content
Mads Kiilerich <mads@kiilerich.com>
parents:
18336
diff
changeset
|
622 elif flags == fla: |
384df4db6520
merge: merge file flags together with file content
Mads Kiilerich <mads@kiilerich.com>
parents:
18336
diff
changeset
|
623 flags = flo |
26617
dfd9811c5c9b
merge: introduce a preresolve function
Siddharth Agarwal <sid0@fb.com>
parents:
26616
diff
changeset
|
624 if preresolve: |
dfd9811c5c9b
merge: introduce a preresolve function
Siddharth Agarwal <sid0@fb.com>
parents:
26616
diff
changeset
|
625 # restore local |
41155
8c222bec97da
merge: make local file storage in the .hg/merge directory extensible
Daniel Ploch <dploch@google.com>
parents:
41050
diff
changeset
|
626 if localkey != nullhex: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
627 f = self._repo.vfs(b'merge/' + localkey) |
33083
05c680ebf512
merge: convert repo.wwrite() calls to wctx[f].write()
Phil Cohen <phillco@fb.com>
parents:
33082
diff
changeset
|
628 wctx[dfile].write(f.read(), flags) |
27048
86290f6f6599
mergestate._resolve: handle change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27035
diff
changeset
|
629 f.close() |
86290f6f6599
mergestate._resolve: handle change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27035
diff
changeset
|
630 else: |
33082
f9e50ee4c52b
merge: replace repo.wvfs.unlinkpath() with calls to wctx[f].remove()
Phil Cohen <phillco@fb.com>
parents:
33081
diff
changeset
|
631 wctx[dfile].remove(ignoremissing=True) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
632 complete, r, deleted = filemerge.premerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
633 self._repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
634 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
635 self._local, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
636 lfile, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
637 fcd, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
638 fco, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
639 fca, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
640 labels=self._labels, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
641 ) |
26617
dfd9811c5c9b
merge: introduce a preresolve function
Siddharth Agarwal <sid0@fb.com>
parents:
26616
diff
changeset
|
642 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
643 complete, r, deleted = filemerge.filemerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
644 self._repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
645 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
646 self._local, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
647 lfile, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
648 fcd, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
649 fco, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
650 fca, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
651 labels=self._labels, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
652 ) |
13536
fac040b7e822
merge: drop resolve state for mergers with identical contents (issue2680)
Matt Mackall <mpm@selenic.com>
parents:
13437
diff
changeset
|
653 if r is None: |
fac040b7e822
merge: drop resolve state for mergers with identical contents (issue2680)
Matt Mackall <mpm@selenic.com>
parents:
13437
diff
changeset
|
654 # no real conflict |
fac040b7e822
merge: drop resolve state for mergers with identical contents (issue2680)
Matt Mackall <mpm@selenic.com>
parents:
13437
diff
changeset
|
655 del self._state[dfile] |
28009
4a25e91fa55d
merge: add state extras merge state data
Durham Goode <durham@fb.com>
parents:
27951
diff
changeset
|
656 self._stateextras.pop(dfile, None) |
20792
89059c450c56
merge: mark mergestate as dirty when resolve changes _state
Mads Kiilerich <madski@unity3d.com>
parents:
20652
diff
changeset
|
657 self._dirty = True |
13536
fac040b7e822
merge: drop resolve state for mergers with identical contents (issue2680)
Matt Mackall <mpm@selenic.com>
parents:
13437
diff
changeset
|
658 elif not r: |
37111
aa5199c7aa42
merge: use constants for merge record state
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37110
diff
changeset
|
659 self.mark(dfile, MERGE_RECORD_RESOLVED) |
27035
de7bf242644e
merge.mergestate: compute dirstate action
Siddharth Agarwal <sid0@fb.com>
parents:
27034
diff
changeset
|
660 |
de7bf242644e
merge.mergestate: compute dirstate action
Siddharth Agarwal <sid0@fb.com>
parents:
27034
diff
changeset
|
661 if complete: |
27075
6373330155b2
mergestate._resolve: don't return the action any more
Siddharth Agarwal <sid0@fb.com>
parents:
27074
diff
changeset
|
662 action = None |
27035
de7bf242644e
merge.mergestate: compute dirstate action
Siddharth Agarwal <sid0@fb.com>
parents:
27034
diff
changeset
|
663 if deleted: |
27122
77d760ba8dcd
mergestate: explicitly forget 'dc' conflicts where the deleted side is picked
Siddharth Agarwal <sid0@fb.com>
parents:
27121
diff
changeset
|
664 if fcd.isabsent(): |
77d760ba8dcd
mergestate: explicitly forget 'dc' conflicts where the deleted side is picked
Siddharth Agarwal <sid0@fb.com>
parents:
27121
diff
changeset
|
665 # dc: local picked. Need to drop if present, which may |
77d760ba8dcd
mergestate: explicitly forget 'dc' conflicts where the deleted side is picked
Siddharth Agarwal <sid0@fb.com>
parents:
27121
diff
changeset
|
666 # happen on re-resolves. |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
667 action = ACTION_FORGET |
27122
77d760ba8dcd
mergestate: explicitly forget 'dc' conflicts where the deleted side is picked
Siddharth Agarwal <sid0@fb.com>
parents:
27121
diff
changeset
|
668 else: |
27035
de7bf242644e
merge.mergestate: compute dirstate action
Siddharth Agarwal <sid0@fb.com>
parents:
27034
diff
changeset
|
669 # cd: remote picked (or otherwise deleted) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
670 action = ACTION_REMOVE |
27035
de7bf242644e
merge.mergestate: compute dirstate action
Siddharth Agarwal <sid0@fb.com>
parents:
27034
diff
changeset
|
671 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
672 if fcd.isabsent(): # dc: remote picked |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
673 action = ACTION_GET |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
674 elif fco.isabsent(): # cd: local picked |
27131
d837da26155e
merge: add a new action type representing files to add/mark as modified
Siddharth Agarwal <sid0@fb.com>
parents:
27130
diff
changeset
|
675 if dfile in self.localctx: |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
676 action = ACTION_ADD_MODIFIED |
27131
d837da26155e
merge: add a new action type representing files to add/mark as modified
Siddharth Agarwal <sid0@fb.com>
parents:
27130
diff
changeset
|
677 else: |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
678 action = ACTION_ADD |
27035
de7bf242644e
merge.mergestate: compute dirstate action
Siddharth Agarwal <sid0@fb.com>
parents:
27034
diff
changeset
|
679 # else: regular merges (no action necessary) |
27074
78b0c88ab0db
mergestate._resolve: store return code and action for each file
Siddharth Agarwal <sid0@fb.com>
parents:
27049
diff
changeset
|
680 self._results[dfile] = r, action |
27035
de7bf242644e
merge.mergestate: compute dirstate action
Siddharth Agarwal <sid0@fb.com>
parents:
27034
diff
changeset
|
681 |
26616
2f1fce0d4e86
merge.mergestate._resolve: also return completed status
Siddharth Agarwal <sid0@fb.com>
parents:
26615
diff
changeset
|
682 return complete, r |
2775
b550cd82f92a
Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
683 |
27048
86290f6f6599
mergestate._resolve: handle change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27035
diff
changeset
|
684 def _filectxorabsent(self, hexnode, ctx, f): |
86290f6f6599
mergestate._resolve: handle change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27035
diff
changeset
|
685 if hexnode == nullhex: |
86290f6f6599
mergestate._resolve: handle change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27035
diff
changeset
|
686 return filemerge.absentfilectx(ctx, f) |
86290f6f6599
mergestate._resolve: handle change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27035
diff
changeset
|
687 else: |
86290f6f6599
mergestate._resolve: handle change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27035
diff
changeset
|
688 return ctx[f] |
86290f6f6599
mergestate._resolve: handle change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27035
diff
changeset
|
689 |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
690 def preresolve(self, dfile, wctx): |
26870
ab798d1a230f
merge.mergestate: update docstrings for preresolve and resolve
Siddharth Agarwal <sid0@fb.com>
parents:
26821
diff
changeset
|
691 """run premerge process for dfile |
ab798d1a230f
merge.mergestate: update docstrings for preresolve and resolve
Siddharth Agarwal <sid0@fb.com>
parents:
26821
diff
changeset
|
692 |
ab798d1a230f
merge.mergestate: update docstrings for preresolve and resolve
Siddharth Agarwal <sid0@fb.com>
parents:
26821
diff
changeset
|
693 Returns whether the merge is complete, and the exit code.""" |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
694 return self._resolve(True, dfile, wctx) |
26617
dfd9811c5c9b
merge: introduce a preresolve function
Siddharth Agarwal <sid0@fb.com>
parents:
26616
diff
changeset
|
695 |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
696 def resolve(self, dfile, wctx): |
26870
ab798d1a230f
merge.mergestate: update docstrings for preresolve and resolve
Siddharth Agarwal <sid0@fb.com>
parents:
26821
diff
changeset
|
697 """run merge process (assuming premerge was run) for dfile |
ab798d1a230f
merge.mergestate: update docstrings for preresolve and resolve
Siddharth Agarwal <sid0@fb.com>
parents:
26821
diff
changeset
|
698 |
ab798d1a230f
merge.mergestate: update docstrings for preresolve and resolve
Siddharth Agarwal <sid0@fb.com>
parents:
26821
diff
changeset
|
699 Returns the exit code of the merge.""" |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
700 return self._resolve(False, dfile, wctx)[1] |
26615
c9223a3979b7
merge.mergestate: add a wrapper around resolve
Siddharth Agarwal <sid0@fb.com>
parents:
26611
diff
changeset
|
701 |
27076
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
702 def counts(self): |
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
703 """return counts for updated, merged and removed files in this |
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
704 session""" |
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
705 updated, merged, removed = 0, 0, 0 |
43104
74802979dd9d
py3: define and use pycompat.itervalues()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43090
diff
changeset
|
706 for r, action in pycompat.itervalues(self._results): |
27076
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
707 if r is None: |
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
708 updated += 1 |
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
709 elif r == 0: |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
710 if action == ACTION_REMOVE: |
27076
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
711 removed += 1 |
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
712 else: |
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
713 merged += 1 |
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
714 return updated, merged, removed |
09139ccf3085
mergestate: add a method to return updated/merged/removed counts
Siddharth Agarwal <sid0@fb.com>
parents:
27075
diff
changeset
|
715 |
27077
ca3fbf9dad8c
mergestate: add a function to return the number of unresolved files
Siddharth Agarwal <sid0@fb.com>
parents:
27076
diff
changeset
|
716 def unresolvedcount(self): |
ca3fbf9dad8c
mergestate: add a function to return the number of unresolved files
Siddharth Agarwal <sid0@fb.com>
parents:
27076
diff
changeset
|
717 """get unresolved count for this merge (persistent)""" |
33311
f8f716da90fa
mergestate: implement unresolvedcount() in terms of unresolved()
Martin von Zweigbergk <martinvonz@google.com>
parents:
33310
diff
changeset
|
718 return len(list(self.unresolved())) |
27077
ca3fbf9dad8c
mergestate: add a function to return the number of unresolved files
Siddharth Agarwal <sid0@fb.com>
parents:
27076
diff
changeset
|
719 |
27079
a88a10a933b2
mergestate: add a method to compute actions to perform on dirstate
Siddharth Agarwal <sid0@fb.com>
parents:
27078
diff
changeset
|
720 def actions(self): |
a88a10a933b2
mergestate: add a method to compute actions to perform on dirstate
Siddharth Agarwal <sid0@fb.com>
parents:
27078
diff
changeset
|
721 """return lists of actions to perform on the dirstate""" |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
722 actions = { |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
723 ACTION_REMOVE: [], |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
724 ACTION_FORGET: [], |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
725 ACTION_ADD: [], |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
726 ACTION_ADD_MODIFIED: [], |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
727 ACTION_GET: [], |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
728 } |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
729 for f, (r, action) in pycompat.iteritems(self._results): |
27079
a88a10a933b2
mergestate: add a method to compute actions to perform on dirstate
Siddharth Agarwal <sid0@fb.com>
parents:
27078
diff
changeset
|
730 if action is not None: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
731 actions[action].append((f, None, b"merge result")) |
27079
a88a10a933b2
mergestate: add a method to compute actions to perform on dirstate
Siddharth Agarwal <sid0@fb.com>
parents:
27078
diff
changeset
|
732 return actions |
a88a10a933b2
mergestate: add a method to compute actions to perform on dirstate
Siddharth Agarwal <sid0@fb.com>
parents:
27078
diff
changeset
|
733 |
27088
e2b79f57903a
mergestate: add a way to record pending dirstate actions
Siddharth Agarwal <sid0@fb.com>
parents:
27087
diff
changeset
|
734 def recordactions(self): |
e2b79f57903a
mergestate: add a way to record pending dirstate actions
Siddharth Agarwal <sid0@fb.com>
parents:
27087
diff
changeset
|
735 """record remove/add/get actions in the dirstate""" |
e2b79f57903a
mergestate: add a way to record pending dirstate actions
Siddharth Agarwal <sid0@fb.com>
parents:
27087
diff
changeset
|
736 branchmerge = self._repo.dirstate.p2() != nullid |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
737 recordupdates(self._repo, self.actions(), branchmerge, None) |
27088
e2b79f57903a
mergestate: add a way to record pending dirstate actions
Siddharth Agarwal <sid0@fb.com>
parents:
27087
diff
changeset
|
738 |
27090
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
739 def queueremove(self, f): |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
740 """queues a file to be removed from the dirstate |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
741 |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
742 Meant for use by custom merge drivers.""" |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
743 self._results[f] = 0, ACTION_REMOVE |
27090
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
744 |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
745 def queueadd(self, f): |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
746 """queues a file to be added to the dirstate |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
747 |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
748 Meant for use by custom merge drivers.""" |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
749 self._results[f] = 0, ACTION_ADD |
27090
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
750 |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
751 def queueget(self, f): |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
752 """queues a file to be marked modified in the dirstate |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
753 |
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
754 Meant for use by custom merge drivers.""" |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
755 self._results[f] = 0, ACTION_GET |
27090
ef6f98473a48
mergestate: add methods to queue files to remove, add or get
Siddharth Agarwal <sid0@fb.com>
parents:
27088
diff
changeset
|
756 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
757 |
27740
da5634e1b8a3
merge: factor out code to get checkunknown config
Siddharth Agarwal <sid0@fb.com>
parents:
27657
diff
changeset
|
758 def _getcheckunknownconfig(repo, section, name): |
34522
bed1d2eaa108
configitems: register 'merge.checkunknown' and 'merge.checkignored'
Boris Feld <boris.feld@octobus.net>
parents:
34486
diff
changeset
|
759 config = repo.ui.config(section, name) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
760 valid = [b'abort', b'ignore', b'warn'] |
27740
da5634e1b8a3
merge: factor out code to get checkunknown config
Siddharth Agarwal <sid0@fb.com>
parents:
27657
diff
changeset
|
761 if config not in valid: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
762 validstr = b', '.join([b"'" + v + b"'" for v in valid]) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
763 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
|
764 _(b"%s.%s not valid ('%s' is none of %s)") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
765 % (section, name, config, validstr) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
766 ) |
27740
da5634e1b8a3
merge: factor out code to get checkunknown config
Siddharth Agarwal <sid0@fb.com>
parents:
27657
diff
changeset
|
767 return config |
da5634e1b8a3
merge: factor out code to get checkunknown config
Siddharth Agarwal <sid0@fb.com>
parents:
27657
diff
changeset
|
768 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
769 |
23653
0297d8469350
merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents:
23652
diff
changeset
|
770 def _checkunknownfile(repo, wctx, mctx, f, f2=None): |
35288
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
771 if wctx.isinmemory(): |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
772 # Nothing to do in IMM because nothing in the "working copy" can be an |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
773 # unknown file. |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
774 # |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
775 # Note that we should bail out here, not in ``_checkunknownfiles()``, |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
776 # because that function does other useful work. |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
777 return False |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
778 |
23653
0297d8469350
merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents:
23652
diff
changeset
|
779 if f2 is None: |
0297d8469350
merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents:
23652
diff
changeset
|
780 f2 = f |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
781 return ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
782 repo.wvfs.audit.check(f) |
28088
19424f960bf5
checkunknown: audit path before checking if it's a file or link
Durham Goode <durham@fb.com>
parents:
28022
diff
changeset
|
783 and repo.wvfs.isfileorlink(f) |
16284
2b0a406d3043
merge: fix unknown file merge detection for case-folding systems
Matt Mackall <mpm@selenic.com>
parents:
16261
diff
changeset
|
784 and repo.dirstate.normalize(f) not in repo.dirstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
785 and mctx[f2].cmp(wctx[f]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
786 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
787 |
16093
7e30f5f2285f
merge: refactor unknown file conflict checking
Matt Mackall <mpm@selenic.com>
parents:
16092
diff
changeset
|
788 |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
789 class _unknowndirschecker(object): |
34550
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
790 """ |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
791 Look for any unknown files or directories that may have a path conflict |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
792 with a file. If any path prefix of the file exists as a file or link, |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
793 then it conflicts. If the file itself is a directory that contains any |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
794 file that is not tracked, then it conflicts. |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
795 |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
796 Returns the shortest path at which a conflict occurs, or None if there is |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
797 no conflict. |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
798 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
799 |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
800 def __init__(self): |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
801 # A set of paths known to be good. This prevents repeated checking of |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
802 # dirs. It will be updated with any new dirs that are checked and found |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
803 # to be safe. |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
804 self._unknowndircache = set() |
34550
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
805 |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
806 # A set of paths that are known to be absent. This prevents repeated |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
807 # checking of subdirectories that are known not to exist. It will be |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
808 # updated with any new dirs that are checked and found to be absent. |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
809 self._missingdircache = set() |
34550
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
810 |
35288
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
811 def __call__(self, repo, wctx, f): |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
812 if wctx.isinmemory(): |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
813 # Nothing to do in IMM for the same reason as ``_checkunknownfile``. |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
814 return False |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
815 |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
816 # Check for path prefixes that exist as unknown files. |
43633
0b7733719d21
utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43421
diff
changeset
|
817 for p in reversed(list(pathutil.finddirs(f))): |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
818 if p in self._missingdircache: |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
819 return |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
820 if p in self._unknowndircache: |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
821 continue |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
822 if repo.wvfs.audit.check(p): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
823 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
824 repo.wvfs.isfileorlink(p) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
825 and repo.dirstate.normalize(p) not in repo.dirstate |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
826 ): |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
827 return p |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
828 if not repo.wvfs.lexists(p): |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
829 self._missingdircache.add(p) |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
830 return |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
831 self._unknowndircache.add(p) |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
832 |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
833 # Check if the file conflicts with a directory containing unknown files. |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
834 if repo.wvfs.audit.check(f) and repo.wvfs.isdir(f): |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
835 # Does the directory contain any files that are not in the dirstate? |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
836 for p, dirs, files in repo.wvfs.walk(f): |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
837 for fn in files: |
37086
658b1d28813c
merge: pconvert paths in _unknowndirschecker before dirstate-normalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
36537
diff
changeset
|
838 relf = util.pconvert(repo.wvfs.reljoin(p, fn)) |
37087
e4640ec346ac
merge: add 'isknown=True' to a dirstate.normalize() in _unknowndirschecker
Matt Harbison <matt_harbison@yahoo.com>
parents:
37086
diff
changeset
|
839 relf = repo.dirstate.normalize(relf, isknown=True) |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
840 if relf not in repo.dirstate: |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
841 return f |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
842 return None |
34550
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
843 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
844 |
28020
cffa46cbdb8f
merge: tell _checkunknownfiles about whether this was merge --force
Siddharth Agarwal <sid0@fb.com>
parents:
28019
diff
changeset
|
845 def _checkunknownfiles(repo, wctx, mctx, force, actions, mergeforce): |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
846 """ |
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
847 Considers any actions that care about the presence of conflicting unknown |
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
848 files. For some actions, the result is to abort; for others, it is to |
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
849 choose a different action. |
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
850 """ |
34551
1609a5afc4f5
merge: rename conflicts to fileconflicts in _checkunknownfiles
Mark Thomas <mbthomas@fb.com>
parents:
34550
diff
changeset
|
851 fileconflicts = set() |
34552
33c8a6837181
merge: check for path conflicts when updating (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34551
diff
changeset
|
852 pathconflicts = set() |
28018
3feadb0b6c34
merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com>
parents:
28011
diff
changeset
|
853 warnconflicts = set() |
3feadb0b6c34
merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com>
parents:
28011
diff
changeset
|
854 abortconflicts = set() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
855 unknownconfig = _getcheckunknownconfig(repo, b'merge', b'checkunknown') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
856 ignoredconfig = _getcheckunknownconfig(repo, b'merge', b'checkignored') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
857 pathconfig = repo.ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
858 b'experimental', b'merge.checkpathconflicts' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
859 ) |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
860 if not force: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
861 |
27741
3951f132958f
merge: determine what untracked conflicts cause warns and aborts separately
Siddharth Agarwal <sid0@fb.com>
parents:
27740
diff
changeset
|
862 def collectconflicts(conflicts, config): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
863 if config == b'abort': |
27741
3951f132958f
merge: determine what untracked conflicts cause warns and aborts separately
Siddharth Agarwal <sid0@fb.com>
parents:
27740
diff
changeset
|
864 abortconflicts.update(conflicts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
865 elif config == b'warn': |
27741
3951f132958f
merge: determine what untracked conflicts cause warns and aborts separately
Siddharth Agarwal <sid0@fb.com>
parents:
27740
diff
changeset
|
866 warnconflicts.update(conflicts) |
3951f132958f
merge: determine what untracked conflicts cause warns and aborts separately
Siddharth Agarwal <sid0@fb.com>
parents:
27740
diff
changeset
|
867 |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
868 checkunknowndirs = _unknowndirschecker() |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
869 for f, (m, args, msg) in pycompat.iteritems(actions): |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
870 if m in (ACTION_CREATED, ACTION_DELETED_CHANGED): |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
871 if _checkunknownfile(repo, wctx, mctx, f): |
34551
1609a5afc4f5
merge: rename conflicts to fileconflicts in _checkunknownfiles
Mark Thomas <mbthomas@fb.com>
parents:
34550
diff
changeset
|
872 fileconflicts.add(f) |
34941
37450a122128
merge: add a config option to disable path conflict checking
Siddharth Agarwal <sid0@fb.com>
parents:
34919
diff
changeset
|
873 elif pathconfig and f not in wctx: |
35288
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
874 path = checkunknowndirs(repo, wctx, f) |
34552
33c8a6837181
merge: check for path conflicts when updating (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34551
diff
changeset
|
875 if path is not None: |
33c8a6837181
merge: check for path conflicts when updating (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34551
diff
changeset
|
876 pathconflicts.add(path) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
877 elif m == ACTION_LOCAL_DIR_RENAME_GET: |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
878 if _checkunknownfile(repo, wctx, mctx, f, args[0]): |
34551
1609a5afc4f5
merge: rename conflicts to fileconflicts in _checkunknownfiles
Mark Thomas <mbthomas@fb.com>
parents:
34550
diff
changeset
|
879 fileconflicts.add(f) |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
880 |
34552
33c8a6837181
merge: check for path conflicts when updating (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34551
diff
changeset
|
881 allconflicts = fileconflicts | pathconflicts |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
882 ignoredconflicts = {c for c in allconflicts if repo.dirstate._ignore(c)} |
34551
1609a5afc4f5
merge: rename conflicts to fileconflicts in _checkunknownfiles
Mark Thomas <mbthomas@fb.com>
parents:
34550
diff
changeset
|
883 unknownconflicts = allconflicts - ignoredconflicts |
27742
6b639caa1652
merge: split up checks for unknown and ignored files that differ
Siddharth Agarwal <sid0@fb.com>
parents:
27741
diff
changeset
|
884 collectconflicts(ignoredconflicts, ignoredconfig) |
6b639caa1652
merge: split up checks for unknown and ignored files that differ
Siddharth Agarwal <sid0@fb.com>
parents:
27741
diff
changeset
|
885 collectconflicts(unknownconflicts, unknownconfig) |
28022
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
886 else: |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
887 for f, (m, args, msg) in pycompat.iteritems(actions): |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
888 if m == ACTION_CREATED_MERGE: |
28022
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
889 fl2, anc = args |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
890 different = _checkunknownfile(repo, wctx, mctx, f) |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
891 if repo.dirstate._ignore(f): |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
892 config = ignoredconfig |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
893 else: |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
894 config = unknownconfig |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
895 |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
896 # The behavior when force is True is described by this table: |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
897 # config different mergeforce | action backup |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
898 # * n * | get n |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
899 # * y y | merge - |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
900 # abort y n | merge - (1) |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
901 # warn y n | warn + get y |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
902 # ignore y n | get y |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
903 # |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
904 # (1) this is probably the wrong behavior here -- we should |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
905 # probably abort, but some actions like rebases currently |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
906 # don't like an abort happening in the middle of |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
907 # merge.update. |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
908 if not different: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
909 actions[f] = (ACTION_GET, (fl2, False), b'remote created') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
910 elif mergeforce or config == b'abort': |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
911 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
912 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
913 (f, f, None, False, anc), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
914 b'remote differs from untracked local', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
915 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
916 elif config == b'abort': |
28022
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
917 abortconflicts.add(f) |
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
918 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
919 if config == b'warn': |
28022
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
920 warnconflicts.add(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
921 actions[f] = (ACTION_GET, (fl2, True), b'remote created') |
27741
3951f132958f
merge: determine what untracked conflicts cause warns and aborts separately
Siddharth Agarwal <sid0@fb.com>
parents:
27740
diff
changeset
|
922 |
28018
3feadb0b6c34
merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com>
parents:
28011
diff
changeset
|
923 for f in sorted(abortconflicts): |
34553
0217d66846f7
merge: improve error messages for path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34552
diff
changeset
|
924 warn = repo.ui.warn |
0217d66846f7
merge: improve error messages for path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34552
diff
changeset
|
925 if f in pathconflicts: |
0217d66846f7
merge: improve error messages for path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34552
diff
changeset
|
926 if repo.wvfs.isfileorlink(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
927 warn(_(b"%s: untracked file conflicts with directory\n") % f) |
34553
0217d66846f7
merge: improve error messages for path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34552
diff
changeset
|
928 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
929 warn(_(b"%s: untracked directory conflicts with file\n") % f) |
34553
0217d66846f7
merge: improve error messages for path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34552
diff
changeset
|
930 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
931 warn(_(b"%s: untracked file differs\n") % f) |
28018
3feadb0b6c34
merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com>
parents:
28011
diff
changeset
|
932 if abortconflicts: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
933 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
934 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
935 b"untracked files in working directory " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
936 b"differ from files in requested revision" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
937 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
938 ) |
28018
3feadb0b6c34
merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com>
parents:
28011
diff
changeset
|
939 |
3feadb0b6c34
merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com>
parents:
28011
diff
changeset
|
940 for f in sorted(warnconflicts): |
34553
0217d66846f7
merge: improve error messages for path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34552
diff
changeset
|
941 if repo.wvfs.isfileorlink(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
942 repo.ui.warn(_(b"%s: replacing untracked file\n") % f) |
34553
0217d66846f7
merge: improve error messages for path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34552
diff
changeset
|
943 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
944 repo.ui.warn(_(b"%s: replacing untracked files in directory\n") % f) |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
945 |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
946 for f, (m, args, msg) in pycompat.iteritems(actions): |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
947 if m == ACTION_CREATED: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
948 backup = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
949 f in fileconflicts |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
950 or f in pathconflicts |
43633
0b7733719d21
utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43421
diff
changeset
|
951 or any(p in pathconflicts for p in pathutil.finddirs(f)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
952 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
953 (flags,) = args |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
954 actions[f] = (ACTION_GET, (flags, backup), msg) |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
955 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
956 |
6269
ffdf70e74623
merge: privatize some functions, unnest some others
Matt Mackall <mpm@selenic.com>
parents:
6268
diff
changeset
|
957 def _forgetremoved(wctx, mctx, branchmerge): |
3107
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
958 """ |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
959 Forget removed files |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
960 |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
961 If we're jumping between revisions (as opposed to merging), and if |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
962 neither the working directory nor the target rev has the file, |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
963 then we need to remove it from the dirstate, to prevent the |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
964 dirstate from listing the file when it is no longer in the |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
965 manifest. |
6242
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
966 |
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
967 If we're merging, and the other revision has removed a file |
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
968 that is not present in the working directory, we need to mark it |
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
969 as removed. |
3107
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
970 """ |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
971 |
23640
b46b9865dd08
merge: let _forgetremoved() work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23639
diff
changeset
|
972 actions = {} |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
973 m = ACTION_FORGET |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
974 if branchmerge: |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
975 m = ACTION_REMOVE |
6242
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
976 for f in wctx.deleted(): |
6272
dd9bd227ae9a
merge: simplify some helpers
Matt Mackall <mpm@selenic.com>
parents:
6271
diff
changeset
|
977 if f not in mctx: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
978 actions[f] = m, None, b"forget deleted" |
6242
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
979 |
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
980 if not branchmerge: |
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
981 for f in wctx.removed(): |
6272
dd9bd227ae9a
merge: simplify some helpers
Matt Mackall <mpm@selenic.com>
parents:
6271
diff
changeset
|
982 if f not in mctx: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
983 actions[f] = ACTION_FORGET, None, b"forget removed" |
3107
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
984 |
23640
b46b9865dd08
merge: let _forgetremoved() work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23639
diff
changeset
|
985 return actions |
3107
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
986 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
987 |
20640
52929dcdd512
merge: handle create+delete prompts in calculateupdates
Mads Kiilerich <madski@unity3d.com>
parents:
20639
diff
changeset
|
988 def _checkcollision(repo, wmf, actions): |
38045
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
989 """ |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
990 Check for case-folding collisions. |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
991 """ |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
992 |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
993 # If the repo is narrowed, filter out files outside the narrowspec. |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
994 narrowmatch = repo.narrowmatch() |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
995 if not narrowmatch.always(): |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
996 wmf = wmf.matches(narrowmatch) |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
997 if actions: |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
998 narrowactions = {} |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
999 for m, actionsfortype in pycompat.iteritems(actions): |
38045
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
1000 narrowactions[m] = [] |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
1001 for (f, args, msg) in actionsfortype: |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
1002 if narrowmatch(f): |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
1003 narrowactions[m].append((f, args, msg)) |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
1004 actions = narrowactions |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
1005 |
19105
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
1006 # build provisional merged manifest up |
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
1007 pmmf = set(wmf) |
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
1008 |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1009 if actions: |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1010 # KEEP and EXEC are no-op |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1011 for m in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1012 ACTION_ADD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1013 ACTION_ADD_MODIFIED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1014 ACTION_FORGET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1015 ACTION_GET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1016 ACTION_CHANGED_DELETED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1017 ACTION_DELETED_CHANGED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1018 ): |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1019 for f, args, msg in actions[m]: |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1020 pmmf.add(f) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1021 for f, args, msg in actions[ACTION_REMOVE]: |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1022 pmmf.discard(f) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1023 for f, args, msg in actions[ACTION_DIR_RENAME_MOVE_LOCAL]: |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1024 f2, flags = args |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1025 pmmf.discard(f2) |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1026 pmmf.add(f) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1027 for f, args, msg in actions[ACTION_LOCAL_DIR_RENAME_GET]: |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1028 pmmf.add(f) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1029 for f, args, msg in actions[ACTION_MERGE]: |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1030 f1, f2, fa, move, anc = args |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1031 if move: |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1032 pmmf.discard(f1) |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1033 pmmf.add(f) |
19105
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
1034 |
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
1035 # check case-folding collision in provisional merged manifest |
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
1036 foldmap = {} |
33808
055fee3547df
merge: removed sorting in casefolding detection, for a slight performance win
Alex Gaynor <agaynor@mozilla.com>
parents:
33499
diff
changeset
|
1037 for f in pmmf: |
19105
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
1038 fold = util.normcase(f) |
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
1039 if fold in foldmap: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1040 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1041 _(b"case-folding collision between %s and %s") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1042 % (f, foldmap[fold]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1043 ) |
19105
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
1044 foldmap[fold] = f |
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
1045 |
26661
2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
Mads Kiilerich <madski@unity3d.com>
parents:
26651
diff
changeset
|
1046 # check case-folding of directories |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1047 foldprefix = unfoldprefix = lastfull = b'' |
26661
2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
Mads Kiilerich <madski@unity3d.com>
parents:
26651
diff
changeset
|
1048 for fold, f in sorted(foldmap.items()): |
2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
Mads Kiilerich <madski@unity3d.com>
parents:
26651
diff
changeset
|
1049 if fold.startswith(foldprefix) and not f.startswith(unfoldprefix): |
2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
Mads Kiilerich <madski@unity3d.com>
parents:
26651
diff
changeset
|
1050 # the folded prefix matches but actual casing is different |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1051 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1052 _(b"case-folding collision between %s and directory of %s") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1053 % (lastfull, f) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1054 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1055 foldprefix = fold + b'/' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1056 unfoldprefix = f + b'/' |
26661
2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
Mads Kiilerich <madski@unity3d.com>
parents:
26651
diff
changeset
|
1057 lastfull = f |
2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
Mads Kiilerich <madski@unity3d.com>
parents:
26651
diff
changeset
|
1058 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1059 |
26785
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1060 def driverpreprocess(repo, ms, wctx, labels=None): |
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1061 """run the preprocess step of the merge driver, if any |
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1062 |
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1063 This is currently not implemented -- it's an extension point.""" |
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1064 return True |
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1065 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1066 |
26785
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1067 def driverconclude(repo, ms, wctx, labels=None): |
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1068 """run the conclude step of the merge driver, if any |
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1069 |
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1070 This is currently not implemented -- it's an extension point.""" |
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1071 return True |
e9a0d5f5c225
merge: add stubs for preprocess and conclude steps of merge driver
Siddharth Agarwal <sid0@fb.com>
parents:
26769
diff
changeset
|
1072 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1073 |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1074 def _filesindirs(repo, manifest, dirs): |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1075 """ |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1076 Generator that yields pairs of all the files in the manifest that are found |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1077 inside the directories listed in dirs, and which directory they are found |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1078 in. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1079 """ |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1080 for f in manifest: |
43633
0b7733719d21
utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43421
diff
changeset
|
1081 for p in pathutil.finddirs(f): |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1082 if p in dirs: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1083 yield f, p |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1084 break |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1085 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1086 |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1087 def checkpathconflicts(repo, wctx, mctx, actions): |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1088 """ |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1089 Check if any actions introduce path conflicts in the repository, updating |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1090 actions to record or handle the path conflict accordingly. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1091 """ |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1092 mf = wctx.manifest() |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1093 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1094 # The set of local files that conflict with a remote directory. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1095 localconflicts = set() |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1096 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1097 # The set of directories that conflict with a remote file, and so may cause |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1098 # conflicts if they still contain any files after the merge. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1099 remoteconflicts = set() |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1100 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1101 # The set of directories that appear as both a file and a directory in the |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1102 # remote manifest. These indicate an invalid remote manifest, which |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1103 # can't be updated to cleanly. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1104 invalidconflicts = set() |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1105 |
35172
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1106 # The set of directories that contain files that are being created. |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1107 createdfiledirs = set() |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1108 |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1109 # The set of files deleted by all the actions. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1110 deletedfiles = set() |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1111 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1112 for f, (m, args, msg) in actions.items(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1113 if m in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1114 ACTION_CREATED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1115 ACTION_DELETED_CHANGED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1116 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1117 ACTION_CREATED_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1118 ): |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1119 # This action may create a new local file. |
43633
0b7733719d21
utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43421
diff
changeset
|
1120 createdfiledirs.update(pathutil.finddirs(f)) |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1121 if mf.hasdir(f): |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1122 # The file aliases a local directory. This might be ok if all |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1123 # the files in the local directory are being deleted. This |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1124 # will be checked once we know what all the deleted files are. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1125 remoteconflicts.add(f) |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1126 # Track the names of all deleted files. |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1127 if m == ACTION_REMOVE: |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1128 deletedfiles.add(f) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1129 if m == ACTION_MERGE: |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1130 f1, f2, fa, move, anc = args |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1131 if move: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1132 deletedfiles.add(f1) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1133 if m == ACTION_DIR_RENAME_MOVE_LOCAL: |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1134 f2, flags = args |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1135 deletedfiles.add(f2) |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1136 |
35172
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1137 # Check all directories that contain created files for path conflicts. |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1138 for p in createdfiledirs: |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1139 if p in mf: |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1140 if p in mctx: |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1141 # A file is in a directory which aliases both a local |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1142 # and a remote file. This is an internal inconsistency |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1143 # within the remote manifest. |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1144 invalidconflicts.add(p) |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1145 else: |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1146 # A file is in a directory which aliases a local file. |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1147 # We will need to rename the local file. |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1148 localconflicts.add(p) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1149 if p in actions and actions[p][0] in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1150 ACTION_CREATED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1151 ACTION_DELETED_CHANGED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1152 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1153 ACTION_CREATED_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1154 ): |
35172
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1155 # The file is in a directory which aliases a remote file. |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1156 # This is an internal inconsistency within the remote |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1157 # manifest. |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1158 invalidconflicts.add(p) |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
1159 |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1160 # Rename all local conflicting files that have not been deleted. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1161 for p in localconflicts: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1162 if p not in deletedfiles: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1163 ctxname = bytes(wctx).rstrip(b'+') |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1164 pnew = util.safename(p, ctxname, wctx, set(actions.keys())) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1165 actions[pnew] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1166 ACTION_PATH_CONFLICT_RESOLVE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1167 (p,), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1168 b'local path conflict', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1169 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1170 actions[p] = (ACTION_PATH_CONFLICT, (pnew, b'l'), b'path conflict') |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1171 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1172 if remoteconflicts: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1173 # Check if all files in the conflicting directories have been removed. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1174 ctxname = bytes(mctx).rstrip(b'+') |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1175 for f, p in _filesindirs(repo, mf, remoteconflicts): |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1176 if f not in deletedfiles: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1177 m, args, msg = actions[p] |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1178 pnew = util.safename(p, ctxname, wctx, set(actions.keys())) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1179 if m in (ACTION_DELETED_CHANGED, ACTION_MERGE): |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1180 # Action was merge, just update target. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1181 actions[pnew] = (m, args, msg) |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1182 else: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1183 # Action was create, change to renamed get action. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1184 fl = args[0] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1185 actions[pnew] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1186 ACTION_LOCAL_DIR_RENAME_GET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1187 (p, fl), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1188 b'remote path conflict', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1189 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1190 actions[p] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1191 ACTION_PATH_CONFLICT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1192 (pnew, ACTION_REMOVE), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1193 b'path conflict', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1194 ) |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1195 remoteconflicts.remove(p) |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1196 break |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1197 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1198 if invalidconflicts: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1199 for p in invalidconflicts: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1200 repo.ui.warn(_(b"%s: is both a file and a directory\n") % p) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1201 raise error.Abort(_(b"destination manifest contains path conflicts")) |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1202 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1203 |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1204 def _filternarrowactions(narrowmatch, branchmerge, actions): |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1205 """ |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1206 Filters out actions that can ignored because the repo is narrowed. |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1207 |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1208 Raise an exception if the merge cannot be completed because the repo is |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1209 narrowed. |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1210 """ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1211 nooptypes = {b'k'} # TODO: handle with nonconflicttypes |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1212 nonconflicttypes = set(b'a am c cm f g r e'.split()) |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1213 # We mutate the items in the dict during iteration, so iterate |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1214 # over a copy. |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1215 for f, action in list(actions.items()): |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1216 if narrowmatch(f): |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1217 pass |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1218 elif not branchmerge: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1219 del actions[f] # just updating, ignore changes outside clone |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1220 elif action[0] in nooptypes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1221 del actions[f] # merge does not affect file |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1222 elif action[0] in nonconflicttypes: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1223 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1224 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1225 b'merge affects file \'%s\' outside narrow, ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1226 b'which is not yet supported' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1227 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1228 % f, |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1229 hint=_(b'merging in the other direction may work'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1230 ) |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1231 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1232 raise error.Abort( |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
1233 _(b'conflict in file \'%s\' is outside narrow clone') % f |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1234 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1235 |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1236 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1237 def manifestmerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1238 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1239 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1240 p2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1241 pa, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1242 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1243 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1244 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1245 acceptremote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1246 followcopies, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1247 forcefulldiff=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1248 ): |
3105
7c7469d41ade
merge: pull manifest comparison out into separate function
Matt Mackall <mpm@selenic.com>
parents:
3104
diff
changeset
|
1249 """ |
30096
98d3d8108db0
merge: update doc of manifestmerge() per 18c2184c27dc
Yuya Nishihara <yuya@tcha.org>
parents:
30060
diff
changeset
|
1250 Merge wctx and p2 with ancestor pa and generate merge action list |
3315
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
1251 |
18605
bcf29565d89f
manifestmerge: pass in branchmerge and force separately
Siddharth Agarwal <sid0@fb.com>
parents:
18544
diff
changeset
|
1252 branchmerge and force are as passed in to update |
27346
ba0da4b7397d
merge: rework manifestmerge to use a matcher
Augie Fackler <augie@google.com>
parents:
27345
diff
changeset
|
1253 matcher = matcher to filter file lists |
18778
1ef89df2c248
rebase: fix --collapse when a file was added then removed
Durham Goode <durham@fb.com>
parents:
18651
diff
changeset
|
1254 acceptremote = accept the incoming changes without prompting |
3105
7c7469d41ade
merge: pull manifest comparison out into separate function
Matt Mackall <mpm@selenic.com>
parents:
3104
diff
changeset
|
1255 """ |
27346
ba0da4b7397d
merge: rework manifestmerge to use a matcher
Augie Fackler <augie@google.com>
parents:
27345
diff
changeset
|
1256 if matcher is not None and matcher.always(): |
ba0da4b7397d
merge: rework manifestmerge to use a matcher
Augie Fackler <augie@google.com>
parents:
27345
diff
changeset
|
1257 matcher = None |
3105
7c7469d41ade
merge: pull manifest comparison out into separate function
Matt Mackall <mpm@selenic.com>
parents:
3104
diff
changeset
|
1258 |
30581
43a9e02a7b7f
graft: support grafting changes to new file in renamed directory (issue5436)
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30519
diff
changeset
|
1259 copy, movewithdir, diverge, renamedelete, dirmove = {}, {}, {}, {}, {} |
8753
af5f099d932b
merge: refactor manifestmerge init to better report effective ancestor
Matt Mackall <mpm@selenic.com>
parents:
8752
diff
changeset
|
1260 |
18651
e556659340f0
manifestmerge: fix order in which manifests are fetched
Siddharth Agarwal <sid0@fb.com>
parents:
18650
diff
changeset
|
1261 # manifests fetched in order are going to be faster, so prime the caches |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1262 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1263 x.manifest() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1264 for x in sorted(wctx.parents() + [p2, pa], key=scmutil.intrev) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1265 ] |
18651
e556659340f0
manifestmerge: fix order in which manifests are fetched
Siddharth Agarwal <sid0@fb.com>
parents:
18650
diff
changeset
|
1266 |
e556659340f0
manifestmerge: fix order in which manifests are fetched
Siddharth Agarwal <sid0@fb.com>
parents:
18650
diff
changeset
|
1267 if followcopies: |
18611
18c2184c27dc
merge: rename p1 to wctx in manifestmerge
Bryan O'Sullivan <bryano@fb.com>
parents:
18606
diff
changeset
|
1268 ret = copies.mergecopies(repo, wctx, p2, pa) |
30581
43a9e02a7b7f
graft: support grafting changes to new file in renamed directory (issue5436)
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30519
diff
changeset
|
1269 copy, movewithdir, diverge, renamedelete, dirmove = ret |
8753
af5f099d932b
merge: refactor manifestmerge init to better report effective ancestor
Matt Mackall <mpm@selenic.com>
parents:
8752
diff
changeset
|
1270 |
32641
49e1e5acb8ff
py3: convert bool variables to bytes before passing into ui.debug()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32612
diff
changeset
|
1271 boolbm = pycompat.bytestr(bool(branchmerge)) |
49e1e5acb8ff
py3: convert bool variables to bytes before passing into ui.debug()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32612
diff
changeset
|
1272 boolf = pycompat.bytestr(bool(force)) |
49e1e5acb8ff
py3: convert bool variables to bytes before passing into ui.debug()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32612
diff
changeset
|
1273 boolm = pycompat.bytestr(bool(matcher)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1274 repo.ui.note(_(b"resolving manifests\n")) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1275 repo.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1276 b" branchmerge: %s, force: %s, partial: %s\n" % (boolbm, boolf, boolm) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1277 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1278 repo.ui.debug(b" ancestor: %s, local: %s, remote: %s\n" % (pa, wctx, p2)) |
8753
af5f099d932b
merge: refactor manifestmerge init to better report effective ancestor
Matt Mackall <mpm@selenic.com>
parents:
8752
diff
changeset
|
1279 |
18611
18c2184c27dc
merge: rename p1 to wctx in manifestmerge
Bryan O'Sullivan <bryano@fb.com>
parents:
18606
diff
changeset
|
1280 m1, m2, ma = wctx.manifest(), p2.manifest(), pa.manifest() |
8753
af5f099d932b
merge: refactor manifestmerge init to better report effective ancestor
Matt Mackall <mpm@selenic.com>
parents:
8752
diff
changeset
|
1281 copied = set(copy.values()) |
18134
6c35b53cd28b
copies: separate moves via directory renames from explicit copies
Siddharth Agarwal <sid0@fb.com>
parents:
18042
diff
changeset
|
1282 copied.update(movewithdir.values()) |
3295
72d1e521da77
merge: use contexts for manifestmerge
Matt Mackall <mpm@selenic.com>
parents:
3292
diff
changeset
|
1283 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1284 if b'.hgsubstate' in m1 and wctx.rev() is None: |
38425
1322ae04d3d7
merge: do not fill manifest of committed revision with pseudo node (issue5526)
Yuya Nishihara <yuya@tcha.org>
parents:
37762
diff
changeset
|
1285 # Check whether sub state is modified, and overwrite the manifest |
1322ae04d3d7
merge: do not fill manifest of committed revision with pseudo node (issue5526)
Yuya Nishihara <yuya@tcha.org>
parents:
37762
diff
changeset
|
1286 # to flag the change. If wctx is a committed revision, we shouldn't |
1322ae04d3d7
merge: do not fill manifest of committed revision with pseudo node (issue5526)
Yuya Nishihara <yuya@tcha.org>
parents:
37762
diff
changeset
|
1287 # care for the dirty state of the working directory. |
28226
377f0d8ff874
merge: use any() instead of for loop when checking for dirty subrepos
Martin von Zweigbergk <martinvonz@google.com>
parents:
28200
diff
changeset
|
1288 if any(wctx.sub(s).dirty() for s in wctx.substate): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1289 m1[b'.hgsubstate'] = modifiednodeid |
9783
ee00ef6f9be7
submerge: properly deal with overwrites
Matt Mackall <mpm@selenic.com>
parents:
9780
diff
changeset
|
1290 |
32151
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1291 # Don't use m2-vs-ma optimization if: |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1292 # - ma is the same as m1 or m2, which we're just going to diff again later |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1293 # - The caller specifically asks for a full diff, which is useful during bid |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1294 # merge. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1295 if pa not in ([wctx, p2] + wctx.parents()) and not forcefulldiff: |
32151
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1296 # Identify which files are relevant to the merge, so we can limit the |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1297 # total m1-vs-m2 diff to just those files. This has significant |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1298 # performance benefits in large repositories. |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1299 relevantfiles = set(ma.diff(m2).keys()) |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1300 |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1301 # For copied and moved files, we need to add the source file too. |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
1302 for copykey, copyvalue in pycompat.iteritems(copy): |
32151
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1303 if copyvalue in relevantfiles: |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1304 relevantfiles.add(copykey) |
32863
9e3733d93f64
py3: replace dict.iterkeys() with iter(dict)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32657
diff
changeset
|
1305 for movedirkey in movewithdir: |
32151
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1306 relevantfiles.add(movedirkey) |
32498
bd56bea5ecf8
merge: use intersectmatchers() in "m2-vs-ma optimization"
Martin von Zweigbergk <martinvonz@google.com>
parents:
32351
diff
changeset
|
1307 filesmatcher = scmutil.matchfiles(repo, relevantfiles) |
bd56bea5ecf8
merge: use intersectmatchers() in "m2-vs-ma optimization"
Martin von Zweigbergk <martinvonz@google.com>
parents:
32351
diff
changeset
|
1308 matcher = matchmod.intersectmatchers(matcher, filesmatcher) |
32151
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
1309 |
31257
11831d755b51
merge: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31175
diff
changeset
|
1310 diff = m1.diff(m2, match=matcher) |
11831d755b51
merge: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31175
diff
changeset
|
1311 |
23637
13f53a2aa342
merge: write manifestmerge() using dictionary with entry per file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23544
diff
changeset
|
1312 actions = {} |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
1313 for f, ((n1, fl1), (n2, fl2)) in pycompat.iteritems(diff): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1314 if n1 and n2: # file exists on both local and remote side |
23396
6a254a2dd37c
merge: separate out "both created" cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23395
diff
changeset
|
1315 if f not in ma: |
23397
c7c95838be9a
merge: break out "both renamed a -> b" case
Martin von Zweigbergk <martinvonz@google.com>
parents:
23396
diff
changeset
|
1316 fa = copy.get(f, None) |
c7c95838be9a
merge: break out "both renamed a -> b" case
Martin von Zweigbergk <martinvonz@google.com>
parents:
23396
diff
changeset
|
1317 if fa is not None: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1318 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1319 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1320 (f, f, fa, False, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1321 b'both renamed from %s' % fa, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1322 ) |
18338
384df4db6520
merge: merge file flags together with file content
Mads Kiilerich <mads@kiilerich.com>
parents:
18336
diff
changeset
|
1323 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1324 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1325 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1326 (f, f, None, False, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1327 b'both created', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1328 ) |
16094
0776a6cababe
merge: don't use unknown()
Matt Mackall <mpm@selenic.com>
parents:
16093
diff
changeset
|
1329 else: |
23396
6a254a2dd37c
merge: separate out "both created" cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23395
diff
changeset
|
1330 a = ma[f] |
6a254a2dd37c
merge: separate out "both created" cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23395
diff
changeset
|
1331 fla = ma.flags(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1332 nol = b'l' not in fl1 + fl2 + fla |
23395
d9ebb475eede
merge: indent to prepare for next patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
23387
diff
changeset
|
1333 if n2 == a and fl2 == fla: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1334 actions[f] = (ACTION_KEEP, (), b'remote unchanged') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1335 elif n1 == a and fl1 == fla: # local unchanged - use remote |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1336 if n1 == n2: # optimization: keep local content |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1337 actions[f] = ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1338 ACTION_EXEC, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1339 (fl2,), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1340 b'update permissions', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1341 ) |
23395
d9ebb475eede
merge: indent to prepare for next patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
23387
diff
changeset
|
1342 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1343 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1344 ACTION_GET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1345 (fl2, False), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1346 b'remote is newer', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1347 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1348 elif nol and n2 == a: # remote only changed 'x' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1349 actions[f] = (ACTION_EXEC, (fl2,), b'update permissions') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1350 elif nol and n1 == a: # local only changed 'x' |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1351 actions[f] = (ACTION_GET, (fl1, False), b'remote is newer') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1352 else: # both changed something |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1353 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1354 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1355 (f, f, f, False, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1356 b'versions differ', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1357 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1358 elif n1: # file exists only on local side |
23474
9f4ac44a7273
merge: duplicate 'if f in copied' into each branch
Martin von Zweigbergk <martinvonz@google.com>
parents:
23473
diff
changeset
|
1359 if f in copied: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1360 pass # we'll deal with it on m2 side |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1361 elif f in movewithdir: # directory rename, move local |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1362 f2 = movewithdir[f] |
31515
527a247f114f
merge: remove unnecessary matcher checks
Durham Goode <durham@fb.com>
parents:
31475
diff
changeset
|
1363 if f2 in m2: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1364 actions[f2] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1365 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1366 (f, f2, None, True, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1367 b'remote directory rename, both created', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1368 ) |
23475
67f1d68861fb
merge: don't ignore conflicting file in remote renamed directory
Martin von Zweigbergk <martinvonz@google.com>
parents:
23474
diff
changeset
|
1369 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1370 actions[f2] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1371 ACTION_DIR_RENAME_MOVE_LOCAL, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1372 (f, fl1), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1373 b'remote directory rename - move from %s' % f, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1374 ) |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1375 elif f in copy: |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1376 f2 = copy[f] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1377 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1378 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1379 (f, f2, f2, False, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1380 b'local copied/moved from %s' % f2, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1381 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1382 elif f in ma: # clean, a different, no remote |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1383 if n1 != ma[f]: |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1384 if acceptremote: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1385 actions[f] = (ACTION_REMOVE, None, b'remote delete') |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1386 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1387 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1388 ACTION_CHANGED_DELETED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1389 (f, None, f, False, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1390 b'prompt changed/deleted', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1391 ) |
30361
1070df141718
dirstate: change added/modified placeholder hash length to 20 bytes
Durham Goode <durham@fb.com>
parents:
30332
diff
changeset
|
1392 elif n1 == addednodeid: |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1393 # This extra 'a' is added by working copy manifest to mark |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1394 # the file as locally added. We should forget it instead of |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1395 # deleting it. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1396 actions[f] = (ACTION_FORGET, None, b'remote deleted') |
20639
1df033640a8e
merge: handle acceptremove of create+delete early in manifest merge
Mads Kiilerich <madski@unity3d.com>
parents:
20620
diff
changeset
|
1397 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1398 actions[f] = (ACTION_REMOVE, None, b'other deleted') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1399 elif n2: # file exists only on remote side |
23474
9f4ac44a7273
merge: duplicate 'if f in copied' into each branch
Martin von Zweigbergk <martinvonz@google.com>
parents:
23473
diff
changeset
|
1400 if f in copied: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1401 pass # we'll deal with it on m1 side |
23474
9f4ac44a7273
merge: duplicate 'if f in copied' into each branch
Martin von Zweigbergk <martinvonz@google.com>
parents:
23473
diff
changeset
|
1402 elif f in movewithdir: |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1403 f2 = movewithdir[f] |
31515
527a247f114f
merge: remove unnecessary matcher checks
Durham Goode <durham@fb.com>
parents:
31475
diff
changeset
|
1404 if f2 in m1: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1405 actions[f2] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1406 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1407 (f2, f, None, False, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1408 b'local directory rename, both created', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1409 ) |
23476
39a12719ec65
merge: don't overwrite conflicting file in locally renamed directory
Martin von Zweigbergk <martinvonz@google.com>
parents:
23475
diff
changeset
|
1410 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1411 actions[f2] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1412 ACTION_LOCAL_DIR_RENAME_GET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1413 (f, fl2), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1414 b'local directory rename - get from %s' % f, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1415 ) |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1416 elif f in copy: |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1417 f2 = copy[f] |
31515
527a247f114f
merge: remove unnecessary matcher checks
Durham Goode <durham@fb.com>
parents:
31475
diff
changeset
|
1418 if f2 in m2: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1419 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1420 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1421 (f2, f, f2, False, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1422 b'remote copied from %s' % f2, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1423 ) |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1424 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1425 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1426 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1427 (f2, f, f2, True, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1428 b'remote moved from %s' % f2, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1429 ) |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1430 elif f not in ma: |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1431 # local unknown, remote created: the logic is described by the |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1432 # following table: |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1433 # |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1434 # force branchmerge different | action |
23651
72da02d7f126
merge: collect checking for unknown files at end of manifestmerge()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23650
diff
changeset
|
1435 # n * * | create |
23650
b85c548ab14d
merge: introduce 'c' action like 'g', but with additional safety
Martin von Zweigbergk <martinvonz@google.com>
parents:
23649
diff
changeset
|
1436 # y n * | create |
b85c548ab14d
merge: introduce 'c' action like 'g', but with additional safety
Martin von Zweigbergk <martinvonz@google.com>
parents:
23649
diff
changeset
|
1437 # y y n | create |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1438 # y y y | merge |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1439 # |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1440 # Checking whether the files are different is expensive, so we |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1441 # don't do that when we can avoid it. |
23649
18ab5e5955df
merge: structure 'remote created' code to match table
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
1442 if not force: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1443 actions[f] = (ACTION_CREATED, (fl2,), b'remote created') |
23649
18ab5e5955df
merge: structure 'remote created' code to match table
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
1444 elif not branchmerge: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1445 actions[f] = (ACTION_CREATED, (fl2,), b'remote created') |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1446 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1447 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1448 ACTION_CREATED_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1449 (fl2, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1450 b'remote created, get or merge', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1451 ) |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1452 elif n2 != ma[f]: |
30581
43a9e02a7b7f
graft: support grafting changes to new file in renamed directory (issue5436)
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30519
diff
changeset
|
1453 df = None |
43a9e02a7b7f
graft: support grafting changes to new file in renamed directory (issue5436)
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30519
diff
changeset
|
1454 for d in dirmove: |
43a9e02a7b7f
graft: support grafting changes to new file in renamed directory (issue5436)
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30519
diff
changeset
|
1455 if f.startswith(d): |
43a9e02a7b7f
graft: support grafting changes to new file in renamed directory (issue5436)
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30519
diff
changeset
|
1456 # new file added in a directory that was moved |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1457 df = dirmove[d] + f[len(d) :] |
30581
43a9e02a7b7f
graft: support grafting changes to new file in renamed directory (issue5436)
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30519
diff
changeset
|
1458 break |
31515
527a247f114f
merge: remove unnecessary matcher checks
Durham Goode <durham@fb.com>
parents:
31475
diff
changeset
|
1459 if df is not None and df in m1: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1460 actions[df] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1461 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1462 (df, f, f, False, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1463 b'local directory rename - respect move ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1464 b'from %s' % f, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1465 ) |
30581
43a9e02a7b7f
graft: support grafting changes to new file in renamed directory (issue5436)
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30519
diff
changeset
|
1466 elif acceptremote: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1467 actions[f] = (ACTION_CREATED, (fl2,), b'remote recreating') |
18606
95773237df7f
manifestmerge: handle abort on local unknown, remote created files
Siddharth Agarwal <sid0@fb.com>
parents:
18605
diff
changeset
|
1468 else: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1469 actions[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1470 ACTION_DELETED_CHANGED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1471 (None, f, f, False, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1472 b'prompt deleted/changed', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1473 ) |
23651
72da02d7f126
merge: collect checking for unknown files at end of manifestmerge()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23650
diff
changeset
|
1474 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1475 if repo.ui.configbool(b'experimental', b'merge.checkpathconflicts'): |
34941
37450a122128
merge: add a config option to disable path conflict checking
Siddharth Agarwal <sid0@fb.com>
parents:
34919
diff
changeset
|
1476 # If we are merging, look for path conflicts. |
37450a122128
merge: add a config option to disable path conflict checking
Siddharth Agarwal <sid0@fb.com>
parents:
34919
diff
changeset
|
1477 checkpathconflicts(repo, wctx, p2, actions) |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1478 |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1479 narrowmatch = repo.narrowmatch() |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1480 if not narrowmatch.always(): |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1481 # Updates "actions" in place |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1482 _filternarrowactions(narrowmatch, branchmerge, actions) |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1483 |
23526
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23525
diff
changeset
|
1484 return actions, diverge, renamedelete |
3105
7c7469d41ade
merge: pull manifest comparison out into separate function
Matt Mackall <mpm@selenic.com>
parents:
3104
diff
changeset
|
1485 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1486 |
23531
416c133145ee
merge: extract _resolvetrivial() function
Martin von Zweigbergk <martinvonz@google.com>
parents:
23526
diff
changeset
|
1487 def _resolvetrivial(repo, wctx, mctx, ancestor, actions): |
416c133145ee
merge: extract _resolvetrivial() function
Martin von Zweigbergk <martinvonz@google.com>
parents:
23526
diff
changeset
|
1488 """Resolves false conflicts where the nodeid changed but the content |
416c133145ee
merge: extract _resolvetrivial() function
Martin von Zweigbergk <martinvonz@google.com>
parents:
23526
diff
changeset
|
1489 remained the same.""" |
36316
759579bac31d
merge: make a copy of dict.items() before mutating the dict during iteration
Augie Fackler <augie@google.com>
parents:
36177
diff
changeset
|
1490 # We force a copy of actions.items() because we're going to mutate |
759579bac31d
merge: make a copy of dict.items() before mutating the dict during iteration
Augie Fackler <augie@google.com>
parents:
36177
diff
changeset
|
1491 # actions as we resolve trivial conflicts. |
759579bac31d
merge: make a copy of dict.items() before mutating the dict during iteration
Augie Fackler <augie@google.com>
parents:
36177
diff
changeset
|
1492 for f, (m, args, msg) in list(actions.items()): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1493 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1494 m == ACTION_CHANGED_DELETED |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1495 and f in ancestor |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1496 and not wctx[f].cmp(ancestor[f]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1497 ): |
23531
416c133145ee
merge: extract _resolvetrivial() function
Martin von Zweigbergk <martinvonz@google.com>
parents:
23526
diff
changeset
|
1498 # local did change but ended up with same content |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1499 actions[f] = ACTION_REMOVE, None, b'prompt same' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1500 elif ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1501 m == ACTION_DELETED_CHANGED |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1502 and f in ancestor |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1503 and not mctx[f].cmp(ancestor[f]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1504 ): |
23531
416c133145ee
merge: extract _resolvetrivial() function
Martin von Zweigbergk <martinvonz@google.com>
parents:
23526
diff
changeset
|
1505 # remote did change but ended up with same content |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1506 del actions[f] # don't get = keep local deleted |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1507 |
23531
416c133145ee
merge: extract _resolvetrivial() function
Martin von Zweigbergk <martinvonz@google.com>
parents:
23526
diff
changeset
|
1508 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1509 def calculateupdates( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1510 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1511 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1512 mctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1513 ancestors, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1514 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1515 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1516 acceptremote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1517 followcopies, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1518 matcher=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1519 mergeforce=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1520 ): |
33323
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
1521 """Calculate the actions needed to merge mctx into wctx using ancestors""" |
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
1522 # Avoid cycle. |
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
1523 from . import sparse |
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
1524 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1525 if len(ancestors) == 1: # default |
23526
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23525
diff
changeset
|
1526 actions, diverge, renamedelete = manifestmerge( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1527 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1528 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1529 mctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1530 ancestors[0], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1531 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1532 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1533 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1534 acceptremote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1535 followcopies, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1536 ) |
28020
cffa46cbdb8f
merge: tell _checkunknownfiles about whether this was merge --force
Siddharth Agarwal <sid0@fb.com>
parents:
28019
diff
changeset
|
1537 _checkunknownfiles(repo, wctx, mctx, force, actions, mergeforce) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1538 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1539 else: # only when merge.preferancestor=* - the default |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1540 repo.ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1541 _(b"note: merging %s and %s using bids from ancestors %s\n") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1542 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1543 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1544 mctx, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1545 _(b' and ').join(pycompat.bytestr(anc) for anc in ancestors), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1546 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1547 ) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1548 |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1549 # Call for bids |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1550 fbids = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1551 {} |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1552 ) # mapping filename to bids (action method to list af actions) |
23526
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23525
diff
changeset
|
1553 diverge, renamedelete = None, None |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1554 for ancestor in ancestors: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1555 repo.ui.note(_(b'\ncalculating bids for ancestor %s\n') % ancestor) |
23526
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23525
diff
changeset
|
1556 actions, diverge1, renamedelete1 = manifestmerge( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1557 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1558 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1559 mctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1560 ancestor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1561 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1562 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1563 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1564 acceptremote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1565 followcopies, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1566 forcefulldiff=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1567 ) |
28020
cffa46cbdb8f
merge: tell _checkunknownfiles about whether this was merge --force
Siddharth Agarwal <sid0@fb.com>
parents:
28019
diff
changeset
|
1568 _checkunknownfiles(repo, wctx, mctx, force, actions, mergeforce) |
26318
d3bd6cefd742
bidmerge: choose shortest list of diverge and rename/delete warnings
Matt Mackall <mpm@selenic.com>
parents:
26304
diff
changeset
|
1569 |
d3bd6cefd742
bidmerge: choose shortest list of diverge and rename/delete warnings
Matt Mackall <mpm@selenic.com>
parents:
26304
diff
changeset
|
1570 # Track the shortest set of warning on the theory that bid |
d3bd6cefd742
bidmerge: choose shortest list of diverge and rename/delete warnings
Matt Mackall <mpm@selenic.com>
parents:
26304
diff
changeset
|
1571 # merge will correctly incorporate more information |
d3bd6cefd742
bidmerge: choose shortest list of diverge and rename/delete warnings
Matt Mackall <mpm@selenic.com>
parents:
26304
diff
changeset
|
1572 if diverge is None or len(diverge1) < len(diverge): |
23526
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23525
diff
changeset
|
1573 diverge = diverge1 |
26318
d3bd6cefd742
bidmerge: choose shortest list of diverge and rename/delete warnings
Matt Mackall <mpm@selenic.com>
parents:
26304
diff
changeset
|
1574 if renamedelete is None or len(renamedelete) < len(renamedelete1): |
23526
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23525
diff
changeset
|
1575 renamedelete = renamedelete1 |
26318
d3bd6cefd742
bidmerge: choose shortest list of diverge and rename/delete warnings
Matt Mackall <mpm@selenic.com>
parents:
26304
diff
changeset
|
1576 |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
1577 for f, a in sorted(pycompat.iteritems(actions)): |
23638
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1578 m, args, msg = a |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1579 repo.ui.debug(b' %s: %s -> %s\n' % (f, msg, m)) |
23638
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1580 if f in fbids: |
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1581 d = fbids[f] |
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1582 if m in d: |
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1583 d[m].append(a) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1584 else: |
23638
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1585 d[m] = [a] |
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1586 else: |
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1587 fbids[f] = {m: [a]} |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1588 |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1589 # Pick the best bid for each file |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1590 repo.ui.note(_(b'\nauction for merging merge bids\n')) |
23638
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1591 actions = {} |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1592 for f, bids in sorted(fbids.items()): |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1593 # bids is a mapping from action method to list af actions |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1594 # Consensus? |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1595 if len(bids) == 1: # all bids are the same kind of method |
34348
1a5abc45e2fa
py3: explicitly convert dict.keys() and dict.items() into a list
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34302
diff
changeset
|
1596 m, l = list(bids.items())[0] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1597 if all(a == l[0] for a in l[1:]): # len(bids) is > 1 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1598 repo.ui.note(_(b" %s: consensus for %s\n") % (f, m)) |
23638
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1599 actions[f] = l[0] |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1600 continue |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1601 # If keep is an option, just do it. |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1602 if ACTION_KEEP in bids: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1603 repo.ui.note(_(b" %s: picking 'keep' action\n") % f) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1604 actions[f] = bids[ACTION_KEEP][0] |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1605 continue |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1606 # If there are gets and they all agree [how could they not?], do it. |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1607 if ACTION_GET in bids: |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1608 ga0 = bids[ACTION_GET][0] |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1609 if all(a == ga0 for a in bids[ACTION_GET][1:]): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1610 repo.ui.note(_(b" %s: picking 'get' action\n") % f) |
23638
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1611 actions[f] = ga0 |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1612 continue |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1613 # TODO: Consider other simple actions such as mode changes |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1614 # Handle inefficient democrazy. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1615 repo.ui.note(_(b' %s: multiple bids for merge action:\n') % f) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1616 for m, l in sorted(bids.items()): |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1617 for _f, args, msg in l: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1618 repo.ui.note(b' %s -> %s\n' % (msg, m)) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1619 # Pick random action. TODO: Instead, prompt user when resolving |
34348
1a5abc45e2fa
py3: explicitly convert dict.keys() and dict.items() into a list
Pulkit Goyal <7895pulkit@gmail.com>
parents:
34302
diff
changeset
|
1620 m, l = list(bids.items())[0] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1621 repo.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1622 _(b' %s: ambiguous merge - picked %s action\n') % (f, m) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1623 ) |
23638
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1624 actions[f] = l[0] |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1625 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1626 repo.ui.note(_(b'end of auction\n\n')) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1627 |
23640
b46b9865dd08
merge: let _forgetremoved() work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23639
diff
changeset
|
1628 if wctx.rev() is None: |
b46b9865dd08
merge: let _forgetremoved() work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23639
diff
changeset
|
1629 fractions = _forgetremoved(wctx, mctx, branchmerge) |
b46b9865dd08
merge: let _forgetremoved() work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23639
diff
changeset
|
1630 actions.update(fractions) |
b46b9865dd08
merge: let _forgetremoved() work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23639
diff
changeset
|
1631 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1632 prunedactions = sparse.filterupdatesactions( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1633 repo, wctx, mctx, branchmerge, actions |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1634 ) |
38757
d49e490a9e85
merge: do the trivial resolution after updating sparse checkout
Pulkit Goyal <pulkit@yandex-team.ru>
parents:
38732
diff
changeset
|
1635 _resolvetrivial(repo, wctx, mctx, ancestors[0], actions) |
33323
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
1636 |
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
1637 return prunedactions, diverge, renamedelete |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1638 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1639 |
34142
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1640 def _getcwd(): |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1641 try: |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39464
diff
changeset
|
1642 return encoding.getcwd() |
34142
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1643 except OSError as err: |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1644 if err.errno == errno.ENOENT: |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1645 return None |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1646 raise |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1647 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1648 |
33081
6582dc01aca3
merge: pass wctx to batchremove and batchget
Phil Cohen <phillco@fb.com>
parents:
32863
diff
changeset
|
1649 def batchremove(repo, wctx, actions): |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1650 """apply removes to the working directory |
18630
9b9e2d9e83a1
merge: split out mostly-non-interactive working dir updates
Bryan O'Sullivan <bryano@fb.com>
parents:
18612
diff
changeset
|
1651 |
9b9e2d9e83a1
merge: split out mostly-non-interactive working dir updates
Bryan O'Sullivan <bryano@fb.com>
parents:
18612
diff
changeset
|
1652 yields tuples for progress updates |
9b9e2d9e83a1
merge: split out mostly-non-interactive working dir updates
Bryan O'Sullivan <bryano@fb.com>
parents:
18612
diff
changeset
|
1653 """ |
18640
a8648f32b8ed
merge: don't fiddle with name lookups or i18n in hot loops
Bryan O'Sullivan <bryano@fb.com>
parents:
18639
diff
changeset
|
1654 verbose = repo.ui.verbose |
34142
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1655 cwd = _getcwd() |
18633
6390dd22b12f
merge: report non-interactive progress in chunks
Bryan O'Sullivan <bryano@fb.com>
parents:
18632
diff
changeset
|
1656 i = 0 |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1657 for f, args, msg in actions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1658 repo.ui.debug(b" %s: %s -> r\n" % (f, msg)) |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1659 if verbose: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1660 repo.ui.note(_(b"removing %s\n") % f) |
33086
eb4c49f55f1f
workingfilectx: add audit() as a wrapper for wvfs.audit()
Phil Cohen <phillco@fb.com>
parents:
33085
diff
changeset
|
1661 wctx[f].audit() |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1662 try: |
33082
f9e50ee4c52b
merge: replace repo.wvfs.unlinkpath() with calls to wctx[f].remove()
Phil Cohen <phillco@fb.com>
parents:
33081
diff
changeset
|
1663 wctx[f].remove(ignoremissing=True) |
25660
328739ea70c3
global: mass rewrite to use modern exception syntax
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25151
diff
changeset
|
1664 except OSError as inst: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1665 repo.ui.warn( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1666 _(b"update failed to remove %s: %s!\n") % (f, inst.strerror) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1667 ) |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1668 if i == 100: |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1669 yield i, f |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1670 i = 0 |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1671 i += 1 |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1672 if i > 0: |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1673 yield i, f |
34142
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1674 |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1675 if cwd and not _getcwd(): |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1676 # cwd was removed in the course of removing files; print a helpful |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1677 # warning. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1678 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1679 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1680 b"current directory was removed\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1681 b"(consider changing to repo root: %s)\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1682 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1683 % repo.root |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1684 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1685 |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1686 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1687 def batchget(repo, mctx, wctx, wantfiledata, actions): |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1688 """apply gets to the working directory |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1689 |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1690 mctx is the context to get from |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1691 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1692 Yields arbitrarily many (False, tuple) for progress updates, followed by |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1693 exactly one (True, filedata). When wantfiledata is false, filedata is an |
42522
d29db0a0c4eb
update: fix spurious unclean status bug shown by previous commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42456
diff
changeset
|
1694 empty dict. When wantfiledata is true, filedata[f] is a triple (mode, size, |
d29db0a0c4eb
update: fix spurious unclean status bug shown by previous commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42456
diff
changeset
|
1695 mtime) of the file f written for each action. |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1696 """ |
42522
d29db0a0c4eb
update: fix spurious unclean status bug shown by previous commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42456
diff
changeset
|
1697 filedata = {} |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1698 verbose = repo.ui.verbose |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1699 fctx = mctx.filectx |
27656
57c0d4888ca8
batchget: add support for backing up files
Siddharth Agarwal <sid0@fb.com>
parents:
27655
diff
changeset
|
1700 ui = repo.ui |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1701 i = 0 |
28200
588695ccbb22
merge: perform background file closing in batchget
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28199
diff
changeset
|
1702 with repo.wvfs.backgroundclosing(ui, expectedcount=len(actions)): |
28199
d49793aac1ac
merge: indent code in batchget()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28088
diff
changeset
|
1703 for f, (flags, backup), msg in actions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1704 repo.ui.debug(b" %s: %s -> g\n" % (f, msg)) |
28199
d49793aac1ac
merge: indent code in batchget()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28088
diff
changeset
|
1705 if verbose: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1706 repo.ui.note(_(b"getting %s\n") % f) |
27656
57c0d4888ca8
batchget: add support for backing up files
Siddharth Agarwal <sid0@fb.com>
parents:
27655
diff
changeset
|
1707 |
28199
d49793aac1ac
merge: indent code in batchget()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28088
diff
changeset
|
1708 if backup: |
34549
a991e1d6bc82
merge: backup conflicting directories when getting files
Mark Thomas <mbthomas@fb.com>
parents:
34548
diff
changeset
|
1709 # If a file or directory exists with the same name, back that |
a991e1d6bc82
merge: backup conflicting directories when getting files
Mark Thomas <mbthomas@fb.com>
parents:
34548
diff
changeset
|
1710 # up. Otherwise, look to see if there is a file that conflicts |
a991e1d6bc82
merge: backup conflicting directories when getting files
Mark Thomas <mbthomas@fb.com>
parents:
34548
diff
changeset
|
1711 # with a directory this file is in, and if so, back that up. |
41570
1f2714052d7e
merge: don't unnecessarily calculate absolute path
Martin von Zweigbergk <martinvonz@google.com>
parents:
41569
diff
changeset
|
1712 conflicting = f |
34549
a991e1d6bc82
merge: backup conflicting directories when getting files
Mark Thomas <mbthomas@fb.com>
parents:
34548
diff
changeset
|
1713 if not repo.wvfs.lexists(f): |
43633
0b7733719d21
utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43421
diff
changeset
|
1714 for p in pathutil.finddirs(f): |
34549
a991e1d6bc82
merge: backup conflicting directories when getting files
Mark Thomas <mbthomas@fb.com>
parents:
34548
diff
changeset
|
1715 if repo.wvfs.isfileorlink(p): |
41570
1f2714052d7e
merge: don't unnecessarily calculate absolute path
Martin von Zweigbergk <martinvonz@google.com>
parents:
41569
diff
changeset
|
1716 conflicting = p |
34549
a991e1d6bc82
merge: backup conflicting directories when getting files
Mark Thomas <mbthomas@fb.com>
parents:
34548
diff
changeset
|
1717 break |
41570
1f2714052d7e
merge: don't unnecessarily calculate absolute path
Martin von Zweigbergk <martinvonz@google.com>
parents:
41569
diff
changeset
|
1718 if repo.wvfs.lexists(conflicting): |
41601
ac8cf125d8d5
merge: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41570
diff
changeset
|
1719 orig = scmutil.backuppath(ui, repo, conflicting) |
ac8cf125d8d5
merge: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41570
diff
changeset
|
1720 util.rename(repo.wjoin(conflicting), orig) |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1721 wfctx = wctx[f] |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1722 wfctx.clearunknown() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1723 atomictemp = ui.configbool(b"experimental", b"update.atomic-file") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1724 size = wfctx.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1725 fctx(f).data(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1726 flags, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1727 backgroundclose=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1728 atomictemp=atomictemp, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1729 ) |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1730 if wantfiledata: |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1731 s = wfctx.lstat() |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1732 mode = s.st_mode |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1733 mtime = s[stat.ST_MTIME] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1734 filedata[f] = (mode, size, mtime) # for dirstate.normal |
28199
d49793aac1ac
merge: indent code in batchget()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28088
diff
changeset
|
1735 if i == 100: |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1736 yield False, (i, f) |
28199
d49793aac1ac
merge: indent code in batchget()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28088
diff
changeset
|
1737 i = 0 |
d49793aac1ac
merge: indent code in batchget()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28088
diff
changeset
|
1738 i += 1 |
18633
6390dd22b12f
merge: report non-interactive progress in chunks
Bryan O'Sullivan <bryano@fb.com>
parents:
18632
diff
changeset
|
1739 if i > 0: |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1740 yield False, (i, f) |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1741 yield True, filedata |
18630
9b9e2d9e83a1
merge: split out mostly-non-interactive working dir updates
Bryan O'Sullivan <bryano@fb.com>
parents:
18612
diff
changeset
|
1742 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1743 |
36142
60dd840a7fdb
merge: invoke scmutil.fileprefetchhooks() prior to applying updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
36042
diff
changeset
|
1744 def _prefetchfiles(repo, ctx, actions): |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37172
diff
changeset
|
1745 """Invoke ``scmutil.prefetchfiles()`` for the files relevant to the dict |
36142
60dd840a7fdb
merge: invoke scmutil.fileprefetchhooks() prior to applying updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
36042
diff
changeset
|
1746 of merge actions. ``ctx`` is the context being merged in.""" |
60dd840a7fdb
merge: invoke scmutil.fileprefetchhooks() prior to applying updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
36042
diff
changeset
|
1747 |
60dd840a7fdb
merge: invoke scmutil.fileprefetchhooks() prior to applying updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
36042
diff
changeset
|
1748 # Skipping 'a', 'am', 'f', 'r', 'dm', 'e', 'k', 'p' and 'pr', because they |
60dd840a7fdb
merge: invoke scmutil.fileprefetchhooks() prior to applying updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
36042
diff
changeset
|
1749 # don't touch the context to be merged in. 'cd' is skipped, because |
60dd840a7fdb
merge: invoke scmutil.fileprefetchhooks() prior to applying updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
36042
diff
changeset
|
1750 # changed/deleted never resolves to something from the remote side. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1751 oplist = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1752 actions[a] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1753 for a in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1754 ACTION_GET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1755 ACTION_DELETED_CHANGED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1756 ACTION_LOCAL_DIR_RENAME_GET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1757 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1758 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1759 ] |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37172
diff
changeset
|
1760 prefetch = scmutil.prefetchfiles |
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37172
diff
changeset
|
1761 matchfiles = scmutil.matchfiles |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1762 prefetch( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1763 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1764 [ctx.rev()], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1765 matchfiles(repo, [f for sublist in oplist for f, args, msg in sublist]), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1766 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1767 |
34124
b90e5b2a9c82
merge: flush any deferred writes before, and after, running any workers
Phil Cohen <phillco@fb.com>
parents:
34122
diff
changeset
|
1768 |
37107
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1769 @attr.s(frozen=True) |
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1770 class updateresult(object): |
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1771 updatedcount = attr.ib() |
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1772 mergedcount = attr.ib() |
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1773 removedcount = attr.ib() |
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1774 unresolvedcount = attr.ib() |
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1775 |
37125
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37112
diff
changeset
|
1776 def isempty(self): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1777 return not ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1778 self.updatedcount |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1779 or self.mergedcount |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1780 or self.removedcount |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1781 or self.unresolvedcount |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1782 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1783 |
37125
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37112
diff
changeset
|
1784 |
41039
54c3b4bd01f2
merge: extract helper for creating empty "actions" dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
39818
diff
changeset
|
1785 def emptyactions(): |
54c3b4bd01f2
merge: extract helper for creating empty "actions" dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
39818
diff
changeset
|
1786 """create an actions dict, to be populated and passed to applyupdates()""" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1787 return dict( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1788 (m, []) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1789 for m in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1790 ACTION_ADD, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1791 ACTION_ADD_MODIFIED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1792 ACTION_FORGET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1793 ACTION_GET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1794 ACTION_CHANGED_DELETED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1795 ACTION_DELETED_CHANGED, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1796 ACTION_REMOVE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1797 ACTION_DIR_RENAME_MOVE_LOCAL, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1798 ACTION_LOCAL_DIR_RENAME_GET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1799 ACTION_MERGE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1800 ACTION_EXEC, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1801 ACTION_KEEP, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1802 ACTION_PATH_CONFLICT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1803 ACTION_PATH_CONFLICT_RESOLVE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1804 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1805 ) |
41039
54c3b4bd01f2
merge: extract helper for creating empty "actions" dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
39818
diff
changeset
|
1806 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1807 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1808 def applyupdates( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1809 repo, actions, wctx, mctx, overwrite, wantfiledata, labels=None |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1810 ): |
11454
9b0406b23be0
merge: pass constant cset ancestor to fctx.ancestor
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11451
diff
changeset
|
1811 """apply the merge action list to the working directory |
9b0406b23be0
merge: pass constant cset ancestor to fctx.ancestor
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11451
diff
changeset
|
1812 |
9b0406b23be0
merge: pass constant cset ancestor to fctx.ancestor
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11451
diff
changeset
|
1813 wctx is the working copy context |
9b0406b23be0
merge: pass constant cset ancestor to fctx.ancestor
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11451
diff
changeset
|
1814 mctx is the context to be merged into the working copy |
13162
115a9760c382
merge: document some internal return values.
Greg Ward <greg-hg@gerg.ca>
parents:
13158
diff
changeset
|
1815 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1816 Return a tuple of (counts, filedata), where counts is a tuple |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1817 (updated, merged, removed, unresolved) that describes how many |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1818 files were affected by the update, and filedata is as described in |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1819 batchget. |
11454
9b0406b23be0
merge: pass constant cset ancestor to fctx.ancestor
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11451
diff
changeset
|
1820 """ |
3315
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
1821 |
36142
60dd840a7fdb
merge: invoke scmutil.fileprefetchhooks() prior to applying updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
36042
diff
changeset
|
1822 _prefetchfiles(repo, mctx, actions) |
60dd840a7fdb
merge: invoke scmutil.fileprefetchhooks() prior to applying updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
36042
diff
changeset
|
1823 |
27078
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
1824 updated, merged, removed = 0, 0, 0 |
28634
3ceac01bc29f
merge: save merge part labels for later reuse
Simon Farnsworth <simonfar@fb.com>
parents:
28267
diff
changeset
|
1825 ms = mergestate.clean(repo, wctx.p1().node(), mctx.node(), labels) |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
1826 moves = [] |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1827 for m, l in actions.items(): |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1828 l.sort() |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
1829 |
27137
25e4b2f000c5
merge: move almost all change/delete conflicts to resolve phase (BC) (API)
Siddharth Agarwal <sid0@fb.com>
parents:
27132
diff
changeset
|
1830 # 'cd' and 'dc' actions are treated like other merge conflicts |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1831 mergeactions = sorted(actions[ACTION_CHANGED_DELETED]) |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1832 mergeactions.extend(sorted(actions[ACTION_DELETED_CHANGED])) |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1833 mergeactions.extend(actions[ACTION_MERGE]) |
27137
25e4b2f000c5
merge: move almost all change/delete conflicts to resolve phase (BC) (API)
Siddharth Agarwal <sid0@fb.com>
parents:
27132
diff
changeset
|
1834 for f, args, msg in mergeactions: |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1835 f1, f2, fa, move, anc = args |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1836 if f == b'.hgsubstate': # merged internally |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1837 continue |
27091
2ce00de5cc0e
merge.applyupdates: create absentfilectxes for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27090
diff
changeset
|
1838 if f1 is None: |
2ce00de5cc0e
merge.applyupdates: create absentfilectxes for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27090
diff
changeset
|
1839 fcl = filemerge.absentfilectx(wctx, fa) |
2ce00de5cc0e
merge.applyupdates: create absentfilectxes for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27090
diff
changeset
|
1840 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1841 repo.ui.debug(b" preserving %s for resolve of %s\n" % (f1, f)) |
27091
2ce00de5cc0e
merge.applyupdates: create absentfilectxes for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27090
diff
changeset
|
1842 fcl = wctx[f1] |
2ce00de5cc0e
merge.applyupdates: create absentfilectxes for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27090
diff
changeset
|
1843 if f2 is None: |
2ce00de5cc0e
merge.applyupdates: create absentfilectxes for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27090
diff
changeset
|
1844 fco = filemerge.absentfilectx(mctx, fa) |
2ce00de5cc0e
merge.applyupdates: create absentfilectxes for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27090
diff
changeset
|
1845 else: |
2ce00de5cc0e
merge.applyupdates: create absentfilectxes for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27090
diff
changeset
|
1846 fco = mctx[f2] |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1847 actx = repo[anc] |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1848 if fa in actx: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1849 fca = actx[fa] |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1850 else: |
27091
2ce00de5cc0e
merge.applyupdates: create absentfilectxes for change/delete conflicts
Siddharth Agarwal <sid0@fb.com>
parents:
27090
diff
changeset
|
1851 # TODO: move to absentfilectx |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1852 fca = repo.filectx(f1, fileid=nullrev) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1853 ms.add(fcl, fco, fca, f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1854 if f1 != f and move: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1855 moves.append(f1) |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
1856 |
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
1857 # remove renamed files after safely stored |
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
1858 for f in moves: |
33283
634b259079c5
workingfilectx: add exists, lexists
Phil Cohen <phillco@fb.com>
parents:
33146
diff
changeset
|
1859 if wctx[f].lexists(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1860 repo.ui.debug(b"removing %s\n" % f) |
33086
eb4c49f55f1f
workingfilectx: add audit() as a wrapper for wvfs.audit()
Phil Cohen <phillco@fb.com>
parents:
33085
diff
changeset
|
1861 wctx[f].audit() |
33082
f9e50ee4c52b
merge: replace repo.wvfs.unlinkpath() with calls to wctx[f].remove()
Phil Cohen <phillco@fb.com>
parents:
33081
diff
changeset
|
1862 wctx[f].remove() |
5042
f191bc3916f7
merge: do early copy to deal with issue636
Matt Mackall <mpm@selenic.com>
parents:
4997
diff
changeset
|
1863 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1864 numupdates = sum(len(l) for m, l in actions.items() if m != ACTION_KEEP) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1865 progress = repo.ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1866 _(b'updating'), unit=_(b'files'), total=numupdates |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1867 ) |
18630
9b9e2d9e83a1
merge: split out mostly-non-interactive working dir updates
Bryan O'Sullivan <bryano@fb.com>
parents:
18612
diff
changeset
|
1868 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1869 if [a for a in actions[ACTION_REMOVE] if a[0] == b'.hgsubstate']: |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35726
diff
changeset
|
1870 subrepoutil.submerge(repo, wctx, mctx, wctx, overwrite, labels) |
18632
3e20079117c5
merge: handle subrepo merges and .hgsubstate specially
Bryan O'Sullivan <bryano@fb.com>
parents:
18630
diff
changeset
|
1871 |
34547
81aebcc73beb
merge: add merge action 'p' to record path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34545
diff
changeset
|
1872 # record path conflicts |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1873 for f, args, msg in actions[ACTION_PATH_CONFLICT]: |
34547
81aebcc73beb
merge: add merge action 'p' to record path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34545
diff
changeset
|
1874 f1, fo = args |
81aebcc73beb
merge: add merge action 'p' to record path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34545
diff
changeset
|
1875 s = repo.ui.status |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1876 s( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1877 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1878 b"%s: path conflict - a file or link has the same name as a " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1879 b"directory\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1880 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1881 % f |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1882 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1883 if fo == b'l': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1884 s(_(b"the local file has been renamed to %s\n") % f1) |
34547
81aebcc73beb
merge: add merge action 'p' to record path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34545
diff
changeset
|
1885 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1886 s(_(b"the remote file has been renamed to %s\n") % f1) |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1887 s(_(b"resolve manually then use 'hg resolve --mark %s'\n") % f) |
34547
81aebcc73beb
merge: add merge action 'p' to record path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34545
diff
changeset
|
1888 ms.addpath(f, f1, fo) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1889 progress.increment(item=f) |
34547
81aebcc73beb
merge: add merge action 'p' to record path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34545
diff
changeset
|
1890 |
34786
9c899660700a
merge: don't use workers in in-memory mode
Phil Cohen <phillco@fb.com>
parents:
34680
diff
changeset
|
1891 # When merging in-memory, we can't support worker processes, so set the |
9c899660700a
merge: don't use workers in in-memory mode
Phil Cohen <phillco@fb.com>
parents:
34680
diff
changeset
|
1892 # per-item cost at 0 in that case. |
9c899660700a
merge: don't use workers in in-memory mode
Phil Cohen <phillco@fb.com>
parents:
34680
diff
changeset
|
1893 cost = 0 if wctx.isinmemory() else 0.001 |
9c899660700a
merge: don't use workers in in-memory mode
Phil Cohen <phillco@fb.com>
parents:
34680
diff
changeset
|
1894 |
34548
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1895 # remove in parallel (must come before resolving path conflicts and getting) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1896 prog = worker.worker( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1897 repo.ui, cost, batchremove, (repo, wctx), actions[ACTION_REMOVE] |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1898 ) |
19095
5cc71484ee9c
merge: increase safety of parallel updating/removing on icasefs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18985
diff
changeset
|
1899 for i, item in prog: |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1900 progress.increment(step=i, item=item) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1901 removed = len(actions[ACTION_REMOVE]) |
21390
26b84128c54d
merge: move constant assignments a bit and use them more
Mads Kiilerich <madski@unity3d.com>
parents:
21389
diff
changeset
|
1902 |
34548
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1903 # resolve path conflicts (must come before getting) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1904 for f, args, msg in actions[ACTION_PATH_CONFLICT_RESOLVE]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1905 repo.ui.debug(b" %s: %s -> pr\n" % (f, msg)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1906 (f0,) = args |
34548
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1907 if wctx[f0].lexists(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1908 repo.ui.note(_(b"moving %s to %s\n") % (f0, f)) |
34548
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1909 wctx[f].audit() |
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1910 wctx[f].write(wctx.filectx(f0).data(), wctx.filectx(f0).flags()) |
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1911 wctx[f0].remove() |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1912 progress.increment(item=f) |
34548
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1913 |
38732
be4984261611
merge: mark file gets as not thread safe (issue5933)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38494
diff
changeset
|
1914 # get in parallel. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1915 threadsafe = repo.ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1916 b'experimental', b'worker.wdir-get-thread-safe' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1917 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1918 prog = worker.worker( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1919 repo.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1920 cost, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1921 batchget, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1922 (repo, mctx, wctx, wantfiledata), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1923 actions[ACTION_GET], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1924 threadsafe=threadsafe, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1925 hasretval=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1926 ) |
42522
d29db0a0c4eb
update: fix spurious unclean status bug shown by previous commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42456
diff
changeset
|
1927 getfiledata = {} |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1928 for final, res in prog: |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1929 if final: |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1930 getfiledata = res |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1931 else: |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1932 i, item = res |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1933 progress.increment(step=i, item=item) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1934 updated = len(actions[ACTION_GET]) |
18630
9b9e2d9e83a1
merge: split out mostly-non-interactive working dir updates
Bryan O'Sullivan <bryano@fb.com>
parents:
18612
diff
changeset
|
1935 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1936 if [a for a in actions[ACTION_GET] if a[0] == b'.hgsubstate']: |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35726
diff
changeset
|
1937 subrepoutil.submerge(repo, wctx, mctx, wctx, overwrite, labels) |
18632
3e20079117c5
merge: handle subrepo merges and .hgsubstate specially
Bryan O'Sullivan <bryano@fb.com>
parents:
18630
diff
changeset
|
1938 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1939 # forget (manifest only, just log it) (must come first) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1940 for f, args, msg in actions[ACTION_FORGET]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1941 repo.ui.debug(b" %s: %s -> f\n" % (f, msg)) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1942 progress.increment(item=f) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
1943 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1944 # re-add (manifest only, just log it) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1945 for f, args, msg in actions[ACTION_ADD]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1946 repo.ui.debug(b" %s: %s -> a\n" % (f, msg)) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1947 progress.increment(item=f) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
1948 |
27131
d837da26155e
merge: add a new action type representing files to add/mark as modified
Siddharth Agarwal <sid0@fb.com>
parents:
27130
diff
changeset
|
1949 # re-add/mark as modified (manifest only, just log it) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1950 for f, args, msg in actions[ACTION_ADD_MODIFIED]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1951 repo.ui.debug(b" %s: %s -> am\n" % (f, msg)) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1952 progress.increment(item=f) |
27131
d837da26155e
merge: add a new action type representing files to add/mark as modified
Siddharth Agarwal <sid0@fb.com>
parents:
27130
diff
changeset
|
1953 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1954 # keep (noop, just log it) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1955 for f, args, msg in actions[ACTION_KEEP]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1956 repo.ui.debug(b" %s: %s -> k\n" % (f, msg)) |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1957 # no progress |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
1958 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1959 # directory rename, move local |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1960 for f, args, msg in actions[ACTION_DIR_RENAME_MOVE_LOCAL]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1961 repo.ui.debug(b" %s: %s -> dm\n" % (f, msg)) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1962 progress.increment(item=f) |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1963 f0, flags = args |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1964 repo.ui.note(_(b"moving %s to %s\n") % (f0, f)) |
33086
eb4c49f55f1f
workingfilectx: add audit() as a wrapper for wvfs.audit()
Phil Cohen <phillco@fb.com>
parents:
33085
diff
changeset
|
1965 wctx[f].audit() |
33083
05c680ebf512
merge: convert repo.wwrite() calls to wctx[f].write()
Phil Cohen <phillco@fb.com>
parents:
33082
diff
changeset
|
1966 wctx[f].write(wctx.filectx(f0).data(), flags) |
33082
f9e50ee4c52b
merge: replace repo.wvfs.unlinkpath() with calls to wctx[f].remove()
Phil Cohen <phillco@fb.com>
parents:
33081
diff
changeset
|
1967 wctx[f0].remove() |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1968 updated += 1 |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
1969 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1970 # local directory rename, get |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1971 for f, args, msg in actions[ACTION_LOCAL_DIR_RENAME_GET]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1972 repo.ui.debug(b" %s: %s -> dg\n" % (f, msg)) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1973 progress.increment(item=f) |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1974 f0, flags = args |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1975 repo.ui.note(_(b"getting %s to %s\n") % (f0, f)) |
33083
05c680ebf512
merge: convert repo.wwrite() calls to wctx[f].write()
Phil Cohen <phillco@fb.com>
parents:
33082
diff
changeset
|
1976 wctx[f].write(mctx.filectx(f0).data(), flags) |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1977 updated += 1 |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
1978 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1979 # exec |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
1980 for f, args, msg in actions[ACTION_EXEC]: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1981 repo.ui.debug(b" %s: %s -> e\n" % (f, msg)) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1982 progress.increment(item=f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1983 (flags,) = args |
33086
eb4c49f55f1f
workingfilectx: add audit() as a wrapper for wvfs.audit()
Phil Cohen <phillco@fb.com>
parents:
33085
diff
changeset
|
1984 wctx[f].audit() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1985 wctx[f].setflags(b'l' in flags, b'x' in flags) |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1986 updated += 1 |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
1987 |
26786
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
1988 # the ordering is important here -- ms.mergedriver will raise if the merge |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
1989 # driver has changed, and we want to be able to bypass it when overwrite is |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
1990 # True |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
1991 usemergedriver = not overwrite and mergeactions and ms.mergedriver |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
1992 |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
1993 if usemergedriver: |
35500
87918218da70
merge: raise before running mergedriver if using IMM
Phil Cohen <phillco@fb.com>
parents:
35288
diff
changeset
|
1994 if wctx.isinmemory(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1995 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
|
1996 b"in-memory merge does not support mergedriver" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1997 ) |
26786
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
1998 ms.commit() |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
1999 proceed = driverpreprocess(repo, ms, wctx, labels=labels) |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2000 # the driver might leave some files unresolved |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2001 unresolvedf = set(ms.unresolved()) |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2002 if not proceed: |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2003 # XXX setting unresolved to at least 1 is a hack to make sure we |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2004 # error out |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2005 return updateresult( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2006 updated, merged, removed, max(len(unresolvedf), 1) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2007 ) |
26786
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2008 newactions = [] |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2009 for f, args, msg in mergeactions: |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2010 if f in unresolvedf: |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2011 newactions.append((f, args, msg)) |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2012 mergeactions = newactions |
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
2013 |
34680
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2014 try: |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2015 # premerge |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2016 tocomplete = [] |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2017 for f, args, msg in mergeactions: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2018 repo.ui.debug(b" %s: %s -> m (premerge)\n" % (f, msg)) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
2019 progress.increment(item=f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2020 if f == b'.hgsubstate': # subrepo states need updating |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2021 subrepoutil.submerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2022 repo, wctx, mctx, wctx.ancestor(mctx), overwrite, labels |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2023 ) |
34680
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2024 continue |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2025 wctx[f].audit() |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2026 complete, r = ms.preresolve(f, wctx) |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2027 if not complete: |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2028 numupdates += 1 |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2029 tocomplete.append((f, args, msg)) |
26618
8e6d5b7317e6
merge.mergestate: perform all premerges before any merges (BC)
Siddharth Agarwal <sid0@fb.com>
parents:
26617
diff
changeset
|
2030 |
34680
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2031 # merge |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2032 for f, args, msg in tocomplete: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2033 repo.ui.debug(b" %s: %s -> m (merge)\n" % (f, msg)) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
2034 progress.increment(item=f, total=numupdates) |
34680
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2035 ms.resolve(f, wctx) |
26292
007ac1acfcac
merge: move merge step to the end
Siddharth Agarwal <sid0@fb.com>
parents:
25959
diff
changeset
|
2036 |
34680
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2037 finally: |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
2038 ms.commit() |
26787
64848559413a
merge.applyupdates: call driverconclude after performing merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26786
diff
changeset
|
2039 |
27078
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
2040 unresolved = ms.unresolvedcount() |
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
2041 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2042 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2043 usemergedriver |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2044 and not unresolved |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2045 and ms.mdstate() != MERGE_DRIVER_STATE_SUCCESS |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2046 ): |
26787
64848559413a
merge.applyupdates: call driverconclude after performing merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26786
diff
changeset
|
2047 if not driverconclude(repo, ms, wctx, labels=labels): |
64848559413a
merge.applyupdates: call driverconclude after performing merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26786
diff
changeset
|
2048 # XXX setting unresolved to at least 1 is a hack to make sure we |
64848559413a
merge.applyupdates: call driverconclude after performing merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26786
diff
changeset
|
2049 # error out |
26975
6618dfd3ea1c
merge.applyupdates: don't return early if merge driver's conclude failed
Siddharth Agarwal <sid0@fb.com>
parents:
26962
diff
changeset
|
2050 unresolved = max(unresolved, 1) |
26787
64848559413a
merge.applyupdates: call driverconclude after performing merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26786
diff
changeset
|
2051 |
64848559413a
merge.applyupdates: call driverconclude after performing merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26786
diff
changeset
|
2052 ms.commit() |
64848559413a
merge.applyupdates: call driverconclude after performing merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26786
diff
changeset
|
2053 |
27078
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
2054 msupdated, msmerged, msremoved = ms.counts() |
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
2055 updated += msupdated |
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
2056 merged += msmerged |
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
2057 removed += msremoved |
27080
ae2d3782d818
merge.applyupdates: extend action queues with ones returned from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27079
diff
changeset
|
2058 |
ae2d3782d818
merge.applyupdates: extend action queues with ones returned from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27079
diff
changeset
|
2059 extraactions = ms.actions() |
29831
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2060 if extraactions: |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2061 mfiles = set(a[0] for a in actions[ACTION_MERGE]) |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
2062 for k, acts in pycompat.iteritems(extraactions): |
29831
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2063 actions[k].extend(acts) |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2064 if k == ACTION_GET and wantfiledata: |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2065 # no filedata until mergestate is updated to provide it |
42522
d29db0a0c4eb
update: fix spurious unclean status bug shown by previous commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42456
diff
changeset
|
2066 for a in acts: |
d29db0a0c4eb
update: fix spurious unclean status bug shown by previous commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42456
diff
changeset
|
2067 getfiledata[a[0]] = None |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2068 # Remove these files from actions[ACTION_MERGE] as well. This is |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2069 # important because in recordupdates, files in actions[ACTION_MERGE] |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2070 # are processed after files in other actions, and the merge driver |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2071 # might add files to those actions via extraactions above. This can |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2072 # lead to a file being recorded twice, with poor results. This is |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2073 # especially problematic for actions[ACTION_REMOVE] (currently only |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2074 # possible with the merge driver in the initial merge process; |
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2075 # interrupted merges don't go through this flow). |
29831
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2076 # |
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2077 # The real fix here is to have indexes by both file and action so |
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2078 # that when the action for a file is changed it is automatically |
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2079 # reflected in the other action lists. But that involves a more |
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2080 # complex data structure, so this will do for now. |
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2081 # |
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2082 # We don't need to do the same operation for 'dc' and 'cd' because |
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2083 # those lists aren't consulted again. |
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2084 mfiles.difference_update(a[0] for a in acts) |
1316c7cccc76
merge: remove files with extra actions from merge action list
Siddharth Agarwal <sid0@fb.com>
parents:
29775
diff
changeset
|
2085 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2086 actions[ACTION_MERGE] = [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2087 a for a in actions[ACTION_MERGE] if a[0] in mfiles |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2088 ] |
27080
ae2d3782d818
merge.applyupdates: extend action queues with ones returned from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27079
diff
changeset
|
2089 |
38373
ef692614e601
progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38345
diff
changeset
|
2090 progress.complete() |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2091 assert len(getfiledata) == (len(actions[ACTION_GET]) if wantfiledata else 0) |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2092 return updateresult(updated, merged, removed, unresolved), getfiledata |
3111
5cc62d99b785
merge: move apply and dirstate code into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3110
diff
changeset
|
2093 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2094 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2095 def recordupdates(repo, actions, branchmerge, getfiledata): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2096 b"record merge actions to the dirstate" |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2097 # remove (must come first) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2098 for f, args, msg in actions.get(ACTION_REMOVE, []): |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2099 if branchmerge: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2100 repo.dirstate.remove(f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2101 else: |
21389
e741972017d9
merge: change priority / ordering of merge actions
Mads Kiilerich <madski@unity3d.com>
parents:
21269
diff
changeset
|
2102 repo.dirstate.drop(f) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
2103 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2104 # forget (must come first) |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2105 for f, args, msg in actions.get(ACTION_FORGET, []): |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2106 repo.dirstate.drop(f) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
2107 |
34548
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
2108 # resolve path conflicts |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2109 for f, args, msg in actions.get(ACTION_PATH_CONFLICT_RESOLVE, []): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2110 (f0,) = args |
34548
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
2111 origf0 = repo.dirstate.copied(f0) or f0 |
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
2112 repo.dirstate.add(f) |
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
2113 repo.dirstate.copy(origf0, f) |
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
2114 if f0 == origf0: |
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
2115 repo.dirstate.remove(f0) |
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
2116 else: |
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
2117 repo.dirstate.drop(f0) |
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
2118 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2119 # re-add |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2120 for f, args, msg in actions.get(ACTION_ADD, []): |
27132
baa7571f40c5
merge.recordupdates: mark 'a' files as added unconditionally
Siddharth Agarwal <sid0@fb.com>
parents:
27131
diff
changeset
|
2121 repo.dirstate.add(f) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
2122 |
27131
d837da26155e
merge: add a new action type representing files to add/mark as modified
Siddharth Agarwal <sid0@fb.com>
parents:
27130
diff
changeset
|
2123 # re-add/mark as modified |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2124 for f, args, msg in actions.get(ACTION_ADD_MODIFIED, []): |
27131
d837da26155e
merge: add a new action type representing files to add/mark as modified
Siddharth Agarwal <sid0@fb.com>
parents:
27130
diff
changeset
|
2125 if branchmerge: |
d837da26155e
merge: add a new action type representing files to add/mark as modified
Siddharth Agarwal <sid0@fb.com>
parents:
27130
diff
changeset
|
2126 repo.dirstate.normallookup(f) |
d837da26155e
merge: add a new action type representing files to add/mark as modified
Siddharth Agarwal <sid0@fb.com>
parents:
27130
diff
changeset
|
2127 else: |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2128 repo.dirstate.add(f) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
2129 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2130 # exec change |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2131 for f, args, msg in actions.get(ACTION_EXEC, []): |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2132 repo.dirstate.normallookup(f) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
2133 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2134 # keep |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2135 for f, args, msg in actions.get(ACTION_KEEP, []): |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2136 pass |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2137 |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2138 # get |
42522
d29db0a0c4eb
update: fix spurious unclean status bug shown by previous commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42456
diff
changeset
|
2139 for f, args, msg in actions.get(ACTION_GET, []): |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2140 if branchmerge: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2141 repo.dirstate.otherparent(f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2142 else: |
42522
d29db0a0c4eb
update: fix spurious unclean status bug shown by previous commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42456
diff
changeset
|
2143 parentfiledata = getfiledata[f] if getfiledata else None |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2144 repo.dirstate.normal(f, parentfiledata=parentfiledata) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
2145 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2146 # merge |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2147 for f, args, msg in actions.get(ACTION_MERGE, []): |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2148 f1, f2, fa, move, anc = args |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2149 if branchmerge: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2150 # We've done a branch merge, mark this file as merged |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2151 # so that we properly record the merger later |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2152 repo.dirstate.merge(f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2153 if f1 != f2: # copy/rename |
3308
ecc1bf27378c
merge: unify merge and copy actions
Matt Mackall <mpm@selenic.com>
parents:
3307
diff
changeset
|
2154 if move: |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2155 repo.dirstate.remove(f1) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2156 if f1 != f: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2157 repo.dirstate.copy(f1, f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2158 else: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2159 repo.dirstate.copy(f2, f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2160 else: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2161 # We've update-merged a locally modified file, so |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2162 # we set the dirstate to emulate a normal checkout |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2163 # of that file some time in the past. Thus our |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2164 # merge will appear as a normal local file |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2165 # modification. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2166 if f2 == f: # file not locally copied/moved |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2167 repo.dirstate.normallookup(f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2168 if move: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2169 repo.dirstate.drop(f1) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
2170 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2171 # directory rename, move local |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2172 for f, args, msg in actions.get(ACTION_DIR_RENAME_MOVE_LOCAL, []): |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2173 f0, flag = args |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2174 if branchmerge: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2175 repo.dirstate.add(f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2176 repo.dirstate.remove(f0) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2177 repo.dirstate.copy(f0, f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2178 else: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2179 repo.dirstate.normal(f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2180 repo.dirstate.drop(f0) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
2181 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2182 # directory rename, get |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2183 for f, args, msg in actions.get(ACTION_LOCAL_DIR_RENAME_GET, []): |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2184 f0, flag = args |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2185 if branchmerge: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2186 repo.dirstate.add(f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2187 repo.dirstate.copy(f0, f) |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2188 else: |
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
2189 repo.dirstate.normal(f) |
3111
5cc62d99b785
merge: move apply and dirstate code into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3110
diff
changeset
|
2190 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2191 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2192 UPDATECHECK_ABORT = b'abort' # handled at higher layers |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2193 UPDATECHECK_NONE = b'none' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2194 UPDATECHECK_LINEAR = b'linear' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2195 UPDATECHECK_NO_CONFLICT = b'noconflict' |
42970
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42959
diff
changeset
|
2196 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2197 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2198 def update( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2199 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2200 node, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2201 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2202 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2203 ancestor=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2204 mergeancestor=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2205 labels=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2206 matcher=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2207 mergeforce=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2208 updatecheck=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2209 wc=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2210 ): |
3315
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
2211 """ |
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
2212 Perform a merge between the working directory and the given node |
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
2213 |
30902
e6932e9a262a
merge: remove unused handling of default destination in merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30901
diff
changeset
|
2214 node = the node to update to |
3315
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
2215 branchmerge = whether to merge between branches |
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
2216 force = whether to force branch merging or file overwriting |
27344
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27316
diff
changeset
|
2217 matcher = a matcher to filter file lists (dirstate not updated) |
18778
1ef89df2c248
rebase: fix --collapse when a file was added then removed
Durham Goode <durham@fb.com>
parents:
18651
diff
changeset
|
2218 mergeancestor = whether it is merging with an ancestor. If true, |
1ef89df2c248
rebase: fix --collapse when a file was added then removed
Durham Goode <durham@fb.com>
parents:
18651
diff
changeset
|
2219 we should accept the incoming changes for any prompts that occur. |
1ef89df2c248
rebase: fix --collapse when a file was added then removed
Durham Goode <durham@fb.com>
parents:
18651
diff
changeset
|
2220 If false, merging with an ancestor (fast-forward) is only allowed |
1ef89df2c248
rebase: fix --collapse when a file was added then removed
Durham Goode <durham@fb.com>
parents:
18651
diff
changeset
|
2221 between different named branches. This flag is used by rebase extension |
1ef89df2c248
rebase: fix --collapse when a file was added then removed
Durham Goode <durham@fb.com>
parents:
18651
diff
changeset
|
2222 as a temporary fix and should be avoided in general. |
28019
e81d11794036
merge: add missing doc for 'labels' parameter
Siddharth Agarwal <sid0@fb.com>
parents:
28018
diff
changeset
|
2223 labels = labels to use for base, local and other |
28020
cffa46cbdb8f
merge: tell _checkunknownfiles about whether this was merge --force
Siddharth Agarwal <sid0@fb.com>
parents:
28019
diff
changeset
|
2224 mergeforce = whether the merge was run with 'merge --force' (deprecated): if |
cffa46cbdb8f
merge: tell _checkunknownfiles about whether this was merge --force
Siddharth Agarwal <sid0@fb.com>
parents:
28019
diff
changeset
|
2225 this is True, then 'force' should be True as well. |
9716
ea8c207a0f78
update: add comments and test cases for updating across branches
Stuart W Marks <smarks@smarks.org>
parents:
9467
diff
changeset
|
2226 |
34919
1856de4d1297
update: mention long options explicitly in description of merge.update()
muxator <a.mux@inwind.it>
parents:
34885
diff
changeset
|
2227 The table below shows all the behaviors of the update command given the |
1856de4d1297
update: mention long options explicitly in description of merge.update()
muxator <a.mux@inwind.it>
parents:
34885
diff
changeset
|
2228 -c/--check and -C/--clean or no options, whether the working directory is |
1856de4d1297
update: mention long options explicitly in description of merge.update()
muxator <a.mux@inwind.it>
parents:
34885
diff
changeset
|
2229 dirty, whether a revision is specified, and the relationship of the parent |
1856de4d1297
update: mention long options explicitly in description of merge.update()
muxator <a.mux@inwind.it>
parents:
34885
diff
changeset
|
2230 rev to the target rev (linear or not). Match from top first. The -n |
1856de4d1297
update: mention long options explicitly in description of merge.update()
muxator <a.mux@inwind.it>
parents:
34885
diff
changeset
|
2231 option doesn't exist on the command line, but represents the |
31168
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2232 experimental.updatecheck=noconflict option. |
9716
ea8c207a0f78
update: add comments and test cases for updating across branches
Stuart W Marks <smarks@smarks.org>
parents:
9467
diff
changeset
|
2233 |
12279 | 2234 This logic is tested by test-update-branches.t. |
9716
ea8c207a0f78
update: add comments and test cases for updating across branches
Stuart W Marks <smarks@smarks.org>
parents:
9467
diff
changeset
|
2235 |
31168
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2236 -c -C -n -m dirty rev linear | result |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2237 y y * * * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2238 y * y * * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2239 y * * y * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2240 * y y * * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2241 * y * y * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2242 * * y y * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2243 * * * * * n n | x |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2244 * * * * n * * | ok |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2245 n n n n y * y | merge |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2246 n n n n y y n | (2) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2247 n n n y y * * | merge |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2248 n n y n y * * | merge if no conflict |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2249 n y n n y * * | discard |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2250 y n n n y * * | (3) |
9716
ea8c207a0f78
update: add comments and test cases for updating across branches
Stuart W Marks <smarks@smarks.org>
parents:
9467
diff
changeset
|
2251 |
ea8c207a0f78
update: add comments and test cases for updating across branches
Stuart W Marks <smarks@smarks.org>
parents:
9467
diff
changeset
|
2252 x = can't happen |
ea8c207a0f78
update: add comments and test cases for updating across branches
Stuart W Marks <smarks@smarks.org>
parents:
9467
diff
changeset
|
2253 * = don't-care |
31161
351207bfdde9
merge: move "incompatible options" case first in docstring table
Martin von Zweigbergk <martinvonz@google.com>
parents:
31160
diff
changeset
|
2254 1 = incompatible options (checked in commands.py) |
351207bfdde9
merge: move "incompatible options" case first in docstring table
Martin von Zweigbergk <martinvonz@google.com>
parents:
31160
diff
changeset
|
2255 2 = abort: uncommitted changes (commit or update --clean to discard changes) |
351207bfdde9
merge: move "incompatible options" case first in docstring table
Martin von Zweigbergk <martinvonz@google.com>
parents:
31160
diff
changeset
|
2256 3 = abort: uncommitted changes (checked in commands.py) |
13162
115a9760c382
merge: document some internal return values.
Greg Ward <greg-hg@gerg.ca>
parents:
13158
diff
changeset
|
2257 |
34302
440ece43024c
merge: allow a custom working context to be passed to update
Phil Cohen <phillco@fb.com>
parents:
34142
diff
changeset
|
2258 The merge is performed inside ``wc``, a workingctx-like objects. It defaults |
440ece43024c
merge: allow a custom working context to be passed to update
Phil Cohen <phillco@fb.com>
parents:
34142
diff
changeset
|
2259 to repo[None] if None is passed. |
440ece43024c
merge: allow a custom working context to be passed to update
Phil Cohen <phillco@fb.com>
parents:
34142
diff
changeset
|
2260 |
13162
115a9760c382
merge: document some internal return values.
Greg Ward <greg-hg@gerg.ca>
parents:
13158
diff
changeset
|
2261 Return the same tuple as applyupdates(). |
3315
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
2262 """ |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33311
diff
changeset
|
2263 # Avoid cycle. |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33311
diff
changeset
|
2264 from . import sparse |
2815
4870f795f681
Merge: combine force and forcemerge arguments
Matt Mackall <mpm@selenic.com>
parents:
2814
diff
changeset
|
2265 |
31166
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31165
diff
changeset
|
2266 # This function used to find the default destination if node was None, but |
30902
e6932e9a262a
merge: remove unused handling of default destination in merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30901
diff
changeset
|
2267 # that's now in destutil.py. |
e6932e9a262a
merge: remove unused handling of default destination in merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30901
diff
changeset
|
2268 assert node is not None |
31166
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31165
diff
changeset
|
2269 if not branchmerge and not force: |
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31165
diff
changeset
|
2270 # TODO: remove the default once all callers that pass branchmerge=False |
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31165
diff
changeset
|
2271 # and force=False pass a value for updatecheck. We may want to allow |
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31165
diff
changeset
|
2272 # updatecheck='abort' to better suppport some of these callers. |
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31165
diff
changeset
|
2273 if updatecheck is None: |
42970
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42959
diff
changeset
|
2274 updatecheck = UPDATECHECK_LINEAR |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2275 if updatecheck not in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2276 UPDATECHECK_NONE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2277 UPDATECHECK_LINEAR, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2278 UPDATECHECK_NO_CONFLICT, |
42972
71bb9363818c
merge: check argument value with if/raise instead of an assert
Augie Fackler <augie@google.com>
parents:
42970
diff
changeset
|
2279 ): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2280 raise ValueError( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2281 r'Invalid updatecheck %r (can accept %r)' |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2282 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2283 updatecheck, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2284 ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2285 UPDATECHECK_NONE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2286 UPDATECHECK_LINEAR, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2287 UPDATECHECK_NO_CONFLICT, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2288 ), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2289 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2290 ) |
27344
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27316
diff
changeset
|
2291 # If we're doing a partial update, we need to skip updating |
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27316
diff
changeset
|
2292 # the dirstate, so make a note of any partial-ness to the |
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27316
diff
changeset
|
2293 # update here. |
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27316
diff
changeset
|
2294 if matcher is None or matcher.always(): |
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27316
diff
changeset
|
2295 partial = False |
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27316
diff
changeset
|
2296 else: |
43c00ca887d1
merge: have merge.update use a matcher instead of partial fn
Augie Fackler <augie@google.com>
parents:
27316
diff
changeset
|
2297 partial = True |
27852
a33c1c9e769c
with: use context manager in merge update
Bryan O'Sullivan <bryano@fb.com>
parents:
27742
diff
changeset
|
2298 with repo.wlock(): |
34302
440ece43024c
merge: allow a custom working context to be passed to update
Phil Cohen <phillco@fb.com>
parents:
34142
diff
changeset
|
2299 if wc is None: |
440ece43024c
merge: allow a custom working context to be passed to update
Phil Cohen <phillco@fb.com>
parents:
34142
diff
changeset
|
2300 wc = repo[None] |
20279
5b4f963d21cc
merge: refactor initialization of variables in update
Sean Farley <sean.michael.farley@gmail.com>
parents:
20278
diff
changeset
|
2301 pl = wc.parents() |
5b4f963d21cc
merge: refactor initialization of variables in update
Sean Farley <sean.michael.farley@gmail.com>
parents:
20278
diff
changeset
|
2302 p1 = pl[0] |
42409
72522fe7fb95
merge: reorder some initialization to make more sense
Martin von Zweigbergk <martinvonz@google.com>
parents:
42163
diff
changeset
|
2303 p2 = repo[node] |
23405
2a038deeac9a
merge: 0 is a valid ancestor different from None
Mads Kiilerich <madski@unity3d.com>
parents:
23398
diff
changeset
|
2304 if ancestor is not None: |
21081
ffd7b6ce46ff
merge: pass merge ancestor to calculateupdates as a list
Mads Kiilerich <madski@unity3d.com>
parents:
21080
diff
changeset
|
2305 pas = [repo[ancestor]] |
42410
a5b5ecff5f37
merge: simplify initialization of "pas"
Martin von Zweigbergk <martinvonz@google.com>
parents:
42409
diff
changeset
|
2306 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2307 if repo.ui.configlist(b'merge', b'preferancestor') == [b'*']: |
21128
f4014f646f71
merge: with merge.preferancestor=*, run an auction with bids from ancestors
Mads Kiilerich <madski@unity3d.com>
parents:
21082
diff
changeset
|
2308 cahs = repo.changelog.commonancestorsheads(p1.node(), p2.node()) |
f4014f646f71
merge: with merge.preferancestor=*, run an auction with bids from ancestors
Mads Kiilerich <madski@unity3d.com>
parents:
21082
diff
changeset
|
2309 pas = [repo[anc] for anc in (sorted(cahs) or [nullid])] |
f4014f646f71
merge: with merge.preferancestor=*, run an auction with bids from ancestors
Mads Kiilerich <madski@unity3d.com>
parents:
21082
diff
changeset
|
2310 else: |
22179
46308fadaa15
merge: show the scary multiple ancestor hint for merges only, not for updates
Mads Kiilerich <madski@unity3d.com>
parents:
21551
diff
changeset
|
2311 pas = [p1.ancestor(p2, warn=branchmerge)] |
13874
9d67277c9204
merge: add ancestor to the update function
Matt Mackall <mpm@selenic.com>
parents:
13728
diff
changeset
|
2312 |
36177
187f2474bc11
merge: coerce nodes to bytes, not str
Augie Fackler <augie@google.com>
parents:
36142
diff
changeset
|
2313 fp1, fp2, xp1, xp2 = p1.node(), p2.node(), bytes(p1), bytes(p2) |
3314 | 2314 |
42409
72522fe7fb95
merge: reorder some initialization to make more sense
Martin von Zweigbergk <martinvonz@google.com>
parents:
42163
diff
changeset
|
2315 overwrite = force and not branchmerge |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4904
diff
changeset
|
2316 ### check phase |
27316
777f668eca70
merge: refuse update/merge if there are unresolved conflicts (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27267
diff
changeset
|
2317 if not overwrite: |
777f668eca70
merge: refuse update/merge if there are unresolved conflicts (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27267
diff
changeset
|
2318 if len(pl) > 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2319 raise error.Abort(_(b"outstanding uncommitted merge")) |
27316
777f668eca70
merge: refuse update/merge if there are unresolved conflicts (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27267
diff
changeset
|
2320 ms = mergestate.read(repo) |
777f668eca70
merge: refuse update/merge if there are unresolved conflicts (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27267
diff
changeset
|
2321 if list(ms.unresolved()): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2322 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2323 _(b"outstanding merge conflicts"), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2324 hint=_(b"use 'hg resolve' to resolve"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2325 ) |
6375
cdc458b12f0f
update: better logic and messages for updates
Matt Mackall <mpm@selenic.com>
parents:
6350
diff
changeset
|
2326 if branchmerge: |
21081
ffd7b6ce46ff
merge: pass merge ancestor to calculateupdates as a list
Mads Kiilerich <madski@unity3d.com>
parents:
21080
diff
changeset
|
2327 if pas == [p2]: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2328 raise error.Abort( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2329 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2330 b"merging with a working directory ancestor" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2331 b" has no effect" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2332 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2333 ) |
21081
ffd7b6ce46ff
merge: pass merge ancestor to calculateupdates as a list
Mads Kiilerich <madski@unity3d.com>
parents:
21080
diff
changeset
|
2334 elif pas == [p1]: |
31379
b6a6df38a802
merge: check current wc branch for 'nothing to merge', not its p1
Mads Kiilerich <mads@kiilerich.com>
parents:
31323
diff
changeset
|
2335 if not mergeancestor and wc.branch() == p2.branch(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2336 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2337 _(b"nothing to merge"), |
43117
8ff1ecfadcd1
cleanup: join string literals that are already on one line
Martin von Zweigbergk <martinvonz@google.com>
parents:
43106
diff
changeset
|
2338 hint=_(b"use 'hg update' or check 'hg heads'"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2339 ) |
6375
cdc458b12f0f
update: better logic and messages for updates
Matt Mackall <mpm@selenic.com>
parents:
6350
diff
changeset
|
2340 if not force and (wc.files() or wc.deleted()): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2341 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2342 _(b"uncommitted changes"), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2343 hint=_(b"use 'hg status' to list changes"), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2344 ) |
35284
1b03407e808d
merge: skip subrepo state, update hooks, and updating the dirstate in IMM
Phil Cohen <phillco@fb.com>
parents:
35283
diff
changeset
|
2345 if not wc.isinmemory(): |
1b03407e808d
merge: skip subrepo state, update hooks, and updating the dirstate in IMM
Phil Cohen <phillco@fb.com>
parents:
35283
diff
changeset
|
2346 for s in sorted(wc.substate): |
1b03407e808d
merge: skip subrepo state, update hooks, and updating the dirstate in IMM
Phil Cohen <phillco@fb.com>
parents:
35283
diff
changeset
|
2347 wc.sub(s).bailifchanged() |
13437
6169493ac3f9
Do not allow merging with uncommitted changes in a subrepo
Oleg Stepanov <oleg.stepanov@jetbrains.com>
parents:
13400
diff
changeset
|
2348 |
6375
cdc458b12f0f
update: better logic and messages for updates
Matt Mackall <mpm@selenic.com>
parents:
6350
diff
changeset
|
2349 elif not overwrite: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2350 if p1 == p2: # no-op update |
19929
ab2362e1672e
merge: exit early during a no-op update (BC)
Siddharth Agarwal <sid0@fb.com>
parents:
19803
diff
changeset
|
2351 # call the hooks and exit early |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2352 repo.hook(b'preupdate', throw=True, parent1=xp2, parent2=b'') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2353 repo.hook(b'update', parent1=xp2, parent2=b'', error=0) |
37107
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
2354 return updateresult(0, 0, 0, 0) |
19929
ab2362e1672e
merge: exit early during a no-op update (BC)
Siddharth Agarwal <sid0@fb.com>
parents:
19803
diff
changeset
|
2355 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2356 if updatecheck == UPDATECHECK_LINEAR and pas not in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2357 [p1], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2358 [p2], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2359 ): # nonlinear |
18985
a59e575c6ff8
update: allow dirty update to foreground (successors)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18895
diff
changeset
|
2360 dirty = wc.dirty(missing=True) |
30902
e6932e9a262a
merge: remove unused handling of default destination in merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30901
diff
changeset
|
2361 if dirty: |
18985
a59e575c6ff8
update: allow dirty update to foreground (successors)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18895
diff
changeset
|
2362 # Branching is a bit strange to ensure we do the minimal |
33146
7017567ebdf2
obsutil: move 'foreground' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33095
diff
changeset
|
2363 # amount of call to obsutil.foreground. |
7017567ebdf2
obsutil: move 'foreground' to the new modules
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
33095
diff
changeset
|
2364 foreground = obsutil.foreground(repo, [p1.node()]) |
18985
a59e575c6ff8
update: allow dirty update to foreground (successors)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18895
diff
changeset
|
2365 # note: the <node> variable contains a random identifier |
a59e575c6ff8
update: allow dirty update to foreground (successors)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18895
diff
changeset
|
2366 if repo[node].node() in foreground: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2367 pass # allow updating to successors |
30902
e6932e9a262a
merge: remove unused handling of default destination in merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30901
diff
changeset
|
2368 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2369 msg = _(b"uncommitted changes") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2370 hint = _(b"commit or update --clean to discard changes") |
30961
330fbd515512
destutil: remove duplicate check and leave it to merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30903
diff
changeset
|
2371 raise error.UpdateAbort(msg, hint=hint) |
18985
a59e575c6ff8
update: allow dirty update to foreground (successors)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18895
diff
changeset
|
2372 else: |
a59e575c6ff8
update: allow dirty update to foreground (successors)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18895
diff
changeset
|
2373 # Allow jumping branches if clean and specific rev given |
30901
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2374 pass |
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2375 |
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2376 if overwrite: |
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2377 pas = [wc] |
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2378 elif not branchmerge: |
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2379 pas = [p1] |
2814
0f787997e3c2
Merge: move most tests to the beginning
Matt Mackall <mpm@selenic.com>
parents:
2813
diff
changeset
|
2380 |
25843
bf9ea348b487
merge: mark ancient debugging option
Matt Mackall <mpm@selenic.com>
parents:
25754
diff
changeset
|
2381 # deprecated config: merge.followcopies |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2382 followcopies = repo.ui.configbool(b'merge', b'followcopies') |
21080
04540a8499a3
merge: move ancestor selection tweaking from manifestmerge to update function
Mads Kiilerich <madski@unity3d.com>
parents:
21024
diff
changeset
|
2383 if overwrite: |
30200
a2804ddcf9ae
update: enable copy tracing for backwards and non-linear updates
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30172
diff
changeset
|
2384 followcopies = False |
a2804ddcf9ae
update: enable copy tracing for backwards and non-linear updates
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30172
diff
changeset
|
2385 elif not pas[0]: |
a2804ddcf9ae
update: enable copy tracing for backwards and non-linear updates
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30172
diff
changeset
|
2386 followcopies = False |
a2804ddcf9ae
update: enable copy tracing for backwards and non-linear updates
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30172
diff
changeset
|
2387 if not branchmerge and not wc.dirty(missing=True): |
a2804ddcf9ae
update: enable copy tracing for backwards and non-linear updates
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30172
diff
changeset
|
2388 followcopies = False |
21080
04540a8499a3
merge: move ancestor selection tweaking from manifestmerge to update function
Mads Kiilerich <madski@unity3d.com>
parents:
21024
diff
changeset
|
2389 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4904
diff
changeset
|
2390 ### calculate phase |
23641
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23640
diff
changeset
|
2391 actionbyfile, diverge, renamedelete = calculateupdates( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2392 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2393 wc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2394 p2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2395 pas, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2396 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2397 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2398 mergeancestor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2399 followcopies, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2400 matcher=matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2401 mergeforce=mergeforce, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2402 ) |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2403 |
42970
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42959
diff
changeset
|
2404 if updatecheck == UPDATECHECK_NO_CONFLICT: |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
2405 for f, (m, args, msg) in pycompat.iteritems(actionbyfile): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2406 if m not in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2407 ACTION_GET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2408 ACTION_KEEP, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2409 ACTION_EXEC, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2410 ACTION_REMOVE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2411 ACTION_PATH_CONFLICT_RESOLVE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2412 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2413 msg = _(b"conflicting changes") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2414 hint = _(b"commit or update --clean to discard changes") |
31168
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2415 raise error.Abort(msg, hint=hint) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2416 |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2417 # Prompt and create actions. Most of this is in the resolve phase |
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2418 # already, but we can't handle .hgsubstate in filemerge or |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35726
diff
changeset
|
2419 # subrepoutil.submerge yet so we have to keep prompting for it. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2420 if b'.hgsubstate' in actionbyfile: |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2421 f = b'.hgsubstate' |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2422 m, args, msg = actionbyfile[f] |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29629
diff
changeset
|
2423 prompts = filemerge.partextras(labels) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2424 prompts[b'f'] = f |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2425 if m == ACTION_CHANGED_DELETED: |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2426 if repo.ui.promptchoice( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2427 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2428 b"local%(l)s changed %(f)s which other%(o)s deleted\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2429 b"use (c)hanged version or (d)elete?" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2430 b"$$ &Changed $$ &Delete" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2431 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2432 % prompts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2433 0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2434 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2435 actionbyfile[f] = (ACTION_REMOVE, None, b'prompt delete') |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2436 elif f in p1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2437 actionbyfile[f] = ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2438 ACTION_ADD_MODIFIED, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2439 None, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2440 b'prompt keep', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2441 ) |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2442 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2443 actionbyfile[f] = (ACTION_ADD, None, b'prompt keep') |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
2444 elif m == ACTION_DELETED_CHANGED: |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2445 f1, f2, fa, move, anc = args |
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2446 flags = p2[f2].flags() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2447 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2448 repo.ui.promptchoice( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2449 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2450 b"other%(o)s changed %(f)s which local%(l)s deleted\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2451 b"use (c)hanged version or leave (d)eleted?" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2452 b"$$ &Changed $$ &Deleted" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2453 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2454 % prompts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2455 0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2456 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2457 == 0 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2458 ): |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2459 actionbyfile[f] = ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2460 ACTION_GET, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2461 (flags, False), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2462 b'prompt recreating', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2463 ) |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2464 else: |
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2465 del actionbyfile[f] |
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2466 |
23641
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23640
diff
changeset
|
2467 # Convert to dictionary-of-lists format |
41039
54c3b4bd01f2
merge: extract helper for creating empty "actions" dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
39818
diff
changeset
|
2468 actions = emptyactions() |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
2469 for f, (m, args, msg) in pycompat.iteritems(actionbyfile): |
23641
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23640
diff
changeset
|
2470 if m not in actions: |
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23640
diff
changeset
|
2471 actions[m] = [] |
a7a0f32a383f
merge: make calculateupdates() return file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23640
diff
changeset
|
2472 actions[m].append((f, args, msg)) |
2775
b550cd82f92a
Move merge code to its own module
Matt Mackall <mpm@selenic.com>
parents:
diff
changeset
|
2473 |
29889
6f447b9ec263
util: rename checkcase() to fscasesensitive() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
29831
diff
changeset
|
2474 if not util.fscasesensitive(repo.path): |
23544
7cc0fb0080b6
merge: perform case-collision checking on final set of actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23541
diff
changeset
|
2475 # check collision between files only in p2 for clean update |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2476 if not branchmerge and ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2477 force or not wc.dirty(missing=True, branch=False) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2478 ): |
23544
7cc0fb0080b6
merge: perform case-collision checking on final set of actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23541
diff
changeset
|
2479 _checkcollision(repo, p2.manifest(), None) |
7cc0fb0080b6
merge: perform case-collision checking on final set of actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23541
diff
changeset
|
2480 else: |
7cc0fb0080b6
merge: perform case-collision checking on final set of actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23541
diff
changeset
|
2481 _checkcollision(repo, wc.manifest(), actions) |
7cc0fb0080b6
merge: perform case-collision checking on final set of actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23541
diff
changeset
|
2482 |
23525
5126d7718d7c
merge: move dr/rd warning messages out of applyupdates()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23524
diff
changeset
|
2483 # divergent renames |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
2484 for f, fl in sorted(pycompat.iteritems(diverge)): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2485 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2486 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2487 b"note: possible conflict - %s was renamed " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2488 b"multiple times to:\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2489 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2490 % f |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2491 ) |
42110
3a7efcbdf288
copies: print list of divergent renames in sorted order
Martin von Zweigbergk <martinvonz@google.com>
parents:
42057
diff
changeset
|
2492 for nf in sorted(fl): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2493 repo.ui.warn(b" %s\n" % nf) |
23525
5126d7718d7c
merge: move dr/rd warning messages out of applyupdates()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23524
diff
changeset
|
2494 |
5126d7718d7c
merge: move dr/rd warning messages out of applyupdates()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23524
diff
changeset
|
2495 # rename and delete |
43106
d783f945a701
py3: finish porting iteritems() to pycompat and remove source transformer
Gregory Szorc <gregory.szorc@gmail.com>
parents:
43104
diff
changeset
|
2496 for f, fl in sorted(pycompat.iteritems(renamedelete)): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2497 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2498 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2499 b"note: possible conflict - %s was deleted " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2500 b"and renamed to:\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2501 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2502 % f |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2503 ) |
42110
3a7efcbdf288
copies: print list of divergent renames in sorted order
Martin von Zweigbergk <martinvonz@google.com>
parents:
42057
diff
changeset
|
2504 for nf in sorted(fl): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2505 repo.ui.warn(b" %s\n" % nf) |
23525
5126d7718d7c
merge: move dr/rd warning messages out of applyupdates()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23524
diff
changeset
|
2506 |
26957
d16d73173fdd
merge: move messages about possible conflicts a litte earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
26949
diff
changeset
|
2507 ### apply phase |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2508 if not branchmerge: # just jump to the new rev |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2509 fp1, fp2, xp1, xp2 = fp2, nullid, xp2, b'' |
35284
1b03407e808d
merge: skip subrepo state, update hooks, and updating the dirstate in IMM
Phil Cohen <phillco@fb.com>
parents:
35283
diff
changeset
|
2510 if not partial and not wc.isinmemory(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2511 repo.hook(b'preupdate', throw=True, parent1=xp1, parent2=xp2) |
26957
d16d73173fdd
merge: move messages about possible conflicts a litte earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
26949
diff
changeset
|
2512 # note that we're in the middle of an update |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2513 repo.vfs.write(b'updatestate', p2.hex()) |
26957
d16d73173fdd
merge: move messages about possible conflicts a litte earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
26949
diff
changeset
|
2514 |
34885
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2515 # Advertise fsmonitor when its presence could be useful. |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2516 # |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2517 # We only advertise when performing an update from an empty working |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2518 # directory. This typically only occurs during initial clone. |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2519 # |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2520 # We give users a mechanism to disable the warning in case it is |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2521 # annoying. |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2522 # |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2523 # We only allow on Linux and MacOS because that's where fsmonitor is |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2524 # considered stable. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2525 fsmonitorwarning = repo.ui.configbool(b'fsmonitor', b'warn_when_unused') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2526 fsmonitorthreshold = repo.ui.configint( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2527 b'fsmonitor', b'warn_update_file_count' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2528 ) |
34885
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2529 try: |
36010
46a54de96a54
merge: cut import cycle at merge -> extensions
Yuya Nishihara <yuya@tcha.org>
parents:
36009
diff
changeset
|
2530 # avoid cycle: extensions -> cmdutil -> merge |
46a54de96a54
merge: cut import cycle at merge -> extensions
Yuya Nishihara <yuya@tcha.org>
parents:
36009
diff
changeset
|
2531 from . import extensions |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2532 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2533 extensions.find(b'fsmonitor') |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2534 fsmonitorenabled = repo.ui.config(b'fsmonitor', b'mode') != b'off' |
34885
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2535 # We intentionally don't look at whether fsmonitor has disabled |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2536 # itself because a) fsmonitor may have already printed a warning |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2537 # b) we only care about the config state here. |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2538 except KeyError: |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2539 fsmonitorenabled = False |
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2540 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2541 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2542 fsmonitorwarning |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2543 and not fsmonitorenabled |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2544 and p1.node() == nullid |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2545 and len(actions[ACTION_GET]) >= fsmonitorthreshold |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2546 and pycompat.sysplatform.startswith((b'linux', b'darwin')) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2547 ): |
34885
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2548 repo.ui.warn( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2549 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2550 b'(warning: large working directory being used without ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2551 b'fsmonitor enabled; enable fsmonitor to improve performance; ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2552 b'see "hg help -e fsmonitor")\n' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2553 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2554 ) |
34885
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2555 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2556 updatedirstate = not partial and not wc.isinmemory() |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2557 wantfiledata = updatedirstate and not branchmerge |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2558 stats, getfiledata = applyupdates( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2559 repo, actions, wc, p2, overwrite, wantfiledata, labels=labels |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2560 ) |
26957
d16d73173fdd
merge: move messages about possible conflicts a litte earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
26949
diff
changeset
|
2561 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2562 if updatedirstate: |
32351
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2563 with repo.dirstate.parentchange(): |
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2564 repo.setparents(fp1, fp2) |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2565 recordupdates(repo, actions, branchmerge, getfiledata) |
32351
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2566 # update completed, clear state |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2567 util.unlink(repo.vfs.join(b'updatestate')) |
19482
499fc471296b
update: add tracking of interrupted updates (issue3113)
Matt Mackall <mpm@selenic.com>
parents:
19285
diff
changeset
|
2568 |
32351
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2569 if not branchmerge: |
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2570 repo.dirstate.setbranch(p2.branch()) |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10431
diff
changeset
|
2571 |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33311
diff
changeset
|
2572 # If we're updating to a location, clean up any stale temporary includes |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33311
diff
changeset
|
2573 # (ex: this happens during hg rebase --abort). |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33311
diff
changeset
|
2574 if not branchmerge: |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33311
diff
changeset
|
2575 sparse.prunetemporaryincludes(repo) |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33311
diff
changeset
|
2576 |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10431
diff
changeset
|
2577 if not partial: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2578 repo.hook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2579 b'update', parent1=xp1, parent2=xp2, error=stats.unresolvedcount |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2580 ) |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10431
diff
changeset
|
2581 return stats |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2582 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2583 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2584 def graft( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2585 repo, ctx, pctx, labels=None, keepparent=False, keepconflictparent=False |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2586 ): |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2587 """Do a graft-like merge. |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2588 |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2589 This is a merge where the merge ancestor is chosen such that one |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2590 or more changesets are grafted onto the current changeset. In |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2591 addition to the merge, this fixes up the dirstate to include only |
27267
d6859d86a5d5
merge.graft: add option to keep second parent
Andrew Halberstadt <ahalberstadt@mozilla.com>
parents:
27137
diff
changeset
|
2592 a single parent (if keepparent is False) and tries to duplicate any |
d6859d86a5d5
merge.graft: add option to keep second parent
Andrew Halberstadt <ahalberstadt@mozilla.com>
parents:
27137
diff
changeset
|
2593 renames/copies appropriately. |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2594 |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2595 ctx - changeset to rebase |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2596 pctx - merge base, usually ctx.p1() |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2597 labels - merge labels eg ['local', 'graft'] |
27267
d6859d86a5d5
merge.graft: add option to keep second parent
Andrew Halberstadt <ahalberstadt@mozilla.com>
parents:
27137
diff
changeset
|
2598 keepparent - keep second parent if any |
42412
127937874395
merge: correct argument name in docstring
Anton Shestakov <av6@dwimlabs.net>
parents:
42410
diff
changeset
|
2599 keepconflictparent - if unresolved, keep parent used for the merge |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2600 |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2601 """ |
24643
a8e6897dffbe
graft: allow creating sibling grafts
Durham Goode <durham@fb.com>
parents:
24471
diff
changeset
|
2602 # If we're grafting a descendant onto an ancestor, be sure to pass |
a8e6897dffbe
graft: allow creating sibling grafts
Durham Goode <durham@fb.com>
parents:
24471
diff
changeset
|
2603 # mergeancestor=True to update. This does two things: 1) allows the merge if |
a8e6897dffbe
graft: allow creating sibling grafts
Durham Goode <durham@fb.com>
parents:
24471
diff
changeset
|
2604 # the destination is the same as the parent of the ctx (so we can use graft |
a8e6897dffbe
graft: allow creating sibling grafts
Durham Goode <durham@fb.com>
parents:
24471
diff
changeset
|
2605 # to copy commits), and 2) informs update that the incoming changes are |
a8e6897dffbe
graft: allow creating sibling grafts
Durham Goode <durham@fb.com>
parents:
24471
diff
changeset
|
2606 # newer than the destination so it doesn't prompt about "remote changed foo |
a8e6897dffbe
graft: allow creating sibling grafts
Durham Goode <durham@fb.com>
parents:
24471
diff
changeset
|
2607 # which local deleted". |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2608 mergeancestor = repo.changelog.isancestor(repo[b'.'].node(), ctx.node()) |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2609 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2610 stats = update( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2611 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2612 ctx.node(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2613 True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2614 True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2615 pctx.node(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2616 mergeancestor=mergeancestor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2617 labels=labels, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2618 ) |
38494
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2619 |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2620 if keepconflictparent and stats.unresolvedcount: |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2621 pother = ctx.node() |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2622 else: |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2623 pother = nullid |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2624 parents = ctx.parents() |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2625 if keepparent and len(parents) == 2 and pctx in parents: |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2626 parents.remove(pctx) |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2627 pother = parents[0].node() |
27267
d6859d86a5d5
merge.graft: add option to keep second parent
Andrew Halberstadt <ahalberstadt@mozilla.com>
parents:
27137
diff
changeset
|
2628 |
32351
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2629 with repo.dirstate.parentchange(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2630 repo.setparents(repo[b'.'].node(), pother) |
32351
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2631 repo.dirstate.write(repo.currenttransaction()) |
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2632 # fix up dirstate for copies and renames |
34787
754b5117622f
context: add workingfilectx.markcopied
Phil Cohen <phillco@fb.com>
parents:
34786
diff
changeset
|
2633 copies.duplicatecopies(repo, repo[None], ctx.rev(), pctx.rev()) |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2634 return stats |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2635 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2636 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2637 def purge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2638 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2639 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2640 ignored=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2641 removeemptydirs=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2642 removefiles=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2643 abortonerror=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2644 noop=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2645 ): |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2646 """Purge the working directory of untracked files. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2647 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2648 ``matcher`` is a matcher configured to scan the working directory - |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2649 potentially a subset. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2650 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2651 ``ignored`` controls whether ignored files should also be purged. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2652 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2653 ``removeemptydirs`` controls whether empty directories should be removed. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2654 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2655 ``removefiles`` controls whether files are removed. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2656 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2657 ``abortonerror`` causes an exception to be raised if an error occurs |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2658 deleting a file or directory. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2659 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2660 ``noop`` controls whether to actually remove files. If not defined, actions |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2661 will be taken. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2662 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2663 Returns an iterable of relative paths in the working directory that were |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2664 or would be removed. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2665 """ |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2666 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2667 def remove(removefn, path): |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2668 try: |
39464
3dd34b401bc2
merge: use vfs methods for I/O
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39463
diff
changeset
|
2669 removefn(path) |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2670 except OSError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2671 m = _(b'%s cannot be removed') % path |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2672 if abortonerror: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2673 raise error.Abort(m) |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2674 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2675 repo.ui.warn(_(b'warning: %s\n') % m) |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2676 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2677 # There's no API to copy a matcher. So mutate the passed matcher and |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2678 # restore it when we're done. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2679 oldtraversedir = matcher.traversedir |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2680 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2681 res = [] |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2682 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2683 try: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2684 if removeemptydirs: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2685 directories = [] |
43713
95d2eab0a7b9
dirstate: include explicit matches in match.traversedir calls
Martin von Zweigbergk <martinvonz@google.com>
parents:
43633
diff
changeset
|
2686 matcher.traversedir = directories.append |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2687 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2688 status = repo.status(match=matcher, ignored=ignored, unknown=True) |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2689 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2690 if removefiles: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2691 for f in sorted(status.unknown + status.ignored): |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2692 if not noop: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2693 repo.ui.note(_(b'removing file %s\n') % f) |
39464
3dd34b401bc2
merge: use vfs methods for I/O
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39463
diff
changeset
|
2694 remove(repo.wvfs.unlink, f) |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2695 res.append(f) |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2696 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2697 if removeemptydirs: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2698 for f in sorted(directories, reverse=True): |
39464
3dd34b401bc2
merge: use vfs methods for I/O
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39463
diff
changeset
|
2699 if matcher(f) and not repo.wvfs.listdir(f): |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2700 if not noop: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2701 repo.ui.note(_(b'removing directory %s\n') % f) |
39464
3dd34b401bc2
merge: use vfs methods for I/O
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39463
diff
changeset
|
2702 remove(repo.wvfs.rmdir, f) |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2703 res.append(f) |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2704 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2705 return res |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2706 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2707 finally: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2708 matcher.traversedir = oldtraversedir |