Mercurial > hg
annotate mercurial/merge.py @ 52282:51a350a22d0c
branching: merge stable into default
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Wed, 20 Nov 2024 15:53:19 +0100 |
parents | e6a44bc91bc2 |
children |
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 # |
46819
d4ba4d51f85f
contributor: change mentions of mpm to olivia
Raphaël Gomès <rgomes@octobus.net>
parents:
46811
diff
changeset
|
3 # Copyright 2006, 2007 Olivia Mackall <olivia@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 |
51863
f4733654f144
typing: add `from __future__ import annotations` to most files
Matt Harbison <matt_harbison@yahoo.com>
parents:
51834
diff
changeset
|
8 from __future__ import annotations |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
9 |
45292
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
10 import collections |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
11 import os |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
12 import struct |
51729
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
13 import typing |
52058
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
14 from typing import Dict, Optional, Tuple |
20590
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 _ |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
17 from .node import nullrev |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
18 from .thirdparty import attr |
51729
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
19 |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
20 # Force pytype to use the non-vendored package |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
21 if typing.TYPE_CHECKING: |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
22 # noinspection PyPackageRequirements |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
23 import attr |
278af66e6595
typing: induce pytype to use the standard `attr` instead of the vendored copy
Matt Harbison <matt_harbison@yahoo.com>
parents:
51703
diff
changeset
|
24 |
46692
39f23d20ea47
merge: force an exception message to bytes before printing as a warning
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
25 from .utils import stringutil |
48260
269ff8978086
dirstate: store mtimes with nanosecond precision in memory
Simon Sapin <simon.sapin@octobus.net>
parents:
47609
diff
changeset
|
26 from .dirstateutils import timestamp |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
27 from . import ( |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
28 copies, |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39464
diff
changeset
|
29 encoding, |
26587
56b2bcea2529
error: get Abort from 'error' instead of 'util'
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
26570
diff
changeset
|
30 error, |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
31 filemerge, |
31257
11831d755b51
merge: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31175
diff
changeset
|
32 match as matchmod, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
33 mergestate as mergestatemod, |
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, |
48805
d4486810a179
merge: remove direct rustmod reference
Raphaël Gomès <rgomes@octobus.net>
parents:
48757
diff
changeset
|
36 policy, |
30519
20a42325fdef
py3: use pycompat.getcwd() instead of os.getcwd()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
30486
diff
changeset
|
37 pycompat, |
27656
57c0d4888ca8
batchget: add support for backing up files
Siddharth Agarwal <sid0@fb.com>
parents:
27655
diff
changeset
|
38 scmutil, |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35726
diff
changeset
|
39 subrepoutil, |
25959
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
40 util, |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
41 worker, |
892d601f0d44
merge: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25844
diff
changeset
|
42 ) |
6512
368a4ec603cc
merge: introduce mergestate
Matt Mackall <mpm@selenic.com>
parents:
6425
diff
changeset
|
43 |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
44 rust_update_mod = policy.importrust("update") |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
45 |
20590
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
46 _pack = struct.pack |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
47 _unpack = struct.unpack |
2b7d54e929b4
merge: introduce new format for the state file
Pierre-Yves David <pierre-yves.david@fb.com>
parents:
20589
diff
changeset
|
48 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
49 |
27740
da5634e1b8a3
merge: factor out code to get checkunknown config
Siddharth Agarwal <sid0@fb.com>
parents:
27657
diff
changeset
|
50 def _getcheckunknownconfig(repo, section, name): |
34522
bed1d2eaa108
configitems: register 'merge.checkunknown' and 'merge.checkignored'
Boris Feld <boris.feld@octobus.net>
parents:
34486
diff
changeset
|
51 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
|
52 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
|
53 if config not in valid: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
54 validstr = b', '.join([b"'" + v + b"'" for v in valid]) |
48698
937998e43e93
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48590
diff
changeset
|
55 msg = _(b"%s.%s not valid ('%s' is none of %s)") |
937998e43e93
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48590
diff
changeset
|
56 msg %= (section, name, config, validstr) |
937998e43e93
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48590
diff
changeset
|
57 raise error.ConfigError(msg) |
27740
da5634e1b8a3
merge: factor out code to get checkunknown config
Siddharth Agarwal <sid0@fb.com>
parents:
27657
diff
changeset
|
58 return config |
da5634e1b8a3
merge: factor out code to get checkunknown config
Siddharth Agarwal <sid0@fb.com>
parents:
27657
diff
changeset
|
59 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
60 |
49910
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
61 def _checkunknownfile(dirstate, wvfs, dircache, 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
|
62 if wctx.isinmemory(): |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
63 # 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
|
64 # unknown file. |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
65 # |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
66 # 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
|
67 # 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
|
68 return False |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
69 |
23653
0297d8469350
merge: don't overwrite untracked file at directory rename target
Martin von Zweigbergk <martinvonz@google.com>
parents:
23652
diff
changeset
|
70 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
|
71 f2 = f |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
72 return ( |
49910
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
73 wvfs.isfileorlink_checkdir(dircache, f) |
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
74 and dirstate.normalize(f) not in dirstate |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
75 and mctx[f2].cmp(wctx[f]) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
76 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
77 |
16093
7e30f5f2285f
merge: refactor unknown file conflict checking
Matt Mackall <mpm@selenic.com>
parents:
16092
diff
changeset
|
78 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48927
diff
changeset
|
79 class _unknowndirschecker: |
34550
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
80 """ |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
81 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
|
82 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
|
83 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
|
84 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
|
85 |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
86 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
|
87 no conflict. |
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
88 """ |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
89 |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
90 def __init__(self): |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
91 # 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
|
92 # 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
|
93 # to be safe. |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
94 self._unknowndircache = set() |
34550
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
95 |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
96 # 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
|
97 # 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
|
98 # 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
|
99 self._missingdircache = set() |
34550
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
100 |
35288
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
101 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
|
102 if wctx.isinmemory(): |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
103 # 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
|
104 return False |
5db3c748ce8f
merge: don't check for unknown files in IMM
Phil Cohen <phillco@fb.com>
parents:
35284
diff
changeset
|
105 |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
106 # 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
|
107 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
|
108 if p in self._missingdircache: |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
109 return |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
110 if p in self._unknowndircache: |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
111 continue |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
112 if repo.wvfs.audit.check(p): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
113 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
114 repo.wvfs.isfileorlink(p) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
115 and repo.dirstate.normalize(p) not in repo.dirstate |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
116 ): |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
117 return p |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
118 if not repo.wvfs.lexists(p): |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
119 self._missingdircache.add(p) |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
120 return |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
121 self._unknowndircache.add(p) |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
122 |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
123 # 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
|
124 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
|
125 # 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
|
126 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
|
127 for fn in files: |
37086
658b1d28813c
merge: pconvert paths in _unknowndirschecker before dirstate-normalizing
Matt Harbison <matt_harbison@yahoo.com>
parents:
36537
diff
changeset
|
128 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
|
129 relf = repo.dirstate.normalize(relf, isknown=True) |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
130 if relf not in repo.dirstate: |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
131 return f |
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
132 return None |
34550
53e4bcab346b
merge: add _checkunknowndirs function for detecting path conflicts
Mark Thomas <mbthomas@fb.com>
parents:
34549
diff
changeset
|
133 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
134 |
45287
4ad6c4e9e35f
merge: pass mergeresult instead of actions in _checkunknownfiles() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45286
diff
changeset
|
135 def _checkunknownfiles(repo, wctx, mctx, force, mresult, mergeforce): |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
136 """ |
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
137 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
|
138 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
|
139 choose a different action. |
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
140 """ |
34551
1609a5afc4f5
merge: rename conflicts to fileconflicts in _checkunknownfiles
Mark Thomas <mbthomas@fb.com>
parents:
34550
diff
changeset
|
141 fileconflicts = set() |
34552
33c8a6837181
merge: check for path conflicts when updating (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34551
diff
changeset
|
142 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
|
143 warnconflicts = set() |
3feadb0b6c34
merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com>
parents:
28011
diff
changeset
|
144 abortconflicts = set() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
145 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
|
146 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
|
147 pathconfig = repo.ui.configbool( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
148 b'experimental', b'merge.checkpathconflicts' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
149 ) |
49909
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
150 dircache = dict() |
49910
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
151 dirstate = repo.dirstate |
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
152 wvfs = repo.wvfs |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
153 # wouldn't it be easier to loop over unknown files (and dirs)? |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
154 |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
155 if not force: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
156 |
27741
3951f132958f
merge: determine what untracked conflicts cause warns and aborts separately
Siddharth Agarwal <sid0@fb.com>
parents:
27740
diff
changeset
|
157 def collectconflicts(conflicts, config): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
158 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
|
159 abortconflicts.update(conflicts) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
160 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
|
161 warnconflicts.update(conflicts) |
3951f132958f
merge: determine what untracked conflicts cause warns and aborts separately
Siddharth Agarwal <sid0@fb.com>
parents:
27740
diff
changeset
|
162 |
35171
b85962350bb3
merge: cache unknown dir checks (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
34941
diff
changeset
|
163 checkunknowndirs = _unknowndirschecker() |
49909
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
164 for f in mresult.files( |
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
165 ( |
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
166 mergestatemod.ACTION_CREATED, |
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
167 mergestatemod.ACTION_DELETED_CHANGED, |
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
168 ) |
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
169 ): |
49910
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
170 if _checkunknownfile(dirstate, wvfs, dircache, wctx, mctx, f): |
49909
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
171 fileconflicts.add(f) |
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
172 elif pathconfig and f not in wctx: |
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
173 path = checkunknowndirs(repo, wctx, f) |
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
174 if path is not None: |
b7cf91ef03ba
merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49892
diff
changeset
|
175 pathconflicts.add(path) |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
176 for f, args, msg in mresult.getactions( |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
177 [mergestatemod.ACTION_LOCAL_DIR_RENAME_GET] |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
178 ): |
49910
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
179 if _checkunknownfile( |
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
180 dirstate, wvfs, dircache, wctx, mctx, f, args[0] |
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
181 ): |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
182 fileconflicts.add(f) |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
183 |
34552
33c8a6837181
merge: check for path conflicts when updating (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34551
diff
changeset
|
184 allconflicts = fileconflicts | pathconflicts |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
185 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
|
186 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
|
187 collectconflicts(ignoredconflicts, ignoredconfig) |
6b639caa1652
merge: split up checks for unknown and ignored files that differ
Siddharth Agarwal <sid0@fb.com>
parents:
27741
diff
changeset
|
188 collectconflicts(unknownconflicts, unknownconfig) |
28022
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
189 else: |
45340
cdc50e1929b0
mergeresult: yield from getactions() instead of buidling a list and returning
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45338
diff
changeset
|
190 for f, args, msg in list( |
cdc50e1929b0
mergeresult: yield from getactions() instead of buidling a list and returning
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45338
diff
changeset
|
191 mresult.getactions([mergestatemod.ACTION_CREATED_MERGE]) |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
192 ): |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
193 fl2, anc = args |
49910
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
194 different = _checkunknownfile( |
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
195 dirstate, wvfs, dircache, wctx, mctx, f |
7b474609f199
merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49909
diff
changeset
|
196 ) |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
197 if repo.dirstate._ignore(f): |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
198 config = ignoredconfig |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
199 else: |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
200 config = unknownconfig |
28022
e397b58c0563
rebase: respect checkunknown and checkignored in more cases
Siddharth Agarwal <sid0@fb.com>
parents:
28020
diff
changeset
|
201 |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
202 # The behavior when force is True is described by this table: |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
203 # config different mergeforce | action backup |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
204 # * n * | get n |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
205 # * y y | merge - |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
206 # abort y n | merge - (1) |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
207 # warn y n | warn + get y |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
208 # ignore y n | get y |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
209 # |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
210 # (1) this is probably the wrong behavior here -- we should |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
211 # probably abort, but some actions like rebases currently |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
212 # don't like an abort happening in the middle of |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
213 # merge.update. |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
214 if not different: |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
215 mresult.addfile( |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
216 f, |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
217 mergestatemod.ACTION_GET, |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
218 (fl2, False), |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
219 b'remote created', |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
220 ) |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
221 elif mergeforce or config == b'abort': |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
222 mresult.addfile( |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
223 f, |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
224 mergestatemod.ACTION_MERGE, |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
225 (f, f, None, False, anc), |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
226 b'remote differs from untracked local', |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
227 ) |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
228 elif config == b'abort': |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
229 abortconflicts.add(f) |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
230 else: |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
231 if config == b'warn': |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
232 warnconflicts.add(f) |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
233 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
234 f, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
235 mergestatemod.ACTION_GET, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
236 (fl2, True), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
237 b'remote created', |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
238 ) |
27741
3951f132958f
merge: determine what untracked conflicts cause warns and aborts separately
Siddharth Agarwal <sid0@fb.com>
parents:
27740
diff
changeset
|
239 |
28018
3feadb0b6c34
merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com>
parents:
28011
diff
changeset
|
240 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
|
241 warn = repo.ui.warn |
0217d66846f7
merge: improve error messages for path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34552
diff
changeset
|
242 if f in pathconflicts: |
0217d66846f7
merge: improve error messages for path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34552
diff
changeset
|
243 if repo.wvfs.isfileorlink(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
244 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
|
245 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
246 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
|
247 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
248 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
|
249 if abortconflicts: |
46418
dc00324e80f4
errors: use StateError more in merge module
Martin von Zweigbergk <martinvonz@google.com>
parents:
46367
diff
changeset
|
250 raise error.StateError( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
251 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
252 b"untracked files in working directory " |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
253 b"differ from files in requested revision" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
254 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
255 ) |
28018
3feadb0b6c34
merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com>
parents:
28011
diff
changeset
|
256 |
3feadb0b6c34
merge: move abort/warn checks up to the top level of _checkunknownfiles
Siddharth Agarwal <sid0@fb.com>
parents:
28011
diff
changeset
|
257 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
|
258 if repo.wvfs.isfileorlink(f): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
259 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
|
260 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
261 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
|
262 |
49911
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
263 def transformargs(f, args): |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
264 backup = ( |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
265 f in fileconflicts |
49889
3aa8e569478a
merge: don't pay for pathconflicts if there are none
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49886
diff
changeset
|
266 or pathconflicts |
3aa8e569478a
merge: don't pay for pathconflicts if there are none
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49886
diff
changeset
|
267 and ( |
3aa8e569478a
merge: don't pay for pathconflicts if there are none
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49886
diff
changeset
|
268 f in pathconflicts |
3aa8e569478a
merge: don't pay for pathconflicts if there are none
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49886
diff
changeset
|
269 or any(p in pathconflicts for p in pathutil.finddirs(f)) |
3aa8e569478a
merge: don't pay for pathconflicts if there are none
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49886
diff
changeset
|
270 ) |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
271 ) |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
272 (flags,) = args |
49911
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
273 return (flags, backup) |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
274 |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
275 mresult.mapaction( |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
276 mergestatemod.ACTION_CREATED, mergestatemod.ACTION_GET, transformargs |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
277 ) |
23655
79235b46062c
merge: extract method for checking for conflicting untracked file
Martin von Zweigbergk <martinvonz@google.com>
parents:
23654
diff
changeset
|
278 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
279 |
45347
1aef38d973e8
merge: pass mergeresult obj in _forgetremoved() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45346
diff
changeset
|
280 def _forgetremoved(wctx, mctx, branchmerge, mresult): |
3107
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
281 """ |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
282 Forget removed files |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
283 |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
284 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
|
285 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
|
286 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
|
287 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
|
288 manifest. |
6242
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
289 |
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
290 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
|
291 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
|
292 as removed. |
3107
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
293 """ |
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
294 |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
295 m = mergestatemod.ACTION_FORGET |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
296 if branchmerge: |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
297 m = mergestatemod.ACTION_REMOVE |
6242
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
298 for f in wctx.deleted(): |
6272
dd9bd227ae9a
merge: simplify some helpers
Matt Mackall <mpm@selenic.com>
parents:
6271
diff
changeset
|
299 if f not in mctx: |
45347
1aef38d973e8
merge: pass mergeresult obj in _forgetremoved() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45346
diff
changeset
|
300 mresult.addfile(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
|
301 |
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
302 if not branchmerge: |
a375ffc2aa1b
merge: fix handling of deleted files
Alexis S. L. Carvalho <alexis@cecm.usp.br>
parents:
6211
diff
changeset
|
303 for f in wctx.removed(): |
6272
dd9bd227ae9a
merge: simplify some helpers
Matt Mackall <mpm@selenic.com>
parents:
6271
diff
changeset
|
304 if f not in mctx: |
45347
1aef38d973e8
merge: pass mergeresult obj in _forgetremoved() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45346
diff
changeset
|
305 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
306 f, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
307 mergestatemod.ACTION_FORGET, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
308 None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
309 b"forget removed", |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
310 ) |
3107
3bd05ad67f45
merge: pull manifest checks and updates into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3106
diff
changeset
|
311 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
312 |
45333
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
313 def _checkcollision(repo, wmf, mresult): |
38045
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
314 """ |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
315 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
|
316 """ |
18e6ea9ba81d
narrow: filter set of files to check for case-folding to core
Martin von Zweigbergk <martinvonz@google.com>
parents:
38044
diff
changeset
|
317 # 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
|
318 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
|
319 if not narrowmatch.always(): |
44287
e76d98546bd2
merge: use manifestdict.walk() instead of manifestdict.matches()
Augie Fackler <augie@google.com>
parents:
44271
diff
changeset
|
320 pmmf = set(wmf.walk(narrowmatch)) |
45333
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
321 if mresult: |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
322 for f in list(mresult.files()): |
45333
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
323 if not narrowmatch(f): |
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
324 mresult.removefile(f) |
44287
e76d98546bd2
merge: use manifestdict.walk() instead of manifestdict.matches()
Augie Fackler <augie@google.com>
parents:
44271
diff
changeset
|
325 else: |
e76d98546bd2
merge: use manifestdict.walk() instead of manifestdict.matches()
Augie Fackler <augie@google.com>
parents:
44271
diff
changeset
|
326 # build provisional merged manifest up |
e76d98546bd2
merge: use manifestdict.walk() instead of manifestdict.matches()
Augie Fackler <augie@google.com>
parents:
44271
diff
changeset
|
327 pmmf = set(wmf) |
19105
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
328 |
45333
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
329 if mresult: |
37112
43ffd9070da1
merge: use constants for actions
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37111
diff
changeset
|
330 # KEEP and EXEC are no-op |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
331 for f in mresult.files( |
45333
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
332 ( |
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
333 mergestatemod.ACTION_ADD, |
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
334 mergestatemod.ACTION_ADD_MODIFIED, |
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
335 mergestatemod.ACTION_FORGET, |
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
336 mergestatemod.ACTION_GET, |
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
337 mergestatemod.ACTION_CHANGED_DELETED, |
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
338 mergestatemod.ACTION_DELETED_CHANGED, |
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
339 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
340 ): |
45333
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
341 pmmf.add(f) |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
342 for f in mresult.files((mergestatemod.ACTION_REMOVE,)): |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
343 pmmf.discard(f) |
45333
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
344 for f, args, msg in mresult.getactions( |
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
345 [mergestatemod.ACTION_DIR_RENAME_MOVE_LOCAL] |
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
346 ): |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
347 f2, flags = args |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
348 pmmf.discard(f2) |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
349 pmmf.add(f) |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
350 for f in mresult.files((mergestatemod.ACTION_LOCAL_DIR_RENAME_GET,)): |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
351 pmmf.add(f) |
45333
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
352 for f, args, msg in mresult.getactions([mergestatemod.ACTION_MERGE]): |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
353 f1, f2, fa, move, anc = args |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
354 if move: |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
355 pmmf.discard(f1) |
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
356 pmmf.add(f) |
19105
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
357 |
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
358 # 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
|
359 foldmap = {} |
33808
055fee3547df
merge: removed sorting in casefolding detection, for a slight performance win
Alex Gaynor <agaynor@mozilla.com>
parents:
33499
diff
changeset
|
360 for f in pmmf: |
19105
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
361 fold = util.normcase(f) |
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
362 if fold in foldmap: |
48699
10407e8e3807
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48698
diff
changeset
|
363 msg = _(b"case-folding collision between %s and %s") |
10407e8e3807
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48698
diff
changeset
|
364 msg %= (f, foldmap[fold]) |
10407e8e3807
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48698
diff
changeset
|
365 raise error.StateError(msg) |
19105
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
366 foldmap[fold] = f |
c60a7f5a741f
icasefs: rewrite case-folding collision detection (issue3452)
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
19095
diff
changeset
|
367 |
26661
2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
Mads Kiilerich <madski@unity3d.com>
parents:
26651
diff
changeset
|
368 # check case-folding of directories |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
369 foldprefix = unfoldprefix = lastfull = b'' |
26661
2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
Mads Kiilerich <madski@unity3d.com>
parents:
26651
diff
changeset
|
370 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
|
371 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
|
372 # the folded prefix matches but actual casing is different |
48700
d8577d00c023
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48699
diff
changeset
|
373 msg = _(b"case-folding collision between %s and directory of %s") |
d8577d00c023
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48699
diff
changeset
|
374 msg %= (lastfull, f) |
d8577d00c023
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48699
diff
changeset
|
375 raise error.StateError(msg) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
376 foldprefix = fold + b'/' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
377 unfoldprefix = f + b'/' |
26661
2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
Mads Kiilerich <madski@unity3d.com>
parents:
26651
diff
changeset
|
378 lastfull = f |
2b955fec91e0
merge: abort on file/directory case folding collisions (issue4892)
Mads Kiilerich <madski@unity3d.com>
parents:
26651
diff
changeset
|
379 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
380 |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
381 def _filesindirs(repo, manifest, dirs): |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
382 """ |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
383 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
|
384 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
|
385 in. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
386 """ |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
387 for f in manifest: |
43633
0b7733719d21
utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43421
diff
changeset
|
388 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
|
389 if p in dirs: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
390 yield f, p |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
391 break |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
392 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
393 |
45284
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
394 def checkpathconflicts(repo, wctx, mctx, mresult): |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
395 """ |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
396 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
|
397 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
|
398 """ |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
399 mf = wctx.manifest() |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
400 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
401 # 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
|
402 localconflicts = set() |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
403 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
404 # 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
|
405 # 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
|
406 remoteconflicts = set() |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
407 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
408 # 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
|
409 # 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
|
410 # can't be updated to cleanly. |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
411 invalidconflicts = set() |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
412 |
35172
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
413 # 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
|
414 createdfiledirs = set() |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
415 |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
416 # 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
|
417 deletedfiles = set() |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
418 |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
419 for f in mresult.files( |
45342
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
420 ( |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
421 mergestatemod.ACTION_CREATED, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
422 mergestatemod.ACTION_DELETED_CHANGED, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
423 mergestatemod.ACTION_MERGE, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
424 mergestatemod.ACTION_CREATED_MERGE, |
45342
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
425 ) |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
426 ): |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
427 # This action may create a new local file. |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
428 createdfiledirs.update(pathutil.finddirs(f)) |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
429 if mf.hasdir(f): |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
430 # The file aliases a local directory. This might be ok if all |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
431 # the files in the local directory are being deleted. This |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
432 # will be checked once we know what all the deleted files are. |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
433 remoteconflicts.add(f) |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
434 # Track the names of all deleted files. |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
435 for f in mresult.files((mergestatemod.ACTION_REMOVE,)): |
45342
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
436 deletedfiles.add(f) |
51703
ca7bde5dbafb
black: format the codebase with 23.3.0
Raphaël Gomès <rgomes@octobus.net>
parents:
51700
diff
changeset
|
437 for f, args, msg in mresult.getactions((mergestatemod.ACTION_MERGE,)): |
45342
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
438 f1, f2, fa, move, anc = args |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
439 if move: |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
440 deletedfiles.add(f1) |
51703
ca7bde5dbafb
black: format the codebase with 23.3.0
Raphaël Gomès <rgomes@octobus.net>
parents:
51700
diff
changeset
|
441 for f, args, msg in mresult.getactions( |
45342
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
442 (mergestatemod.ACTION_DIR_RENAME_MOVE_LOCAL,) |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
443 ): |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
444 f2, flags = args |
150900a17ec2
merge: rework iteration over mergeresult object in checkpathconflicts()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45341
diff
changeset
|
445 deletedfiles.add(f2) |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
446 |
35172
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
447 # 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
|
448 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
|
449 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
|
450 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
|
451 # 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
|
452 # 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
|
453 # 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
|
454 invalidconflicts.add(p) |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
455 else: |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
456 # 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
|
457 # 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
|
458 localconflicts.add(p) |
45344
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
459 pd = mresult.getfile(p) |
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
460 if pd and pd[0] in ( |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
461 mergestatemod.ACTION_CREATED, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
462 mergestatemod.ACTION_DELETED_CHANGED, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
463 mergestatemod.ACTION_MERGE, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
464 mergestatemod.ACTION_CREATED_MERGE, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
465 ): |
35172
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
466 # 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
|
467 # 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
|
468 # manifest. |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
469 invalidconflicts.add(p) |
a92b9f8e11ba
merge: check created file dirs for path conflicts only once (issue5716)
Mark Thomas <mbthomas@fb.com>
parents:
35171
diff
changeset
|
470 |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
471 # 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
|
472 for p in localconflicts: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
473 if p not in deletedfiles: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
474 ctxname = bytes(wctx).rstrip(b'+') |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
475 pnew = util.safename(p, ctxname, wctx, set(mresult.files())) |
44939
818b4f19ef23
merge: move an inspection of the dirstate from record to calculate phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
44856
diff
changeset
|
476 porig = wctx[p].copysource() or p |
45284
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
477 mresult.addfile( |
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
478 pnew, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
479 mergestatemod.ACTION_PATH_CONFLICT_RESOLVE, |
44939
818b4f19ef23
merge: move an inspection of the dirstate from record to calculate phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
44856
diff
changeset
|
480 (p, porig), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
481 b'local path conflict', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
482 ) |
45284
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
483 mresult.addfile( |
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
484 p, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
485 mergestatemod.ACTION_PATH_CONFLICT, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
486 (pnew, b'l'), |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
487 b'path conflict', |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
488 ) |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
489 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
490 if remoteconflicts: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
491 # 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
|
492 ctxname = bytes(mctx).rstrip(b'+') |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
493 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
|
494 if f not in deletedfiles: |
45344
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
495 m, args, msg = mresult.getfile(p) |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
496 pnew = util.safename(p, ctxname, wctx, set(mresult.files())) |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
497 if m in ( |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
498 mergestatemod.ACTION_DELETED_CHANGED, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
499 mergestatemod.ACTION_MERGE, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
500 ): |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
501 # Action was merge, just update target. |
45284
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
502 mresult.addfile(pnew, m, args, msg) |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
503 else: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
504 # 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
|
505 fl = args[0] |
45284
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
506 mresult.addfile( |
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
507 pnew, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
508 mergestatemod.ACTION_LOCAL_DIR_RENAME_GET, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
509 (p, fl), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
510 b'remote path conflict', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
511 ) |
45284
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
512 mresult.addfile( |
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
513 p, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
514 mergestatemod.ACTION_PATH_CONFLICT, |
48708
25d5dffbb211
merge: stop using merge action for pathconflict option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48707
diff
changeset
|
515 (pnew, b'r'), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
516 b'path conflict', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
517 ) |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
518 remoteconflicts.remove(p) |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
519 break |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
520 |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
521 if invalidconflicts: |
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
522 for p in invalidconflicts: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
523 repo.ui.warn(_(b"%s: is both a file and a directory\n") % p) |
46418
dc00324e80f4
errors: use StateError more in merge module
Martin von Zweigbergk <martinvonz@google.com>
parents:
46367
diff
changeset
|
524 raise error.StateError( |
dc00324e80f4
errors: use StateError more in merge module
Martin von Zweigbergk <martinvonz@google.com>
parents:
46367
diff
changeset
|
525 _(b"destination manifest contains path conflicts") |
dc00324e80f4
errors: use StateError more in merge module
Martin von Zweigbergk <martinvonz@google.com>
parents:
46367
diff
changeset
|
526 ) |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
527 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
528 |
45285
e7196f1da2b1
merge: pass mergeresult obj instead of actions in _filternarrowactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45284
diff
changeset
|
529 def _filternarrowactions(narrowmatch, branchmerge, mresult): |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
530 """ |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
531 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
|
532 |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
533 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
|
534 narrowed. |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
535 """ |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
536 # 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
|
537 # over a copy. |
51818
23116aefe786
merge: sort filemap only if requested by the caller
Manuel Jacob <me@manueljacob.de>
parents:
50260
diff
changeset
|
538 for f, action in list(mresult.filemap()): |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
539 if narrowmatch(f): |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
540 pass |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
541 elif not branchmerge: |
45285
e7196f1da2b1
merge: pass mergeresult obj instead of actions in _filternarrowactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45284
diff
changeset
|
542 mresult.removefile(f) # just updating, ignore changes outside clone |
48713
5dfaca4464d1
merge-actions: add an explicite "no_op" attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48711
diff
changeset
|
543 elif action[0].no_op: |
45285
e7196f1da2b1
merge: pass mergeresult obj instead of actions in _filternarrowactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45284
diff
changeset
|
544 mresult.removefile(f) # merge does not affect file |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
545 elif action[0].narrow_safe: |
48746
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
546 if not f.endswith(b'/'): |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
547 mresult.removefile(f) # merge won't affect on-disk files |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
548 |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
549 mresult.addcommitinfo( |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
550 f, b'outside-narrow-merge-action', action[0].changes |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
551 ) |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
552 else: # TODO: handle the tree case |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
553 msg = _( |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
554 b'merge affects file \'%s\' outside narrow, ' |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
555 b'which is not yet supported' |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
556 ) |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
557 hint = _(b'merging in the other direction may work') |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48714
diff
changeset
|
558 raise error.Abort(msg % f, hint=hint) |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
559 else: |
48702
ec23b0ba85c2
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48701
diff
changeset
|
560 msg = _(b'conflict in file \'%s\' is outside narrow clone') |
ec23b0ba85c2
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48701
diff
changeset
|
561 raise error.StateError(msg % f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
562 |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
563 |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48927
diff
changeset
|
564 class mergeresult: |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
565 """An object representing result of merging manifests. |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
566 |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
567 It has information about what actions need to be performed on dirstate |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
568 mapping of divergent renames and other such cases.""" |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
569 |
45281
fe2040abb183
merge: make mergeresult constructor initialize empty object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45280
diff
changeset
|
570 def __init__(self): |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
571 """ |
45291
26fa2eebc291
mergeresult: rename _actions to _filemapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
572 filemapping: dict of filename as keys and action related info as values |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
573 diverge: mapping of source name -> list of dest name for |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
574 divergent renames |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
575 renamedelete: mapping of source name -> list of destinations for files |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
576 deleted on one side and renamed on other. |
45275
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
577 commitinfo: dict containing data which should be used on commit |
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
578 contains a filename -> info mapping |
45299
e98f7c5babd7
mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45296
diff
changeset
|
579 actionmapping: dict of action names as keys and values are dict of |
e98f7c5babd7
mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45296
diff
changeset
|
580 filename as key and related data as values |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
581 """ |
45291
26fa2eebc291
mergeresult: rename _actions to _filemapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
582 self._filemapping = {} |
45281
fe2040abb183
merge: make mergeresult constructor initialize empty object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45280
diff
changeset
|
583 self._diverge = {} |
fe2040abb183
merge: make mergeresult constructor initialize empty object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45280
diff
changeset
|
584 self._renamedelete = {} |
45383
f970cca30989
merge: use collections.defaultdict() for mergeresult.commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45349
diff
changeset
|
585 self._commitinfo = collections.defaultdict(dict) |
45299
e98f7c5babd7
mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45296
diff
changeset
|
586 self._actionmapping = collections.defaultdict(dict) |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
587 |
45384
72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45383
diff
changeset
|
588 def updatevalues(self, diverge, renamedelete): |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
589 self._diverge = diverge |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
590 self._renamedelete = renamedelete |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
591 |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
592 def addfile(self, filename, action, data, message): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
593 """adds a new file to the mergeresult object |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
594 |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
595 filename: file which we are adding |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
596 action: one of mergestatemod.ACTION_* |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
597 data: a tuple of information like fctx and ctx related to this merge |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
598 message: a message about the merge |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
599 """ |
45292
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
600 # if the file already existed, we need to delete it's old |
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
601 # entry form _actionmapping too |
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
602 if filename in self._filemapping: |
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
603 a, d, m = self._filemapping[filename] |
45299
e98f7c5babd7
mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45296
diff
changeset
|
604 del self._actionmapping[a][filename] |
45292
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
605 |
45291
26fa2eebc291
mergeresult: rename _actions to _filemapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
606 self._filemapping[filename] = (action, data, message) |
45299
e98f7c5babd7
mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45296
diff
changeset
|
607 self._actionmapping[action][filename] = (data, message) |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
608 |
49911
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
609 def mapaction(self, actionfrom, actionto, transform): |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
610 """changes all occurrences of action `actionfrom` into `actionto`, |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
611 transforming its args with the function `transform`. |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
612 """ |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
613 orig = self._actionmapping[actionfrom] |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
614 del self._actionmapping[actionfrom] |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
615 dest = self._actionmapping[actionto] |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
616 for f, (data, msg) in orig.items(): |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
617 data = transform(f, data) |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
618 self._filemapping[f] = (actionto, data, msg) |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
619 dest[f] = (data, msg) |
c7a04bfabd4d
merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49910
diff
changeset
|
620 |
45344
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
621 def getfile(self, filename, default_return=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
622 """returns (action, args, msg) about this file |
45344
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
623 |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
624 returns default_return if the file is not present""" |
45344
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
625 if filename in self._filemapping: |
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
626 return self._filemapping[filename] |
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
627 return default_return |
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
628 |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
629 def files(self, actions=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
630 """returns files on which provided action needs to perfromed |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
631 |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
632 If actions is None, all files are returned |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
633 """ |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
634 # TODO: think whether we should return renamedelete and |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
635 # diverge filenames also |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
636 if actions is None: |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
637 for f in self._filemapping: |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
638 yield f |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
639 |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
640 else: |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
641 for a in actions: |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
642 for f in self._actionmapping[a]: |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
643 yield f |
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
644 |
45283
f1fb9a079131
merge: add removefile() to mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45282
diff
changeset
|
645 def removefile(self, filename): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
646 """removes a file from the mergeresult object as the file might |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
647 not merging anymore""" |
45292
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
648 action, data, message = self._filemapping[filename] |
45291
26fa2eebc291
mergeresult: rename _actions to _filemapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
649 del self._filemapping[filename] |
45299
e98f7c5babd7
mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45296
diff
changeset
|
650 del self._actionmapping[action][filename] |
45292
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
651 |
45336
27c6518b7287
mergeresult: add sort argument to getactions() method
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45335
diff
changeset
|
652 def getactions(self, actions, sort=False): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
653 """get list of files which are marked with these actions |
45336
27c6518b7287
mergeresult: add sort argument to getactions() method
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45335
diff
changeset
|
654 if sort is true, files for each action is sorted and then added |
45292
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
655 |
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
656 Returns a list of tuple of form (filename, data, message) |
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
657 """ |
69691c5b8ce4
mergeresult: introduce action -> (filename, data, msg) mapping and related API
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45291
diff
changeset
|
658 for a in actions: |
45336
27c6518b7287
mergeresult: add sort argument to getactions() method
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45335
diff
changeset
|
659 if sort: |
27c6518b7287
mergeresult: add sort argument to getactions() method
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45335
diff
changeset
|
660 for f in sorted(self._actionmapping[a]): |
27c6518b7287
mergeresult: add sort argument to getactions() method
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45335
diff
changeset
|
661 args, msg = self._actionmapping[a][f] |
45340
cdc50e1929b0
mergeresult: yield from getactions() instead of buidling a list and returning
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45338
diff
changeset
|
662 yield f, args, msg |
45336
27c6518b7287
mergeresult: add sort argument to getactions() method
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45335
diff
changeset
|
663 else: |
48927
c17aee610bab
merge: remove pycompat.iteritems()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48913
diff
changeset
|
664 for f, (args, msg) in self._actionmapping[a].items(): |
45340
cdc50e1929b0
mergeresult: yield from getactions() instead of buidling a list and returning
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45338
diff
changeset
|
665 yield f, args, msg |
45283
f1fb9a079131
merge: add removefile() to mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45282
diff
changeset
|
666 |
45338
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
667 def len(self, actions=None): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
668 """returns number of files which needs actions |
45338
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
669 |
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
670 if actions is passed, total of number of files in that action |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
671 only is returned""" |
45338
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
672 |
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
673 if actions is None: |
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
674 return len(self._filemapping) |
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
675 |
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
676 return sum(len(self._actionmapping[a]) for a in actions) |
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
677 |
45346
3c783ff08d40
mergeresult: introduce filemap() which yields filename based mapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45345
diff
changeset
|
678 def filemap(self, sort=False): |
51818
23116aefe786
merge: sort filemap only if requested by the caller
Manuel Jacob <me@manueljacob.de>
parents:
50260
diff
changeset
|
679 if sort: |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
680 for key, val in sorted(self._filemapping.items()): |
45346
3c783ff08d40
mergeresult: introduce filemap() which yields filename based mapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45345
diff
changeset
|
681 yield key, val |
3c783ff08d40
mergeresult: introduce filemap() which yields filename based mapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45345
diff
changeset
|
682 else: |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
683 for key, val in self._filemapping.items(): |
45346
3c783ff08d40
mergeresult: introduce filemap() which yields filename based mapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45345
diff
changeset
|
684 yield key, val |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
685 |
45384
72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45383
diff
changeset
|
686 def addcommitinfo(self, filename, key, value): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
687 """adds key-value information about filename which will be required |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
688 while committing this merge""" |
45384
72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45383
diff
changeset
|
689 self._commitinfo[filename][key] = value |
72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45383
diff
changeset
|
690 |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
691 @property |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
692 def diverge(self): |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
693 return self._diverge |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
694 |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
695 @property |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
696 def renamedelete(self): |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
697 return self._renamedelete |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
698 |
45275
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
699 @property |
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
700 def commitinfo(self): |
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
701 return self._commitinfo |
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
702 |
45279
f4a2b329717b
merge: move conversion of file-key dict to action-key dict in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45278
diff
changeset
|
703 @property |
f4a2b329717b
merge: move conversion of file-key dict to action-key dict in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45278
diff
changeset
|
704 def actionsdict(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
705 """returns a dictionary of actions to be perfomed with action as key |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
706 and a list of files and related arguments as values""" |
45348
490607efc992
merge: remove emptyactions() and use collections.defaultdict(list) instead
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45347
diff
changeset
|
707 res = collections.defaultdict(list) |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
708 for a, d in self._actionmapping.items(): |
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
709 for f, (args, msg) in d.items(): |
45299
e98f7c5babd7
mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45296
diff
changeset
|
710 res[a].append((f, args, msg)) |
e98f7c5babd7
mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45296
diff
changeset
|
711 return res |
45279
f4a2b329717b
merge: move conversion of file-key dict to action-key dict in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45278
diff
changeset
|
712 |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
713 def setactions(self, actions): |
45291
26fa2eebc291
mergeresult: rename _actions to _filemapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45290
diff
changeset
|
714 self._filemapping = actions |
45299
e98f7c5babd7
mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45296
diff
changeset
|
715 self._actionmapping = collections.defaultdict(dict) |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
716 for f, (act, data, msg) in self._filemapping.items(): |
45299
e98f7c5babd7
mergeresult: make actionmapping a dict of dict instead of dict of lists
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45296
diff
changeset
|
717 self._actionmapping[act][f] = data, msg |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
718 |
45278
0c849f0166c2
merge: introduce hasconflicts() on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45277
diff
changeset
|
719 def hasconflicts(self): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
720 """tells whether this merge resulted in some actions which can |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
721 result in conflicts or not""" |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
722 for a in self._actionmapping.keys(): |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
723 if ( |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
724 a |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
725 not in ( |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
726 mergestatemod.ACTION_GET, |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
727 mergestatemod.ACTION_EXEC, |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
728 mergestatemod.ACTION_REMOVE, |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
729 mergestatemod.ACTION_PATH_CONFLICT_RESOLVE, |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
730 ) |
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
731 and self._actionmapping[a] |
48713
5dfaca4464d1
merge-actions: add an explicite "no_op" attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48711
diff
changeset
|
732 and not a.no_op |
45278
0c849f0166c2
merge: introduce hasconflicts() on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45277
diff
changeset
|
733 ): |
0c849f0166c2
merge: introduce hasconflicts() on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45277
diff
changeset
|
734 return True |
0c849f0166c2
merge: introduce hasconflicts() on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45277
diff
changeset
|
735 |
0c849f0166c2
merge: introduce hasconflicts() on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45277
diff
changeset
|
736 return False |
0c849f0166c2
merge: introduce hasconflicts() on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45277
diff
changeset
|
737 |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
738 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
739 def manifestmerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
740 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
741 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
742 p2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
743 pa, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
744 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
745 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
746 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
747 acceptremote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
748 followcopies, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
749 forcefulldiff=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
750 ): |
3105
7c7469d41ade
merge: pull manifest comparison out into separate function
Matt Mackall <mpm@selenic.com>
parents:
3104
diff
changeset
|
751 """ |
30096
98d3d8108db0
merge: update doc of manifestmerge() per 18c2184c27dc
Yuya Nishihara <yuya@tcha.org>
parents:
30060
diff
changeset
|
752 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
|
753 |
18605
bcf29565d89f
manifestmerge: pass in branchmerge and force separately
Siddharth Agarwal <sid0@fb.com>
parents:
18544
diff
changeset
|
754 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
|
755 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
|
756 acceptremote = accept the incoming changes without prompting |
45168
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
757 |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
758 Returns an object of mergeresult class |
3105
7c7469d41ade
merge: pull manifest comparison out into separate function
Matt Mackall <mpm@selenic.com>
parents:
3104
diff
changeset
|
759 """ |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
760 mresult = mergeresult() |
27346
ba0da4b7397d
merge: rework manifestmerge to use a matcher
Augie Fackler <augie@google.com>
parents:
27345
diff
changeset
|
761 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
|
762 matcher = None |
3105
7c7469d41ade
merge: pull manifest comparison out into separate function
Matt Mackall <mpm@selenic.com>
parents:
3104
diff
changeset
|
763 |
18651
e556659340f0
manifestmerge: fix order in which manifests are fetched
Siddharth Agarwal <sid0@fb.com>
parents:
18650
diff
changeset
|
764 # 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
|
765 [ |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
766 x.manifest() |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
767 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
|
768 ] |
18651
e556659340f0
manifestmerge: fix order in which manifests are fetched
Siddharth Agarwal <sid0@fb.com>
parents:
18650
diff
changeset
|
769 |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
770 branch_copies1 = copies.branch_copies() |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
771 branch_copies2 = copies.branch_copies() |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
772 diverge = {} |
45275
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
773 # information from merge which is needed at commit time |
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
774 # for example choosing filelog of which parent to commit |
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
775 # TODO: use specific constants in future for this mapping |
18651
e556659340f0
manifestmerge: fix order in which manifests are fetched
Siddharth Agarwal <sid0@fb.com>
parents:
18650
diff
changeset
|
776 if followcopies: |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
777 branch_copies1, branch_copies2, diverge = copies.mergecopies( |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
778 repo, wctx, p2, pa |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
779 ) |
8753
af5f099d932b
merge: refactor manifestmerge init to better report effective ancestor
Matt Mackall <mpm@selenic.com>
parents:
8752
diff
changeset
|
780 |
32641
49e1e5acb8ff
py3: convert bool variables to bytes before passing into ui.debug()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
32612
diff
changeset
|
781 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
|
782 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
|
783 boolm = pycompat.bytestr(bool(matcher)) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
784 repo.ui.note(_(b"resolving manifests\n")) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
785 repo.ui.debug( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
786 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
|
787 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
788 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
|
789 |
18611
18c2184c27dc
merge: rename p1 to wctx in manifestmerge
Bryan O'Sullivan <bryano@fb.com>
parents:
18606
diff
changeset
|
790 m1, m2, ma = wctx.manifest(), p2.manifest(), pa.manifest() |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
791 copied1 = set(branch_copies1.copy.values()) |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
792 copied1.update(branch_copies1.movewithdir.values()) |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
793 copied2 = set(branch_copies2.copy.values()) |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
794 copied2.update(branch_copies2.movewithdir.values()) |
3295
72d1e521da77
merge: use contexts for manifestmerge
Matt Mackall <mpm@selenic.com>
parents:
3292
diff
changeset
|
795 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
796 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
|
797 # 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
|
798 # 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
|
799 # 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
|
800 if any(wctx.sub(s).dirty() for s in wctx.substate): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
801 m1[b'.hgsubstate'] = repo.nodeconstants.modifiednodeid |
9783
ee00ef6f9be7
submerge: properly deal with overwrites
Matt Mackall <mpm@selenic.com>
parents:
9780
diff
changeset
|
802 |
32151
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
803 # Don't use m2-vs-ma optimization if: |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
804 # - 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
|
805 # - 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
|
806 # merge. |
45580
76d79b80d953
merge: disable `m2-vs-ma` optimization if new filenode config is true
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45576
diff
changeset
|
807 # - we are tracking salvaged files specifically hence should process all |
76d79b80d953
merge: disable `m2-vs-ma` optimization if new filenode config is true
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45576
diff
changeset
|
808 # files |
76d79b80d953
merge: disable `m2-vs-ma` optimization if new filenode config is true
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45576
diff
changeset
|
809 if ( |
76d79b80d953
merge: disable `m2-vs-ma` optimization if new filenode config is true
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45576
diff
changeset
|
810 pa not in ([wctx, p2] + wctx.parents()) |
76d79b80d953
merge: disable `m2-vs-ma` optimization if new filenode config is true
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45576
diff
changeset
|
811 and not forcefulldiff |
45661
ebc14a2ad23d
salvaged: track removal-candidates in more cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45630
diff
changeset
|
812 and not ( |
ebc14a2ad23d
salvaged: track removal-candidates in more cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45630
diff
changeset
|
813 repo.ui.configbool(b'experimental', b'merge-track-salvaged') |
ebc14a2ad23d
salvaged: track removal-candidates in more cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45630
diff
changeset
|
814 or repo.filecopiesmode == b'changeset-sidedata' |
ebc14a2ad23d
salvaged: track removal-candidates in more cases
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45630
diff
changeset
|
815 ) |
45580
76d79b80d953
merge: disable `m2-vs-ma` optimization if new filenode config is true
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45576
diff
changeset
|
816 ): |
32151
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
817 # 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
|
818 # 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
|
819 # performance benefits in large repositories. |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
820 relevantfiles = set(ma.diff(m2).keys()) |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
821 |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
822 # For copied and moved files, we need to add the source file too. |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
823 for copykey, copyvalue in branch_copies1.copy.items(): |
32151
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
824 if copyvalue in relevantfiles: |
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
825 relevantfiles.add(copykey) |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
826 for movedirkey in branch_copies1.movewithdir: |
32151
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
827 relevantfiles.add(movedirkey) |
32498
bd56bea5ecf8
merge: use intersectmatchers() in "m2-vs-ma optimization"
Martin von Zweigbergk <martinvonz@google.com>
parents:
32351
diff
changeset
|
828 filesmatcher = scmutil.matchfiles(repo, relevantfiles) |
bd56bea5ecf8
merge: use intersectmatchers() in "m2-vs-ma optimization"
Martin von Zweigbergk <martinvonz@google.com>
parents:
32351
diff
changeset
|
829 matcher = matchmod.intersectmatchers(matcher, filesmatcher) |
32151
4d504e541d3d
rebase: use matcher to optimize manifestmerge
Durham Goode <durham@fb.com>
parents:
31646
diff
changeset
|
830 |
31257
11831d755b51
merge: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31175
diff
changeset
|
831 diff = m1.diff(m2, match=matcher) |
11831d755b51
merge: remove uses of manifest.matches
Durham Goode <durham@fb.com>
parents:
31175
diff
changeset
|
832 |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
833 for f, ((n1, fl1), (n2, fl2)) in diff.items(): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
834 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
|
835 if f not in ma: |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
836 # TODO: what if they're renamed from different sources? |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
837 fa = branch_copies1.copy.get( |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
838 f, None |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
839 ) or branch_copies2.copy.get(f, None) |
45296
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
840 args, msg = None, None |
23397
c7c95838be9a
merge: break out "both renamed a -> b" case
Martin von Zweigbergk <martinvonz@google.com>
parents:
23396
diff
changeset
|
841 if fa is not None: |
45296
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
842 args = (f, f, fa, False, pa.node()) |
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
843 msg = b'both renamed from %s' % fa |
18338
384df4db6520
merge: merge file flags together with file content
Mads Kiilerich <mads@kiilerich.com>
parents:
18336
diff
changeset
|
844 else: |
45296
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
845 args = (f, f, None, False, pa.node()) |
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
846 msg = b'both created' |
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
847 mresult.addfile(f, mergestatemod.ACTION_MERGE, args, msg) |
45817
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
848 elif f in branch_copies1.copy: |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
849 fa = branch_copies1.copy[f] |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
850 mresult.addfile( |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
851 f, |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
852 mergestatemod.ACTION_MERGE, |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
853 (f, fa, fa, False, pa.node()), |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
854 b'local replaced from %s' % fa, |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
855 ) |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
856 elif f in branch_copies2.copy: |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
857 fa = branch_copies2.copy[f] |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
858 mresult.addfile( |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
859 f, |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
860 mergestatemod.ACTION_MERGE, |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
861 (fa, f, fa, False, pa.node()), |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
862 b'other replaced from %s' % fa, |
58e7ee23ddbd
copies: handle more cases where a file got replaced by a copy
Martin von Zweigbergk <martinvonz@google.com>
parents:
45688
diff
changeset
|
863 ) |
16094
0776a6cababe
merge: don't use unknown()
Matt Mackall <mpm@selenic.com>
parents:
16093
diff
changeset
|
864 else: |
23396
6a254a2dd37c
merge: separate out "both created" cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23395
diff
changeset
|
865 a = ma[f] |
6a254a2dd37c
merge: separate out "both created" cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23395
diff
changeset
|
866 fla = ma.flags(f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
867 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
|
868 if n2 == a and fl2 == fla: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
869 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
870 f, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
871 mergestatemod.ACTION_KEEP, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
872 (), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
873 b'remote unchanged', |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
874 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
875 elif n1 == a and fl1 == fla: # local unchanged - use remote |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
876 if n1 == n2: # optimization: keep local content |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
877 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
878 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
879 mergestatemod.ACTION_EXEC, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
880 (fl2,), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
881 b'update permissions', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
882 ) |
23395
d9ebb475eede
merge: indent to prepare for next patch
Martin von Zweigbergk <martinvonz@google.com>
parents:
23387
diff
changeset
|
883 else: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
884 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
885 f, |
45277
c515c54f6530
merge: remove no longer required ACTION_GET_OTHER_AND_STORE
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45276
diff
changeset
|
886 mergestatemod.ACTION_GET, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
887 (fl2, False), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
888 b'remote is newer', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
889 ) |
45275
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
890 if branchmerge: |
45384
72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45383
diff
changeset
|
891 mresult.addcommitinfo( |
72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45383
diff
changeset
|
892 f, b'filenode-source', b'other' |
72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45383
diff
changeset
|
893 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
894 elif nol and n2 == a: # remote only changed 'x' |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
895 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
896 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
897 mergestatemod.ACTION_EXEC, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
898 (fl2,), |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
899 b'update permissions', |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
900 ) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
901 elif nol and n1 == a: # local only changed 'x' |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
902 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
903 f, |
45277
c515c54f6530
merge: remove no longer required ACTION_GET_OTHER_AND_STORE
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45276
diff
changeset
|
904 mergestatemod.ACTION_GET, |
44687
1b8fd4af3318
mergestate: store about files resolved in favour of other
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
905 (fl1, False), |
1b8fd4af3318
mergestate: store about files resolved in favour of other
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
906 b'remote is newer', |
1b8fd4af3318
mergestate: store about files resolved in favour of other
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
907 ) |
45275
8e8d513941b4
merge: introduce 'commitinfo' in mergeresult
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45274
diff
changeset
|
908 if branchmerge: |
45384
72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45383
diff
changeset
|
909 mresult.addcommitinfo(f, b'filenode-source', b'other') |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
910 else: # both changed something |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
911 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
912 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
913 mergestatemod.ACTION_MERGE, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
914 (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
|
915 b'versions differ', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
916 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
917 elif n1: # file exists only on local side |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
918 if f in copied2: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
919 pass # we'll deal with it on m2 side |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
920 elif ( |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
921 f in branch_copies1.movewithdir |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
922 ): # directory rename, move local |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
923 f2 = branch_copies1.movewithdir[f] |
31515
527a247f114f
merge: remove unnecessary matcher checks
Durham Goode <durham@fb.com>
parents:
31475
diff
changeset
|
924 if f2 in m2: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
925 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
926 f2, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
927 mergestatemod.ACTION_MERGE, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
928 (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
|
929 b'remote directory rename, both created', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
930 ) |
23475
67f1d68861fb
merge: don't ignore conflicting file in remote renamed directory
Martin von Zweigbergk <martinvonz@google.com>
parents:
23474
diff
changeset
|
931 else: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
932 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
933 f2, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
934 mergestatemod.ACTION_DIR_RENAME_MOVE_LOCAL, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
935 (f, fl1), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
936 b'remote directory rename - move from %s' % f, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
937 ) |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
938 elif f in branch_copies1.copy: |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
939 f2 = branch_copies1.copy[f] |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
940 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
941 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
942 mergestatemod.ACTION_MERGE, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
943 (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
|
944 b'local copied/moved from %s' % f2, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
945 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
946 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
|
947 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
|
948 if acceptremote: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
949 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
950 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
951 mergestatemod.ACTION_REMOVE, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
952 None, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
953 b'remote delete', |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
954 ) |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
955 else: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
956 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
957 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
958 mergestatemod.ACTION_CHANGED_DELETED, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
959 (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
|
960 b'prompt changed/deleted', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
961 ) |
45584
4c8a93ec6908
merge: store commitinfo if these is a dc or cd conflict
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45580
diff
changeset
|
962 if branchmerge: |
4c8a93ec6908
merge: store commitinfo if these is a dc or cd conflict
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45580
diff
changeset
|
963 mresult.addcommitinfo( |
4c8a93ec6908
merge: store commitinfo if these is a dc or cd conflict
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45580
diff
changeset
|
964 f, b'merge-removal-candidate', b'yes' |
4c8a93ec6908
merge: store commitinfo if these is a dc or cd conflict
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45580
diff
changeset
|
965 ) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
966 elif n1 == repo.nodeconstants.addednodeid: |
45118
d0ef8c1dddd4
manifest: tigher manifest parsing and flag use
Joerg Sonnenberger <joerg@bec.de>
parents:
45072
diff
changeset
|
967 # This file was locally added. We should forget it instead of |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
968 # deleting it. |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
969 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
970 f, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
971 mergestatemod.ACTION_FORGET, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
972 None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
973 b'remote deleted', |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
974 ) |
20639
1df033640a8e
merge: handle acceptremove of create+delete early in manifest merge
Mads Kiilerich <madski@unity3d.com>
parents:
20620
diff
changeset
|
975 else: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
976 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
977 f, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
978 mergestatemod.ACTION_REMOVE, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
979 None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
980 b'other deleted', |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
981 ) |
45587
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
982 if branchmerge: |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
983 # the file must be absent after merging, |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
984 # howeber the user might make |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
985 # the file reappear using revert and if they does, |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
986 # we force create a new node |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
987 mresult.addcommitinfo( |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
988 f, b'merge-removal-candidate', b'yes' |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
989 ) |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
990 |
45469
49ffaa4f65f6
merge: add missing ACTION_KEEP when both remote and ancestor are not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45468
diff
changeset
|
991 else: # file not in ancestor, not in remote |
49ffaa4f65f6
merge: add missing ACTION_KEEP when both remote and ancestor are not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45468
diff
changeset
|
992 mresult.addfile( |
49ffaa4f65f6
merge: add missing ACTION_KEEP when both remote and ancestor are not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45468
diff
changeset
|
993 f, |
45524
6877b0ee5f9d
mergestate: introduce a new ACTION_KEEP_NEW
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45518
diff
changeset
|
994 mergestatemod.ACTION_KEEP_NEW, |
45469
49ffaa4f65f6
merge: add missing ACTION_KEEP when both remote and ancestor are not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45468
diff
changeset
|
995 None, |
49ffaa4f65f6
merge: add missing ACTION_KEEP when both remote and ancestor are not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45468
diff
changeset
|
996 b'ancestor missing, remote missing', |
49ffaa4f65f6
merge: add missing ACTION_KEEP when both remote and ancestor are not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45468
diff
changeset
|
997 ) |
49ffaa4f65f6
merge: add missing ACTION_KEEP when both remote and ancestor are not present
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45468
diff
changeset
|
998 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
999 elif n2: # file exists only on remote side |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
1000 if f in copied1: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1001 pass # we'll deal with it on m1 side |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
1002 elif f in branch_copies2.movewithdir: |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
1003 f2 = branch_copies2.movewithdir[f] |
31515
527a247f114f
merge: remove unnecessary matcher checks
Durham Goode <durham@fb.com>
parents:
31475
diff
changeset
|
1004 if f2 in m1: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1005 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1006 f2, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1007 mergestatemod.ACTION_MERGE, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1008 (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
|
1009 b'local directory rename, both created', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1010 ) |
23476
39a12719ec65
merge: don't overwrite conflicting file in locally renamed directory
Martin von Zweigbergk <martinvonz@google.com>
parents:
23475
diff
changeset
|
1011 else: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1012 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1013 f2, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1014 mergestatemod.ACTION_LOCAL_DIR_RENAME_GET, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1015 (f, fl2), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1016 b'local directory rename - get from %s' % f, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1017 ) |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
1018 elif f in branch_copies2.copy: |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
1019 f2 = branch_copies2.copy[f] |
45296
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
1020 msg, args = None, None |
31515
527a247f114f
merge: remove unnecessary matcher checks
Durham Goode <durham@fb.com>
parents:
31475
diff
changeset
|
1021 if f2 in m2: |
45296
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
1022 args = (f2, f, f2, False, pa.node()) |
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
1023 msg = b'remote copied from %s' % f2 |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1024 else: |
45296
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
1025 args = (f2, f, f2, True, pa.node()) |
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
1026 msg = b'remote moved from %s' % f2 |
cb0cd87e16b4
merge: unify logic of couple of if-else's in manifestmerge()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45293
diff
changeset
|
1027 mresult.addfile(f, mergestatemod.ACTION_MERGE, args, msg) |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1028 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
|
1029 # 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
|
1030 # 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
|
1031 # |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1032 # 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
|
1033 # n * * | create |
23650
b85c548ab14d
merge: introduce 'c' action like 'g', but with additional safety
Martin von Zweigbergk <martinvonz@google.com>
parents:
23649
diff
changeset
|
1034 # y n * | create |
b85c548ab14d
merge: introduce 'c' action like 'g', but with additional safety
Martin von Zweigbergk <martinvonz@google.com>
parents:
23649
diff
changeset
|
1035 # 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
|
1036 # 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
|
1037 # |
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1038 # 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
|
1039 # 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
|
1040 if not force: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1041 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1042 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1043 mergestatemod.ACTION_CREATED, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1044 (fl2,), |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1045 b'remote created', |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1046 ) |
23649
18ab5e5955df
merge: structure 'remote created' code to match table
Martin von Zweigbergk <martinvonz@google.com>
parents:
23641
diff
changeset
|
1047 elif not branchmerge: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1048 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1049 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1050 mergestatemod.ACTION_CREATED, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1051 (fl2,), |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1052 b'remote created', |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1053 ) |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1054 else: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1055 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1056 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1057 mergestatemod.ACTION_CREATED_MERGE, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1058 (fl2, pa.node()), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1059 b'remote created, get or merge', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1060 ) |
23473
922b10c870c5
merge: branch code into {n1 and n2, n1, n2} top-level cases
Martin von Zweigbergk <martinvonz@google.com>
parents:
23448
diff
changeset
|
1061 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
|
1062 df = None |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
1063 for d in branch_copies1.dirmove: |
30581
43a9e02a7b7f
graft: support grafting changes to new file in renamed directory (issue5436)
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30519
diff
changeset
|
1064 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
|
1065 # new file added in a directory that was moved |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
1066 df = branch_copies1.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
|
1067 break |
31515
527a247f114f
merge: remove unnecessary matcher checks
Durham Goode <durham@fb.com>
parents:
31475
diff
changeset
|
1068 if df is not None and df in m1: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1069 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1070 df, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1071 mergestatemod.ACTION_MERGE, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1072 (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
|
1073 b'local directory rename - respect move ' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1074 b'from %s' % f, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1075 ) |
30581
43a9e02a7b7f
graft: support grafting changes to new file in renamed directory (issue5436)
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30519
diff
changeset
|
1076 elif acceptremote: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1077 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1078 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1079 mergestatemod.ACTION_CREATED, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1080 (fl2,), |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1081 b'remote recreating', |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1082 ) |
18606
95773237df7f
manifestmerge: handle abort on local unknown, remote created files
Siddharth Agarwal <sid0@fb.com>
parents:
18605
diff
changeset
|
1083 else: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1084 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1085 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1086 mergestatemod.ACTION_DELETED_CHANGED, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1087 (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
|
1088 b'prompt deleted/changed', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1089 ) |
45584
4c8a93ec6908
merge: store commitinfo if these is a dc or cd conflict
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45580
diff
changeset
|
1090 if branchmerge: |
4c8a93ec6908
merge: store commitinfo if these is a dc or cd conflict
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45580
diff
changeset
|
1091 mresult.addcommitinfo( |
4c8a93ec6908
merge: store commitinfo if these is a dc or cd conflict
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45580
diff
changeset
|
1092 f, b'merge-removal-candidate', b'yes' |
4c8a93ec6908
merge: store commitinfo if these is a dc or cd conflict
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45580
diff
changeset
|
1093 ) |
45468
09edbff6ae8d
merge: store ACTION_KEEP_ABSENT when we are keeping the file absent locally
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45467
diff
changeset
|
1094 else: |
09edbff6ae8d
merge: store ACTION_KEEP_ABSENT when we are keeping the file absent locally
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45467
diff
changeset
|
1095 mresult.addfile( |
09edbff6ae8d
merge: store ACTION_KEEP_ABSENT when we are keeping the file absent locally
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45467
diff
changeset
|
1096 f, |
09edbff6ae8d
merge: store ACTION_KEEP_ABSENT when we are keeping the file absent locally
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45467
diff
changeset
|
1097 mergestatemod.ACTION_KEEP_ABSENT, |
09edbff6ae8d
merge: store ACTION_KEEP_ABSENT when we are keeping the file absent locally
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45467
diff
changeset
|
1098 None, |
09edbff6ae8d
merge: store ACTION_KEEP_ABSENT when we are keeping the file absent locally
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45467
diff
changeset
|
1099 b'local not present, remote unchanged', |
09edbff6ae8d
merge: store ACTION_KEEP_ABSENT when we are keeping the file absent locally
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45467
diff
changeset
|
1100 ) |
45587
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
1101 if branchmerge: |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
1102 # the file must be absent after merging |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
1103 # however the user might make |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
1104 # the file reappear using revert and if they does, |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
1105 # we force create a new node |
768412472663
merge: store cases when a file is absent post merge in commitinfo
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45584
diff
changeset
|
1106 mresult.addcommitinfo(f, b'merge-removal-candidate', b'yes') |
23651
72da02d7f126
merge: collect checking for unknown files at end of manifestmerge()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23650
diff
changeset
|
1107 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1108 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
|
1109 # If we are merging, look for path conflicts. |
45284
31c454a5f1a8
merge: pass mergeresult in checkpassconflicts() instead of actions (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45283
diff
changeset
|
1110 checkpathconflicts(repo, wctx, p2, mresult) |
34555
989e884d1be9
merge: check for path conflicts when merging (issue5628)
Mark Thomas <mbthomas@fb.com>
parents:
34553
diff
changeset
|
1111 |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1112 narrowmatch = repo.narrowmatch() |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1113 if not narrowmatch.always(): |
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1114 # Updates "actions" in place |
45285
e7196f1da2b1
merge: pass mergeresult obj instead of actions in _filternarrowactions()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45284
diff
changeset
|
1115 _filternarrowactions(narrowmatch, branchmerge, mresult) |
38044
8f37b5fc5abf
narrow: filter merge actions in core
Martin von Zweigbergk <martinvonz@google.com>
parents:
37959
diff
changeset
|
1116 |
44200
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
1117 renamedelete = branch_copies1.renamedelete |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
1118 renamedelete.update(branch_copies2.renamedelete) |
fa9ad1da2e77
merge: start using the per-side copy dicts
Martin von Zweigbergk <martinvonz@google.com>
parents:
44199
diff
changeset
|
1119 |
45384
72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45383
diff
changeset
|
1120 mresult.updatevalues(diverge, renamedelete) |
45281
fe2040abb183
merge: make mergeresult constructor initialize empty object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45280
diff
changeset
|
1121 return mresult |
3105
7c7469d41ade
merge: pull manifest comparison out into separate function
Matt Mackall <mpm@selenic.com>
parents:
3104
diff
changeset
|
1122 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1123 |
45286
00e9c5edcd58
merge: pass mergeresult obj instead of actions dict in _resolvetrivial()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45285
diff
changeset
|
1124 def _resolvetrivial(repo, wctx, mctx, ancestor, mresult): |
23531
416c133145ee
merge: extract _resolvetrivial() function
Martin von Zweigbergk <martinvonz@google.com>
parents:
23526
diff
changeset
|
1125 """Resolves false conflicts where the nodeid changed but the content |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1126 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
|
1127 # 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
|
1128 # actions as we resolve trivial conflicts. |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
1129 for f in list(mresult.files((mergestatemod.ACTION_CHANGED_DELETED,))): |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
1130 if f in ancestor and not wctx[f].cmp(ancestor[f]): |
23531
416c133145ee
merge: extract _resolvetrivial() function
Martin von Zweigbergk <martinvonz@google.com>
parents:
23526
diff
changeset
|
1131 # local did change but ended up with same content |
45286
00e9c5edcd58
merge: pass mergeresult obj instead of actions dict in _resolvetrivial()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45285
diff
changeset
|
1132 mresult.addfile( |
00e9c5edcd58
merge: pass mergeresult obj instead of actions dict in _resolvetrivial()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45285
diff
changeset
|
1133 f, mergestatemod.ACTION_REMOVE, None, b'prompt same' |
00e9c5edcd58
merge: pass mergeresult obj instead of actions dict in _resolvetrivial()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45285
diff
changeset
|
1134 ) |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
1135 |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
1136 for f in list(mresult.files((mergestatemod.ACTION_DELETED_CHANGED,))): |
45293
4e6a2889dd1d
merge: use the new action based mapping introduced in mergeresult obj
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45292
diff
changeset
|
1137 if f in ancestor and not mctx[f].cmp(ancestor[f]): |
23531
416c133145ee
merge: extract _resolvetrivial() function
Martin von Zweigbergk <martinvonz@google.com>
parents:
23526
diff
changeset
|
1138 # remote did change but ended up with same content |
45286
00e9c5edcd58
merge: pass mergeresult obj instead of actions dict in _resolvetrivial()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45285
diff
changeset
|
1139 mresult.removefile(f) # don't get = keep local deleted |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1140 |
23531
416c133145ee
merge: extract _resolvetrivial() function
Martin von Zweigbergk <martinvonz@google.com>
parents:
23526
diff
changeset
|
1141 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1142 def calculateupdates( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1143 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1144 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1145 mctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1146 ancestors, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1147 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1148 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1149 acceptremote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1150 followcopies, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1151 matcher=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1152 mergeforce=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1153 ): |
45168
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
1154 """ |
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
1155 Calculate the actions needed to merge mctx into wctx using ancestors |
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
1156 |
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
1157 Uses manifestmerge() to merge manifest and get list of actions required to |
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
1158 perform for merging two manifests. If there are multiple ancestors, uses bid |
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
1159 merge if enabled. |
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
1160 |
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
1161 Also filters out actions which are unrequired if repository is sparse. |
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
1162 |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
1163 Returns mergeresult object same as manifestmerge(). |
45168
4f71d1a99e45
merge: document return values of manifestmerge() and calculateupdates()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45167
diff
changeset
|
1164 """ |
33323
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
1165 # Avoid cycle. |
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
1166 from . import sparse |
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
1167 |
45281
fe2040abb183
merge: make mergeresult constructor initialize empty object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45280
diff
changeset
|
1168 mresult = None |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1169 if len(ancestors) == 1: # default |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
1170 mresult = manifestmerge( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1171 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1172 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1173 mctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1174 ancestors[0], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1175 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1176 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1177 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1178 acceptremote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1179 followcopies, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1180 ) |
45287
4ad6c4e9e35f
merge: pass mergeresult instead of actions in _checkunknownfiles() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45286
diff
changeset
|
1181 _checkunknownfiles(repo, wctx, mctx, force, mresult, mergeforce) |
49886
becd16690cbe
debug: add a config to abort update early
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49365
diff
changeset
|
1182 if repo.ui.configbool(b'devel', b'debug.abort-update'): |
becd16690cbe
debug: add a config to abort update early
Arseniy Alekseyev <aalekseyev@janestreet.com>
parents:
49365
diff
changeset
|
1183 exit(1) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1184 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1185 else: # only when merge.preferancestor=* - the default |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1186 repo.ui.note( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1187 _(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
|
1188 % ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1189 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1190 mctx, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1191 _(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
|
1192 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1193 ) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1194 |
45280
98218c83242f
merge: improve documentation of fbid dict used for merge bid
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45279
diff
changeset
|
1195 # mapping filename to bids (action method to list af actions) |
98218c83242f
merge: improve documentation of fbid dict used for merge bid
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45279
diff
changeset
|
1196 # {FILENAME1 : BID1, FILENAME2 : BID2} |
98218c83242f
merge: improve documentation of fbid dict used for merge bid
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45279
diff
changeset
|
1197 # BID is another dictionary which contains |
98218c83242f
merge: improve documentation of fbid dict used for merge bid
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45279
diff
changeset
|
1198 # mapping of following form: |
98218c83242f
merge: improve documentation of fbid dict used for merge bid
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45279
diff
changeset
|
1199 # {ACTION_X : [info, ..], ACTION_Y : [info, ..]} |
98218c83242f
merge: improve documentation of fbid dict used for merge bid
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45279
diff
changeset
|
1200 fbids = {} |
45470
6e474eec4be6
merge: update commitinfo from all mergeresults during bid merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45469
diff
changeset
|
1201 mresult = mergeresult() |
23526
a5887f2da5e6
merge: don't treat 'diverge' and 'renamedelete' like actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23525
diff
changeset
|
1202 diverge, renamedelete = None, None |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1203 for ancestor in ancestors: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1204 repo.ui.note(_(b'\ncalculating bids for ancestor %s\n') % ancestor) |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
1205 mresult1 = manifestmerge( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1206 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1207 wctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1208 mctx, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1209 ancestor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1210 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1211 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1212 matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1213 acceptremote, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1214 followcopies, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1215 forcefulldiff=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1216 ) |
45287
4ad6c4e9e35f
merge: pass mergeresult instead of actions in _checkunknownfiles() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45286
diff
changeset
|
1217 _checkunknownfiles(repo, wctx, mctx, force, mresult1, mergeforce) |
26318
d3bd6cefd742
bidmerge: choose shortest list of diverge and rename/delete warnings
Matt Mackall <mpm@selenic.com>
parents:
26304
diff
changeset
|
1218 |
d3bd6cefd742
bidmerge: choose shortest list of diverge and rename/delete warnings
Matt Mackall <mpm@selenic.com>
parents:
26304
diff
changeset
|
1219 # 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
|
1220 # merge will correctly incorporate more information |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
1221 if diverge is None or len(mresult1.diverge) < len(diverge): |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
1222 diverge = mresult1.diverge |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
1223 if renamedelete is None or len(renamedelete) < len( |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
1224 mresult1.renamedelete |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
1225 ): |
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
1226 renamedelete = mresult1.renamedelete |
26318
d3bd6cefd742
bidmerge: choose shortest list of diverge and rename/delete warnings
Matt Mackall <mpm@selenic.com>
parents:
26304
diff
changeset
|
1227 |
45470
6e474eec4be6
merge: update commitinfo from all mergeresults during bid merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45469
diff
changeset
|
1228 # blindly update final mergeresult commitinfo with what we get |
6e474eec4be6
merge: update commitinfo from all mergeresults during bid merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45469
diff
changeset
|
1229 # from mergeresult object for each ancestor |
6e474eec4be6
merge: update commitinfo from all mergeresults during bid merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45469
diff
changeset
|
1230 # TODO: some commitinfo depends on what bid merge choose and hence |
6e474eec4be6
merge: update commitinfo from all mergeresults during bid merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45469
diff
changeset
|
1231 # we will need to make commitinfo also depend on bid merge logic |
6e474eec4be6
merge: update commitinfo from all mergeresults during bid merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45469
diff
changeset
|
1232 mresult._commitinfo.update(mresult1._commitinfo) |
6e474eec4be6
merge: update commitinfo from all mergeresults during bid merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45469
diff
changeset
|
1233 |
45346
3c783ff08d40
mergeresult: introduce filemap() which yields filename based mapping
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45345
diff
changeset
|
1234 for f, a in mresult1.filemap(sort=True): |
23638
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1235 m, args, msg = a |
48711
9bc86adf32f6
merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48708
diff
changeset
|
1236 repo.ui.debug(b' %s: %s -> %s\n' % (f, msg, m.__bytes__())) |
23638
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1237 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
|
1238 d = fbids[f] |
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1239 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
|
1240 d[m].append(a) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1241 else: |
23638
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1242 d[m] = [a] |
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1243 else: |
09be050ca98c
merge: let bid merge work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23637
diff
changeset
|
1244 fbids[f] = {m: [a]} |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1245 |
45280
98218c83242f
merge: improve documentation of fbid dict used for merge bid
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45279
diff
changeset
|
1246 # Call for bids |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1247 # Pick the best bid for each file |
45447
e7c8a5030a90
merge: show number of ancestors in bid merge debug notes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45385
diff
changeset
|
1248 repo.ui.note( |
e7c8a5030a90
merge: show number of ancestors in bid merge debug notes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45385
diff
changeset
|
1249 _(b'\nauction for merging merge bids (%d ancestors)\n') |
e7c8a5030a90
merge: show number of ancestors in bid merge debug notes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45385
diff
changeset
|
1250 % len(ancestors) |
e7c8a5030a90
merge: show number of ancestors in bid merge debug notes
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45385
diff
changeset
|
1251 ) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1252 for f, bids in sorted(fbids.items()): |
45459
ccd3bf4490c1
merge: show list of bids for each file in bid-merge in ui.debug()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45447
diff
changeset
|
1253 if repo.ui.debugflag: |
ccd3bf4490c1
merge: show list of bids for each file in bid-merge in ui.debug()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45447
diff
changeset
|
1254 repo.ui.debug(b" list of bids for %s:\n" % f) |
ccd3bf4490c1
merge: show list of bids for each file in bid-merge in ui.debug()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45447
diff
changeset
|
1255 for m, l in sorted(bids.items()): |
ccd3bf4490c1
merge: show list of bids for each file in bid-merge in ui.debug()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45447
diff
changeset
|
1256 for _f, args, msg in l: |
48711
9bc86adf32f6
merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48708
diff
changeset
|
1257 repo.ui.debug(b' %s -> %s\n' % (msg, m.__bytes__())) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1258 # 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
|
1259 # Consensus? |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1260 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
|
1261 m, l = list(bids.items())[0] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1262 if all(a == l[0] for a in l[1:]): # len(bids) is > 1 |
48711
9bc86adf32f6
merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48708
diff
changeset
|
1263 repo.ui.note( |
9bc86adf32f6
merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48708
diff
changeset
|
1264 _(b" %s: consensus for %s\n") % (f, m.__bytes__()) |
9bc86adf32f6
merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48708
diff
changeset
|
1265 ) |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1266 mresult.addfile(f, *l[0]) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1267 continue |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1268 # If keep is an option, just do it. |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1269 if mergestatemod.ACTION_KEEP in bids: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1270 repo.ui.note(_(b" %s: picking 'keep' action\n") % f) |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1271 mresult.addfile(f, *bids[mergestatemod.ACTION_KEEP][0]) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1272 continue |
45467
bb9888d32601
merge: add `ACTION_KEEP_ABSENT` to represent files we want to keep absent
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45466
diff
changeset
|
1273 # If keep absent is an option, just do that |
bb9888d32601
merge: add `ACTION_KEEP_ABSENT` to represent files we want to keep absent
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45466
diff
changeset
|
1274 if mergestatemod.ACTION_KEEP_ABSENT in bids: |
bb9888d32601
merge: add `ACTION_KEEP_ABSENT` to represent files we want to keep absent
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45466
diff
changeset
|
1275 repo.ui.note(_(b" %s: picking 'keep absent' action\n") % f) |
bb9888d32601
merge: add `ACTION_KEEP_ABSENT` to represent files we want to keep absent
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45466
diff
changeset
|
1276 mresult.addfile(f, *bids[mergestatemod.ACTION_KEEP_ABSENT][0]) |
bb9888d32601
merge: add `ACTION_KEEP_ABSENT` to represent files we want to keep absent
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45466
diff
changeset
|
1277 continue |
45619
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1278 # ACTION_KEEP_NEW and ACTION_CHANGED_DELETED are conflicting actions |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1279 # as one say that file is new while other says that file was present |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1280 # earlier too and has a change delete conflict |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1281 # Let's fall back to conflicting ACTION_CHANGED_DELETED and let user |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1282 # do the right thing |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1283 if ( |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1284 mergestatemod.ACTION_CHANGED_DELETED in bids |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1285 and mergestatemod.ACTION_KEEP_NEW in bids |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1286 ): |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1287 repo.ui.note(_(b" %s: picking 'changed/deleted' action\n") % f) |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1288 mresult.addfile( |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1289 f, *bids[mergestatemod.ACTION_CHANGED_DELETED][0] |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1290 ) |
e8078af6af30
merge: if CHANGED_DELETED and KEEP_NEW are actions, choose CHANGED_DELETED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45617
diff
changeset
|
1291 continue |
45524
6877b0ee5f9d
mergestate: introduce a new ACTION_KEEP_NEW
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45518
diff
changeset
|
1292 # If keep new is an option, let's just do that |
6877b0ee5f9d
mergestate: introduce a new ACTION_KEEP_NEW
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45518
diff
changeset
|
1293 if mergestatemod.ACTION_KEEP_NEW in bids: |
6877b0ee5f9d
mergestate: introduce a new ACTION_KEEP_NEW
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45518
diff
changeset
|
1294 repo.ui.note(_(b" %s: picking 'keep new' action\n") % f) |
6877b0ee5f9d
mergestate: introduce a new ACTION_KEEP_NEW
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45518
diff
changeset
|
1295 mresult.addfile(f, *bids[mergestatemod.ACTION_KEEP_NEW][0]) |
6877b0ee5f9d
mergestate: introduce a new ACTION_KEEP_NEW
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45518
diff
changeset
|
1296 continue |
45617
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1297 # ACTION_GET and ACTION_DELETE_CHANGED are conflicting actions as |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1298 # one action states the file is newer/created on remote side and |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1299 # other states that file is deleted locally and changed on remote |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1300 # side. Let's fallback and rely on a conflicting action to let user |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1301 # do the right thing |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1302 if ( |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1303 mergestatemod.ACTION_DELETED_CHANGED in bids |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1304 and mergestatemod.ACTION_GET in bids |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1305 ): |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1306 repo.ui.note(_(b" %s: picking 'delete/changed' action\n") % f) |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1307 mresult.addfile( |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1308 f, *bids[mergestatemod.ACTION_DELETED_CHANGED][0] |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1309 ) |
ad984583969a
merge: if DELETED_CHANGED and GET are in actions, choose DELETED_CHANGED
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45587
diff
changeset
|
1310 continue |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1311 # If there are gets and they all agree [how could they not?], do it. |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1312 if mergestatemod.ACTION_GET in bids: |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1313 ga0 = bids[mergestatemod.ACTION_GET][0] |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1314 if all(a == ga0 for a in bids[mergestatemod.ACTION_GET][1:]): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1315 repo.ui.note(_(b" %s: picking 'get' action\n") % f) |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1316 mresult.addfile(f, *ga0) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1317 continue |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1318 # 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
|
1319 # Handle inefficient democrazy. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1320 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
|
1321 for m, l in sorted(bids.items()): |
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1322 for _f, args, msg in l: |
48711
9bc86adf32f6
merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48708
diff
changeset
|
1323 repo.ui.note(b' %s -> %s\n' % (msg, m.__bytes__())) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1324 # 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
|
1325 m, l = list(bids.items())[0] |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1326 repo.ui.warn( |
48711
9bc86adf32f6
merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48708
diff
changeset
|
1327 _(b' %s: ambiguous merge - picked %s action\n') |
9bc86adf32f6
merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48708
diff
changeset
|
1328 % (f, m.__bytes__()) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1329 ) |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
1330 mresult.addfile(f, *l[0]) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1331 continue |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1332 repo.ui.note(_(b'end of auction\n\n')) |
45384
72e503a24715
merge: introduce `addcommitinfo()` on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45383
diff
changeset
|
1333 mresult.updatevalues(diverge, renamedelete) |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1334 |
23640
b46b9865dd08
merge: let _forgetremoved() work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23639
diff
changeset
|
1335 if wctx.rev() is None: |
45347
1aef38d973e8
merge: pass mergeresult obj in _forgetremoved() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45346
diff
changeset
|
1336 _forgetremoved(wctx, mctx, branchmerge, mresult) |
23640
b46b9865dd08
merge: let _forgetremoved() work on the file->action dict
Martin von Zweigbergk <martinvonz@google.com>
parents:
23639
diff
changeset
|
1337 |
45290
d70c972cec74
sparse: pass mergeresult obj in sparse.filterupdatesactions() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45289
diff
changeset
|
1338 sparse.filterupdatesactions(repo, wctx, mctx, branchmerge, mresult) |
45286
00e9c5edcd58
merge: pass mergeresult obj instead of actions dict in _resolvetrivial()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45285
diff
changeset
|
1339 _resolvetrivial(repo, wctx, mctx, ancestors[0], mresult) |
33323
252500520d60
sparse: refactor update actions filtering and call from core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33321
diff
changeset
|
1340 |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
1341 return mresult |
23385
91c24457c16a
merge: move calculateupdates() before applyupdated()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23384
diff
changeset
|
1342 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1343 |
34142
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1344 def _getcwd(): |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1345 try: |
39818
24e493ec2229
py3: rename pycompat.getcwd() to encoding.getcwd() (API)
Matt Harbison <matt_harbison@yahoo.com>
parents:
39464
diff
changeset
|
1346 return encoding.getcwd() |
49306
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
1347 except FileNotFoundError: |
2e726c934fcd
py3: catch FileNotFoundError instead of checking errno == ENOENT
Manuel Jacob <me@manueljacob.de>
parents:
48946
diff
changeset
|
1348 return None |
34142
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1349 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1350 |
33081
6582dc01aca3
merge: pass wctx to batchremove and batchget
Phil Cohen <phillco@fb.com>
parents:
32863
diff
changeset
|
1351 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
|
1352 """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
|
1353 |
9b9e2d9e83a1
merge: split out mostly-non-interactive working dir updates
Bryan O'Sullivan <bryano@fb.com>
parents:
18612
diff
changeset
|
1354 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
|
1355 """ |
18640
a8648f32b8ed
merge: don't fiddle with name lookups or i18n in hot loops
Bryan O'Sullivan <bryano@fb.com>
parents:
18639
diff
changeset
|
1356 verbose = repo.ui.verbose |
34142
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1357 cwd = _getcwd() |
18633
6390dd22b12f
merge: report non-interactive progress in chunks
Bryan O'Sullivan <bryano@fb.com>
parents:
18632
diff
changeset
|
1358 i = 0 |
21545
43eecb4e23f8
merge: use separate lists for each action type
Mads Kiilerich <madski@unity3d.com>
parents:
21524
diff
changeset
|
1359 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
|
1360 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
|
1361 if verbose: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1362 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
|
1363 wctx[f].audit() |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1364 try: |
33082
f9e50ee4c52b
merge: replace repo.wvfs.unlinkpath() with calls to wctx[f].remove()
Phil Cohen <phillco@fb.com>
parents:
33081
diff
changeset
|
1365 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
|
1366 except OSError as inst: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1367 repo.ui.warn( |
45688
ed0ded64a8a9
py3: convert an exception message to bytes
Martin von Zweigbergk <martinvonz@google.com>
parents:
45661
diff
changeset
|
1368 _(b"update failed to remove %s: %s!\n") |
46692
39f23d20ea47
merge: force an exception message to bytes before printing as a warning
Matt Harbison <matt_harbison@yahoo.com>
parents:
45942
diff
changeset
|
1369 % (f, stringutil.forcebytestr(inst.strerror)) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1370 ) |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1371 if i == 100: |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1372 yield i, f |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1373 i = 0 |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1374 i += 1 |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1375 if i > 0: |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1376 yield i, f |
34142
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1377 |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1378 if cwd and not _getcwd(): |
24bf823377fc
merge: move cwd-missing detection to helper functions
Phil Cohen <phillco@fb.com>
parents:
34125
diff
changeset
|
1379 # 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
|
1380 # warning. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1381 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1382 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1383 b"current directory was removed\n" |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1384 b"(consider changing to repo root: %s)\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1385 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1386 % repo.root |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1387 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1388 |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1389 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1390 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
|
1391 """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
|
1392 |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1393 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
|
1394 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1395 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
|
1396 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
|
1397 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
|
1398 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
|
1399 """ |
42522
d29db0a0c4eb
update: fix spurious unclean status bug shown by previous commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42456
diff
changeset
|
1400 filedata = {} |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1401 verbose = repo.ui.verbose |
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1402 fctx = mctx.filectx |
27656
57c0d4888ca8
batchget: add support for backing up files
Siddharth Agarwal <sid0@fb.com>
parents:
27655
diff
changeset
|
1403 ui = repo.ui |
21392
b1ce47dadbdf
merge: separate worker functions for batch remove and batch get
Mads Kiilerich <madski@unity3d.com>
parents:
21391
diff
changeset
|
1404 i = 0 |
28200
588695ccbb22
merge: perform background file closing in batchget
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28199
diff
changeset
|
1405 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
|
1406 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
|
1407 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
|
1408 if verbose: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1409 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
|
1410 |
28199
d49793aac1ac
merge: indent code in batchget()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28088
diff
changeset
|
1411 if backup: |
34549
a991e1d6bc82
merge: backup conflicting directories when getting files
Mark Thomas <mbthomas@fb.com>
parents:
34548
diff
changeset
|
1412 # 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
|
1413 # 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
|
1414 # 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
|
1415 conflicting = f |
34549
a991e1d6bc82
merge: backup conflicting directories when getting files
Mark Thomas <mbthomas@fb.com>
parents:
34548
diff
changeset
|
1416 if not repo.wvfs.lexists(f): |
43633
0b7733719d21
utils: move finddirs() to pathutil
Martin von Zweigbergk <martinvonz@google.com>
parents:
43421
diff
changeset
|
1417 for p in pathutil.finddirs(f): |
34549
a991e1d6bc82
merge: backup conflicting directories when getting files
Mark Thomas <mbthomas@fb.com>
parents:
34548
diff
changeset
|
1418 if repo.wvfs.isfileorlink(p): |
41570
1f2714052d7e
merge: don't unnecessarily calculate absolute path
Martin von Zweigbergk <martinvonz@google.com>
parents:
41569
diff
changeset
|
1419 conflicting = p |
34549
a991e1d6bc82
merge: backup conflicting directories when getting files
Mark Thomas <mbthomas@fb.com>
parents:
34548
diff
changeset
|
1420 break |
41570
1f2714052d7e
merge: don't unnecessarily calculate absolute path
Martin von Zweigbergk <martinvonz@google.com>
parents:
41569
diff
changeset
|
1421 if repo.wvfs.lexists(conflicting): |
41601
ac8cf125d8d5
merge: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41570
diff
changeset
|
1422 orig = scmutil.backuppath(ui, repo, conflicting) |
ac8cf125d8d5
merge: migrate to scmutil.backuppath()
Martin von Zweigbergk <martinvonz@google.com>
parents:
41570
diff
changeset
|
1423 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
|
1424 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
|
1425 wfctx.clearunknown() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1426 atomictemp = ui.configbool(b"experimental", b"update.atomic-file") |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1427 size = wfctx.write( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1428 fctx(f).data(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1429 flags, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1430 backgroundclose=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1431 atomictemp=atomictemp, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1432 ) |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1433 if wantfiledata: |
48377
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1434 # XXX note that there is a race window between the time we |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1435 # write the clean data into the file and we stats it. So another |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1436 # writing process meddling with the file content right after we |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1437 # wrote it could cause bad stat data to be gathered. |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1438 # |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1439 # They are 2 data we gather here |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1440 # - the mode: |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1441 # That we actually just wrote, we should not need to read |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1442 # it from disk, (except not all mode might have survived |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1443 # the disk round-trip, which is another issue: we should |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1444 # not depends on this) |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1445 # - the mtime, |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1446 # On system that support nanosecond precision, the mtime |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1447 # could be accurate enough to tell the two writes appart. |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1448 # However gathering it in a racy way make the mtime we |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1449 # gather "unreliable". |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1450 # |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1451 # (note: we get the size from the data we write, which is sane) |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1452 # |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1453 # So in theory the data returned here are fully racy, but in |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1454 # practice "it works mostly fine". |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1455 # |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1456 # Do not be surprised if you end up reading this while looking |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1457 # for the causes of some buggy status. Feel free to improve |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1458 # this in the future, but we cannot simply stop gathering |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1459 # information. Otherwise `hg status` call made after a large `hg |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1460 # update` runs would have to redo a similar amount of work to |
c655483ea6e2
dirstate: add a comment about a racy piece of code during updates
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48366
diff
changeset
|
1461 # restore and compare all files content. |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1462 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
|
1463 mode = s.st_mode |
48260
269ff8978086
dirstate: store mtimes with nanosecond precision in memory
Simon Sapin <simon.sapin@octobus.net>
parents:
47609
diff
changeset
|
1464 mtime = timestamp.mtime_of(s) |
269ff8978086
dirstate: store mtimes with nanosecond precision in memory
Simon Sapin <simon.sapin@octobus.net>
parents:
47609
diff
changeset
|
1465 # for dirstate.update_file's parentfiledata argument: |
269ff8978086
dirstate: store mtimes with nanosecond precision in memory
Simon Sapin <simon.sapin@octobus.net>
parents:
47609
diff
changeset
|
1466 filedata[f] = (mode, size, mtime) |
28199
d49793aac1ac
merge: indent code in batchget()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28088
diff
changeset
|
1467 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
|
1468 yield False, (i, f) |
28199
d49793aac1ac
merge: indent code in batchget()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28088
diff
changeset
|
1469 i = 0 |
d49793aac1ac
merge: indent code in batchget()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
28088
diff
changeset
|
1470 i += 1 |
18633
6390dd22b12f
merge: report non-interactive progress in chunks
Bryan O'Sullivan <bryano@fb.com>
parents:
18632
diff
changeset
|
1471 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
|
1472 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
|
1473 yield True, filedata |
18630
9b9e2d9e83a1
merge: split out mostly-non-interactive working dir updates
Bryan O'Sullivan <bryano@fb.com>
parents:
18612
diff
changeset
|
1474 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1475 |
45335
2c96fd8e05f6
merge: pass mergeresult obj in merge._prefetchfiles()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
1476 def _prefetchfiles(repo, ctx, mresult): |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37172
diff
changeset
|
1477 """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
|
1478 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
|
1479 |
60dd840a7fdb
merge: invoke scmutil.fileprefetchhooks() prior to applying updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
36042
diff
changeset
|
1480 # 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
|
1481 # 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
|
1482 # changed/deleted never resolves to something from the remote side. |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
1483 files = mresult.files( |
45335
2c96fd8e05f6
merge: pass mergeresult obj in merge._prefetchfiles()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
1484 [ |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1485 mergestatemod.ACTION_GET, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1486 mergestatemod.ACTION_DELETED_CHANGED, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1487 mergestatemod.ACTION_LOCAL_DIR_RENAME_GET, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1488 mergestatemod.ACTION_MERGE, |
45335
2c96fd8e05f6
merge: pass mergeresult obj in merge._prefetchfiles()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
1489 ] |
45345
e5b4061f32be
mergeresult: add `files()` and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45344
diff
changeset
|
1490 ) |
45335
2c96fd8e05f6
merge: pass mergeresult obj in merge._prefetchfiles()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
1491 |
37762
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37172
diff
changeset
|
1492 prefetch = scmutil.prefetchfiles |
7269b87f817c
scmutil: teach the file prefetch hook to handle multiple commits
Matt Harbison <matt_harbison@yahoo.com>
parents:
37172
diff
changeset
|
1493 matchfiles = scmutil.matchfiles |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1494 prefetch( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1495 repo, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1496 [ |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1497 ( |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1498 ctx.rev(), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1499 matchfiles(repo, files), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1500 ) |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1501 ], |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1502 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1503 |
34124
b90e5b2a9c82
merge: flush any deferred writes before, and after, running any workers
Phil Cohen <phillco@fb.com>
parents:
34122
diff
changeset
|
1504 |
37107
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1505 @attr.s(frozen=True) |
48946
642e31cb55f0
py3: use class X: instead of class X(object):
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48927
diff
changeset
|
1506 class updateresult: |
37107
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1507 updatedcount = attr.ib() |
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1508 mergedcount = attr.ib() |
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1509 removedcount = attr.ib() |
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1510 unresolvedcount = attr.ib() |
71543b942eea
merge: return an attrs class from update() and applyupdates()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37087
diff
changeset
|
1511 |
37125
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37112
diff
changeset
|
1512 def isempty(self): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1513 return not ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1514 self.updatedcount |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1515 or self.mergedcount |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1516 or self.removedcount |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1517 or self.unresolvedcount |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1518 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1519 |
37125
6f570c501e3e
merge: deprecate accessing update results by index
Gregory Szorc <gregory.szorc@gmail.com>
parents:
37112
diff
changeset
|
1520 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1521 def applyupdates( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1522 repo, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1523 mresult, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1524 wctx, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1525 mctx, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1526 overwrite, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1527 wantfiledata, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1528 labels=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1529 ): |
11454
9b0406b23be0
merge: pass constant cset ancestor to fctx.ancestor
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11451
diff
changeset
|
1530 """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
|
1531 |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45333
diff
changeset
|
1532 mresult is a mergeresult object representing result of the merge |
11454
9b0406b23be0
merge: pass constant cset ancestor to fctx.ancestor
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11451
diff
changeset
|
1533 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
|
1534 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
|
1535 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1536 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
|
1537 (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
|
1538 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
|
1539 batchget. |
11454
9b0406b23be0
merge: pass constant cset ancestor to fctx.ancestor
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents:
11451
diff
changeset
|
1540 """ |
3315
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
1541 |
45335
2c96fd8e05f6
merge: pass mergeresult obj in merge._prefetchfiles()
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45334
diff
changeset
|
1542 _prefetchfiles(repo, mctx, mresult) |
36142
60dd840a7fdb
merge: invoke scmutil.fileprefetchhooks() prior to applying updates
Matt Harbison <matt_harbison@yahoo.com>
parents:
36042
diff
changeset
|
1543 |
27078
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
1544 updated, merged, removed = 0, 0, 0 |
45499
19590b126764
merge: use in-memory mergestate when using in-memory context
Martin von Zweigbergk <martinvonz@google.com>
parents:
45493
diff
changeset
|
1545 ms = wctx.mergestate(clean=True) |
45493
2c10876bb320
mergestate: make clean() only be about creating a clean mergestate
Martin von Zweigbergk <martinvonz@google.com>
parents:
45488
diff
changeset
|
1546 ms.start(wctx.p1().node(), mctx.node(), labels) |
44687
1b8fd4af3318
mergestate: store about files resolved in favour of other
Pulkit Goyal <7895pulkit@gmail.com>
parents:
44452
diff
changeset
|
1547 |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
1548 for f, op in mresult.commitinfo.items(): |
45276
cb6a72dc0511
merge: pass commitinfo to applyupdates() and get it stored in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45275
diff
changeset
|
1549 # the other side of filenode was choosen while merging, store this in |
cb6a72dc0511
merge: pass commitinfo to applyupdates() and get it stored in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45275
diff
changeset
|
1550 # mergestate so that it can be reused on commit |
45385
05d19ca33b33
mergestate: replace `addmergedother()` with generic `addcommitinfo()` (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45384
diff
changeset
|
1551 ms.addcommitinfo(f, op) |
45276
cb6a72dc0511
merge: pass commitinfo to applyupdates() and get it stored in mergestate
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45275
diff
changeset
|
1552 |
48713
5dfaca4464d1
merge-actions: add an explicite "no_op" attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48711
diff
changeset
|
1553 num_no_op = mresult.len(mergestatemod.MergeAction.NO_OP_ACTIONS) |
5dfaca4464d1
merge-actions: add an explicite "no_op" attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48711
diff
changeset
|
1554 numupdates = mresult.len() - num_no_op |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1555 progress = repo.ui.makeprogress( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1556 _(b'updating'), unit=_(b'files'), total=numupdates |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1557 ) |
18630
9b9e2d9e83a1
merge: split out mostly-non-interactive working dir updates
Bryan O'Sullivan <bryano@fb.com>
parents:
18612
diff
changeset
|
1558 |
45337
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1559 if b'.hgsubstate' in mresult._actionmapping[mergestatemod.ACTION_REMOVE]: |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35726
diff
changeset
|
1560 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
|
1561 |
34547
81aebcc73beb
merge: add merge action 'p' to record path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34545
diff
changeset
|
1562 # record path conflicts |
45337
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1563 for f, args, msg in mresult.getactions( |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1564 [mergestatemod.ACTION_PATH_CONFLICT], sort=True |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1565 ): |
34547
81aebcc73beb
merge: add merge action 'p' to record path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34545
diff
changeset
|
1566 f1, fo = args |
81aebcc73beb
merge: add merge action 'p' to record path conflicts during update
Mark Thomas <mbthomas@fb.com>
parents:
34545
diff
changeset
|
1567 s = repo.ui.status |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1568 s( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1569 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1570 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
|
1571 b"directory\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1572 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1573 % f |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1574 ) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1575 if fo == b'l': |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1576 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
|
1577 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1578 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
|
1579 s(_(b"resolve manually then use 'hg resolve --mark %s'\n") % f) |
45159
e05a488cbed0
mergestate: rename addpath() -> addpathonflict() to prevent confusion
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45118
diff
changeset
|
1580 ms.addpathconflict(f, f1, fo) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1581 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
|
1582 |
34786
9c899660700a
merge: don't use workers in in-memory mode
Phil Cohen <phillco@fb.com>
parents:
34680
diff
changeset
|
1583 # 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
|
1584 # 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
|
1585 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
|
1586 |
34548
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1587 # 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
|
1588 prog = worker.worker( |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1589 repo.ui, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1590 cost, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1591 batchremove, |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1592 (repo, wctx), |
45340
cdc50e1929b0
mergeresult: yield from getactions() instead of buidling a list and returning
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45338
diff
changeset
|
1593 list(mresult.getactions([mergestatemod.ACTION_REMOVE], sort=True)), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1594 ) |
19095
5cc71484ee9c
merge: increase safety of parallel updating/removing on icasefs
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
18985
diff
changeset
|
1595 for i, item in prog: |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1596 progress.increment(step=i, item=item) |
45338
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
1597 removed = mresult.len((mergestatemod.ACTION_REMOVE,)) |
21390
26b84128c54d
merge: move constant assignments a bit and use them more
Mads Kiilerich <madski@unity3d.com>
parents:
21389
diff
changeset
|
1598 |
34548
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1599 # resolve path conflicts (must come before getting) |
45337
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1600 for f, args, msg in mresult.getactions( |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1601 [mergestatemod.ACTION_PATH_CONFLICT_RESOLVE], sort=True |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1602 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1603 repo.ui.debug(b" %s: %s -> pr\n" % (f, msg)) |
44939
818b4f19ef23
merge: move an inspection of the dirstate from record to calculate phase
Martin von Zweigbergk <martinvonz@google.com>
parents:
44856
diff
changeset
|
1604 (f0, origf0) = args |
34548
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1605 if wctx[f0].lexists(): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1606 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
|
1607 wctx[f].audit() |
b4955650eb57
merge: add merge action 'pr' to rename files during update
Mark Thomas <mbthomas@fb.com>
parents:
34547
diff
changeset
|
1608 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
|
1609 wctx[f0].remove() |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1610 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
|
1611 |
38732
be4984261611
merge: mark file gets as not thread safe (issue5933)
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38494
diff
changeset
|
1612 # get in parallel. |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1613 threadsafe = repo.ui.configbool( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1614 b'experimental', b'worker.wdir-get-thread-safe' |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1615 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1616 prog = worker.worker( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1617 repo.ui, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1618 cost, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1619 batchget, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1620 (repo, mctx, wctx, wantfiledata), |
45340
cdc50e1929b0
mergeresult: yield from getactions() instead of buidling a list and returning
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45338
diff
changeset
|
1621 list(mresult.getactions([mergestatemod.ACTION_GET], sort=True)), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1622 threadsafe=threadsafe, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1623 hasretval=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1624 ) |
42522
d29db0a0c4eb
update: fix spurious unclean status bug shown by previous commit
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42456
diff
changeset
|
1625 getfiledata = {} |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1626 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
|
1627 if final: |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1628 getfiledata = res |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1629 else: |
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
1630 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
|
1631 progress.increment(step=i, item=item) |
18630
9b9e2d9e83a1
merge: split out mostly-non-interactive working dir updates
Bryan O'Sullivan <bryano@fb.com>
parents:
18612
diff
changeset
|
1632 |
45337
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1633 if b'.hgsubstate' in mresult._actionmapping[mergestatemod.ACTION_GET]: |
36009
55e8efa2451a
subrepo: split non-core functions to new module
Yuya Nishihara <yuya@tcha.org>
parents:
35726
diff
changeset
|
1634 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
|
1635 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1636 # forget (manifest only, just log it) (must come first) |
45337
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1637 for f, args, msg in mresult.getactions( |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1638 (mergestatemod.ACTION_FORGET,), sort=True |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1639 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1640 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
|
1641 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
|
1642 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1643 # re-add (manifest only, just log it) |
45337
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1644 for f, args, msg in mresult.getactions( |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1645 (mergestatemod.ACTION_ADD,), sort=True |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1646 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1647 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
|
1648 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
|
1649 |
27131
d837da26155e
merge: add a new action type representing files to add/mark as modified
Siddharth Agarwal <sid0@fb.com>
parents:
27130
diff
changeset
|
1650 # re-add/mark as modified (manifest only, just log it) |
45337
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1651 for f, args, msg in mresult.getactions( |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1652 (mergestatemod.ACTION_ADD_MODIFIED,), sort=True |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1653 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1654 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
|
1655 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
|
1656 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1657 # keep (noop, just log it) |
48713
5dfaca4464d1
merge-actions: add an explicite "no_op" attribute
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48711
diff
changeset
|
1658 for a in mergestatemod.MergeAction.NO_OP_ACTIONS: |
45524
6877b0ee5f9d
mergestate: introduce a new ACTION_KEEP_NEW
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45518
diff
changeset
|
1659 for f, args, msg in mresult.getactions((a,), sort=True): |
48711
9bc86adf32f6
merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48708
diff
changeset
|
1660 repo.ui.debug(b" %s: %s -> %s\n" % (f, msg, a.__bytes__())) |
45524
6877b0ee5f9d
mergestate: introduce a new ACTION_KEEP_NEW
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45518
diff
changeset
|
1661 # no progress |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
1662 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1663 # directory rename, move local |
45337
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1664 for f, args, msg in mresult.getactions( |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1665 (mergestatemod.ACTION_DIR_RENAME_MOVE_LOCAL,), sort=True |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1666 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1667 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
|
1668 progress.increment(item=f) |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1669 f0, flags = args |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1670 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
|
1671 wctx[f].audit() |
33083
05c680ebf512
merge: convert repo.wwrite() calls to wctx[f].write()
Phil Cohen <phillco@fb.com>
parents:
33082
diff
changeset
|
1672 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
|
1673 wctx[f0].remove() |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
1674 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1675 # local directory rename, get |
45337
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1676 for f, args, msg in mresult.getactions( |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1677 (mergestatemod.ACTION_LOCAL_DIR_RENAME_GET,), sort=True |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1678 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1679 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
|
1680 progress.increment(item=f) |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1681 f0, flags = args |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1682 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
|
1683 wctx[f].write(mctx.filectx(f0).data(), flags) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
1684 |
21551
bde505f47141
merge: fix stupid indentation left over from previous refactorings
Mads Kiilerich <madski@unity3d.com>
parents:
21545
diff
changeset
|
1685 # exec |
45337
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1686 for f, args, msg in mresult.getactions( |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1687 (mergestatemod.ACTION_EXEC,), sort=True |
5ce63ee1fe3d
merge: replace use of actions dict with mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45336
diff
changeset
|
1688 ): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1689 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
|
1690 progress.increment(item=f) |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1691 (flags,) = args |
33086
eb4c49f55f1f
workingfilectx: add audit() as a wrapper for wvfs.audit()
Phil Cohen <phillco@fb.com>
parents:
33085
diff
changeset
|
1692 wctx[f].audit() |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1693 wctx[f].setflags(b'l' in flags, b'x' in flags) |
21391
cb15835456cb
merge: change debug logging - test output changes but no real changes
Mads Kiilerich <madski@unity3d.com>
parents:
21390
diff
changeset
|
1694 |
45488
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1695 moves = [] |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1696 |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1697 # 'cd' and 'dc' actions are treated like other merge conflicts |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1698 mergeactions = list( |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1699 mresult.getactions( |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1700 [ |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1701 mergestatemod.ACTION_CHANGED_DELETED, |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1702 mergestatemod.ACTION_DELETED_CHANGED, |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1703 mergestatemod.ACTION_MERGE, |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1704 ], |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1705 sort=True, |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1706 ) |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1707 ) |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1708 for f, args, msg in mergeactions: |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1709 f1, f2, fa, move, anc = args |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1710 if f == b'.hgsubstate': # merged internally |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1711 continue |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1712 if f1 is None: |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1713 fcl = filemerge.absentfilectx(wctx, fa) |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1714 else: |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1715 repo.ui.debug(b" preserving %s for resolve of %s\n" % (f1, f)) |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1716 fcl = wctx[f1] |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1717 if f2 is None: |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1718 fco = filemerge.absentfilectx(mctx, fa) |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1719 else: |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1720 fco = mctx[f2] |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1721 actx = repo[anc] |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1722 if fa in actx: |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1723 fca = actx[fa] |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1724 else: |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1725 # TODO: move to absentfilectx |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1726 fca = repo.filectx(f1, fileid=nullrev) |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1727 ms.add(fcl, fco, fca, f) |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1728 if f1 != f and move: |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1729 moves.append(f1) |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1730 |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1731 # remove renamed files after safely stored |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1732 for f in moves: |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1733 if wctx[f].lexists(): |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1734 repo.ui.debug(b"removing %s\n" % f) |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1735 wctx[f].audit() |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1736 wctx[f].remove() |
c4f14db3da1d
merge: move initial handling of mergeactions near to later one
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45470
diff
changeset
|
1737 |
45341
e335936cd4e1
applyupdates: simplfy calculation of number of updated files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45340
diff
changeset
|
1738 # these actions updates the file |
e335936cd4e1
applyupdates: simplfy calculation of number of updated files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45340
diff
changeset
|
1739 updated = mresult.len( |
e335936cd4e1
applyupdates: simplfy calculation of number of updated files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45340
diff
changeset
|
1740 ( |
e335936cd4e1
applyupdates: simplfy calculation of number of updated files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45340
diff
changeset
|
1741 mergestatemod.ACTION_GET, |
e335936cd4e1
applyupdates: simplfy calculation of number of updated files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45340
diff
changeset
|
1742 mergestatemod.ACTION_EXEC, |
e335936cd4e1
applyupdates: simplfy calculation of number of updated files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45340
diff
changeset
|
1743 mergestatemod.ACTION_LOCAL_DIR_RENAME_GET, |
e335936cd4e1
applyupdates: simplfy calculation of number of updated files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45340
diff
changeset
|
1744 mergestatemod.ACTION_DIR_RENAME_MOVE_LOCAL, |
e335936cd4e1
applyupdates: simplfy calculation of number of updated files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45340
diff
changeset
|
1745 ) |
e335936cd4e1
applyupdates: simplfy calculation of number of updated files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45340
diff
changeset
|
1746 ) |
26786
121f80d14e4b
merge.applyupdates: call driverpreprocess before starting merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26785
diff
changeset
|
1747 |
34680
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
1748 try: |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
1749 for f, args, msg in mergeactions: |
48427
38941a28406a
mergestate: merge `preresolve()` into `resolve()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
48423
diff
changeset
|
1750 repo.ui.debug(b" %s: %s -> m\n" % (f, msg)) |
46811
5a0b930cfb3e
commit: get info from mergestate whether a file was merged or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46794
diff
changeset
|
1751 ms.addcommitinfo(f, {b'merged': b'yes'}) |
38345
bec1212eceaa
progress: create helper class for incrementing progress
Martin von Zweigbergk <martinvonz@google.com>
parents:
38045
diff
changeset
|
1752 progress.increment(item=f) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1753 if f == b'.hgsubstate': # subrepo states need updating |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1754 subrepoutil.submerge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1755 repo, wctx, mctx, wctx.ancestor(mctx), overwrite, labels |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1756 ) |
34680
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
1757 continue |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
1758 wctx[f].audit() |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
1759 ms.resolve(f, wctx) |
26292
007ac1acfcac
merge: move merge step to the end
Siddharth Agarwal <sid0@fb.com>
parents:
25959
diff
changeset
|
1760 |
48271
5228a6dc212b
merge-halt: fix issue with merge.on-failure=halt breaking unshelve
Kyle Lippincott <spectral@google.com>
parents:
47609
diff
changeset
|
1761 except error.InterventionRequired: |
5228a6dc212b
merge-halt: fix issue with merge.on-failure=halt breaking unshelve
Kyle Lippincott <spectral@google.com>
parents:
47609
diff
changeset
|
1762 # If the user has merge.on-failure=halt, catch the error and close the |
5228a6dc212b
merge-halt: fix issue with merge.on-failure=halt breaking unshelve
Kyle Lippincott <spectral@google.com>
parents:
47609
diff
changeset
|
1763 # merge state "properly". |
5228a6dc212b
merge-halt: fix issue with merge.on-failure=halt breaking unshelve
Kyle Lippincott <spectral@google.com>
parents:
47609
diff
changeset
|
1764 pass |
34680
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
1765 finally: |
c0a524f77e8a
merge: ensure that we always commit the mergestate
Ryan McElroy <rmcelroy@fb.com>
parents:
34560
diff
changeset
|
1766 ms.commit() |
26787
64848559413a
merge.applyupdates: call driverconclude after performing merge actions
Siddharth Agarwal <sid0@fb.com>
parents:
26786
diff
changeset
|
1767 |
27078
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
1768 unresolved = ms.unresolvedcount() |
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
1769 |
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
1770 msupdated, msmerged, msremoved = ms.counts() |
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
1771 updated += msupdated |
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
1772 merged += msmerged |
a421debae31d
merge.applyupdates: use counters from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27077
diff
changeset
|
1773 removed += msremoved |
27080
ae2d3782d818
merge.applyupdates: extend action queues with ones returned from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27079
diff
changeset
|
1774 |
ae2d3782d818
merge.applyupdates: extend action queues with ones returned from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27079
diff
changeset
|
1775 extraactions = ms.actions() |
ae2d3782d818
merge.applyupdates: extend action queues with ones returned from mergestate
Siddharth Agarwal <sid0@fb.com>
parents:
27079
diff
changeset
|
1776 |
38373
ef692614e601
progress: hide update(None) in a new complete() method
Martin von Zweigbergk <martinvonz@google.com>
parents:
38345
diff
changeset
|
1777 progress.complete() |
47372
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
1778 return ( |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
1779 updateresult(updated, merged, removed, unresolved), |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
1780 getfiledata, |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
1781 extraactions, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
1782 ) |
3111
5cc62d99b785
merge: move apply and dirstate code into separate functions
Matt Mackall <mpm@selenic.com>
parents:
3110
diff
changeset
|
1783 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1784 |
45167
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1785 def _advertisefsmonitor(repo, num_gets, p1node): |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1786 # Advertise fsmonitor when its presence could be useful. |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1787 # |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1788 # We only advertise when performing an update from an empty working |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1789 # directory. This typically only occurs during initial clone. |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1790 # |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1791 # We give users a mechanism to disable the warning in case it is |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1792 # annoying. |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1793 # |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1794 # We only allow on Linux and MacOS because that's where fsmonitor is |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1795 # considered stable. |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1796 fsmonitorwarning = repo.ui.configbool(b'fsmonitor', b'warn_when_unused') |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1797 fsmonitorthreshold = repo.ui.configint( |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1798 b'fsmonitor', b'warn_update_file_count' |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1799 ) |
45462
c1d6e930ac8a
fsmonitor: increase the threshold before we recommend it, when using rust
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
45459
diff
changeset
|
1800 # avoid cycle dirstate -> sparse -> merge -> dirstate |
48805
d4486810a179
merge: remove direct rustmod reference
Raphaël Gomès <rgomes@octobus.net>
parents:
48757
diff
changeset
|
1801 dirstate_rustmod = policy.importrust("dirstate") |
45462
c1d6e930ac8a
fsmonitor: increase the threshold before we recommend it, when using rust
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
45459
diff
changeset
|
1802 |
48805
d4486810a179
merge: remove direct rustmod reference
Raphaël Gomès <rgomes@octobus.net>
parents:
48757
diff
changeset
|
1803 if dirstate_rustmod is not None: |
45462
c1d6e930ac8a
fsmonitor: increase the threshold before we recommend it, when using rust
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
45459
diff
changeset
|
1804 # When using rust status, fsmonitor becomes necessary at higher sizes |
c1d6e930ac8a
fsmonitor: increase the threshold before we recommend it, when using rust
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
45459
diff
changeset
|
1805 fsmonitorthreshold = repo.ui.configint( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1806 b'fsmonitor', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
1807 b'warn_update_file_count_rust', |
45462
c1d6e930ac8a
fsmonitor: increase the threshold before we recommend it, when using rust
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
45459
diff
changeset
|
1808 ) |
c1d6e930ac8a
fsmonitor: increase the threshold before we recommend it, when using rust
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
45459
diff
changeset
|
1809 |
45167
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1810 try: |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1811 # avoid cycle: extensions -> cmdutil -> merge |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1812 from . import extensions |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1813 |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1814 extensions.find(b'fsmonitor') |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1815 fsmonitorenabled = repo.ui.config(b'fsmonitor', b'mode') != b'off' |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1816 # We intentionally don't look at whether fsmonitor has disabled |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1817 # itself because a) fsmonitor may have already printed a warning |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1818 # b) we only care about the config state here. |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1819 except KeyError: |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1820 fsmonitorenabled = False |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1821 |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1822 if ( |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1823 fsmonitorwarning |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1824 and not fsmonitorenabled |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
1825 and p1node == repo.nullid |
45167
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1826 and num_gets >= fsmonitorthreshold |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1827 and pycompat.sysplatform.startswith((b'linux', b'darwin')) |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1828 ): |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1829 repo.ui.warn( |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1830 _( |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1831 b'(warning: large working directory being used without ' |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1832 b'fsmonitor enabled; enable fsmonitor to improve performance; ' |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1833 b'see "hg help -e fsmonitor")\n' |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1834 ) |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1835 ) |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1836 |
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
1837 |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1838 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
|
1839 UPDATECHECK_NONE = b'none' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1840 UPDATECHECK_LINEAR = b'linear' |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1841 UPDATECHECK_NO_CONFLICT = b'noconflict' |
42970
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42959
diff
changeset
|
1842 |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
1843 # Let extensions turn off any Rust code in the update code if that interferes |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
1844 # will their patching. |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
1845 # This being `True` does not mean that you have Rust extensions installed or |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
1846 # that the Rust path will be taken for any given invocation. |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
1847 MAYBE_USE_RUST_UPDATE = True |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
1848 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1849 |
45557
2c86b9587740
merge: make low-level update() private (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45544
diff
changeset
|
1850 def _update( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1851 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1852 node, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1853 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1854 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1855 ancestor=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1856 mergeancestor=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1857 labels=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1858 matcher=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1859 mergeforce=False, |
44271
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
1860 updatedirstate=True, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1861 updatecheck=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1862 wc=None, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1863 ): |
3315
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
1864 """ |
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
1865 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
|
1866 |
30902
e6932e9a262a
merge: remove unused handling of default destination in merge.update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
30901
diff
changeset
|
1867 node = the node to update to |
3315
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
1868 branchmerge = whether to merge between branches |
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
1869 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
|
1870 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
|
1871 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
|
1872 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
|
1873 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
|
1874 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
|
1875 as a temporary fix and should be avoided in general. |
48757
af9f2c64302e
merge: fix documented order of `labels` argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
48746
diff
changeset
|
1876 labels = labels to use for local, other, and base |
28020
cffa46cbdb8f
merge: tell _checkunknownfiles about whether this was merge --force
Siddharth Agarwal <sid0@fb.com>
parents:
28019
diff
changeset
|
1877 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
|
1878 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
|
1879 |
34919
1856de4d1297
update: mention long options explicitly in description of merge.update()
muxator <a.mux@inwind.it>
parents:
34885
diff
changeset
|
1880 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
|
1881 -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
|
1882 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
|
1883 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
|
1884 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
|
1885 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
|
1886 |
12279 | 1887 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
|
1888 |
31168
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
1889 -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
|
1890 y y * * * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
1891 y * y * * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
1892 y * * y * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
1893 * y y * * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
1894 * y * y * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
1895 * * y y * * * | (1) |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
1896 * * * * * n n | x |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
1897 * * * * n * * | ok |
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
1898 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
|
1899 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
|
1900 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
|
1901 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
|
1902 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
|
1903 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
|
1904 |
ea8c207a0f78
update: add comments and test cases for updating across branches
Stuart W Marks <smarks@smarks.org>
parents:
9467
diff
changeset
|
1905 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
|
1906 * = don't-care |
31161
351207bfdde9
merge: move "incompatible options" case first in docstring table
Martin von Zweigbergk <martinvonz@google.com>
parents:
31160
diff
changeset
|
1907 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
|
1908 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
|
1909 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
|
1910 |
34302
440ece43024c
merge: allow a custom working context to be passed to update
Phil Cohen <phillco@fb.com>
parents:
34142
diff
changeset
|
1911 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
|
1912 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
|
1913 |
13162
115a9760c382
merge: document some internal return values.
Greg Ward <greg-hg@gerg.ca>
parents:
13158
diff
changeset
|
1914 Return the same tuple as applyupdates(). |
3315
38be819a1225
merge: update some docstrings
Matt Mackall <mpm@selenic.com>
parents:
3314
diff
changeset
|
1915 """ |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33311
diff
changeset
|
1916 # Avoid cycle. |
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33311
diff
changeset
|
1917 from . import sparse |
2815
4870f795f681
Merge: combine force and forcemerge arguments
Matt Mackall <mpm@selenic.com>
parents:
2814
diff
changeset
|
1918 |
31166
fad5e299cfc7
update: accept --merge to allow merging across topo branches (issue5125)
Martin von Zweigbergk <martinvonz@google.com>
parents:
31165
diff
changeset
|
1919 # 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
|
1920 # 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
|
1921 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
|
1922 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
|
1923 # 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
|
1924 # 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
|
1925 # 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
|
1926 if updatecheck is None: |
42970
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42959
diff
changeset
|
1927 updatecheck = UPDATECHECK_LINEAR |
48703
6c4b10d01af0
merge: break up two not-so-one-liner for extra readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48702
diff
changeset
|
1928 okay = (UPDATECHECK_NONE, UPDATECHECK_LINEAR, UPDATECHECK_NO_CONFLICT) |
6c4b10d01af0
merge: break up two not-so-one-liner for extra readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48702
diff
changeset
|
1929 if updatecheck not in okay: |
6c4b10d01af0
merge: break up two not-so-one-liner for extra readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48702
diff
changeset
|
1930 msg = r'Invalid updatecheck %r (can accept %r)' |
6c4b10d01af0
merge: break up two not-so-one-liner for extra readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48702
diff
changeset
|
1931 msg %= (updatecheck, okay) |
6c4b10d01af0
merge: break up two not-so-one-liner for extra readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48702
diff
changeset
|
1932 raise ValueError(msg) |
44999
d1471dbbdd63
merge: don't grab wlock when merging in memory
Martin von Zweigbergk <martinvonz@google.com>
parents:
44939
diff
changeset
|
1933 if wc is not None and wc.isinmemory(): |
d1471dbbdd63
merge: don't grab wlock when merging in memory
Martin von Zweigbergk <martinvonz@google.com>
parents:
44939
diff
changeset
|
1934 maybe_wlock = util.nullcontextmanager() |
d1471dbbdd63
merge: don't grab wlock when merging in memory
Martin von Zweigbergk <martinvonz@google.com>
parents:
44939
diff
changeset
|
1935 else: |
d1471dbbdd63
merge: don't grab wlock when merging in memory
Martin von Zweigbergk <martinvonz@google.com>
parents:
44939
diff
changeset
|
1936 maybe_wlock = repo.wlock() |
d1471dbbdd63
merge: don't grab wlock when merging in memory
Martin von Zweigbergk <martinvonz@google.com>
parents:
44939
diff
changeset
|
1937 with maybe_wlock: |
34302
440ece43024c
merge: allow a custom working context to be passed to update
Phil Cohen <phillco@fb.com>
parents:
34142
diff
changeset
|
1938 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
|
1939 wc = repo[None] |
20279
5b4f963d21cc
merge: refactor initialization of variables in update
Sean Farley <sean.michael.farley@gmail.com>
parents:
20278
diff
changeset
|
1940 pl = wc.parents() |
5b4f963d21cc
merge: refactor initialization of variables in update
Sean Farley <sean.michael.farley@gmail.com>
parents:
20278
diff
changeset
|
1941 p1 = pl[0] |
42409
72522fe7fb95
merge: reorder some initialization to make more sense
Martin von Zweigbergk <martinvonz@google.com>
parents:
42163
diff
changeset
|
1942 p2 = repo[node] |
23405
2a038deeac9a
merge: 0 is a valid ancestor different from None
Mads Kiilerich <madski@unity3d.com>
parents:
23398
diff
changeset
|
1943 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
|
1944 pas = [repo[ancestor]] |
42410
a5b5ecff5f37
merge: simplify initialization of "pas"
Martin von Zweigbergk <martinvonz@google.com>
parents:
42409
diff
changeset
|
1945 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
1946 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
|
1947 cahs = repo.changelog.commonancestorsheads(p1.node(), p2.node()) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
1948 pas = [repo[anc] for anc in (sorted(cahs) or [repo.nullid])] |
21128
f4014f646f71
merge: with merge.preferancestor=*, run an auction with bids from ancestors
Mads Kiilerich <madski@unity3d.com>
parents:
21082
diff
changeset
|
1949 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
|
1950 pas = [p1.ancestor(p2, warn=branchmerge)] |
13874
9d67277c9204
merge: add ancestor to the update function
Matt Mackall <mpm@selenic.com>
parents:
13728
diff
changeset
|
1951 |
36177
187f2474bc11
merge: coerce nodes to bytes, not str
Augie Fackler <augie@google.com>
parents:
36142
diff
changeset
|
1952 fp1, fp2, xp1, xp2 = p1.node(), p2.node(), bytes(p1), bytes(p2) |
3314 | 1953 |
42409
72522fe7fb95
merge: reorder some initialization to make more sense
Martin von Zweigbergk <martinvonz@google.com>
parents:
42163
diff
changeset
|
1954 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
|
1955 ### check phase |
27316
777f668eca70
merge: refuse update/merge if there are unresolved conflicts (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27267
diff
changeset
|
1956 if not overwrite: |
777f668eca70
merge: refuse update/merge if there are unresolved conflicts (BC)
Martin von Zweigbergk <martinvonz@google.com>
parents:
27267
diff
changeset
|
1957 if len(pl) > 1: |
46418
dc00324e80f4
errors: use StateError more in merge module
Martin von Zweigbergk <martinvonz@google.com>
parents:
46367
diff
changeset
|
1958 raise error.StateError(_(b"outstanding uncommitted merge")) |
45499
19590b126764
merge: use in-memory mergestate when using in-memory context
Martin von Zweigbergk <martinvonz@google.com>
parents:
45493
diff
changeset
|
1959 ms = wc.mergestate() |
46361
dfca84970da8
cleanup: use mergestate.unresolvedcount() instead of bool(list(unresolved()))
Augie Fackler <augie@google.com>
parents:
45942
diff
changeset
|
1960 if ms.unresolvedcount(): |
48703
6c4b10d01af0
merge: break up two not-so-one-liner for extra readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48702
diff
changeset
|
1961 msg = _(b"outstanding merge conflicts") |
6c4b10d01af0
merge: break up two not-so-one-liner for extra readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48702
diff
changeset
|
1962 hint = _(b"use 'hg resolve' to resolve") |
6c4b10d01af0
merge: break up two not-so-one-liner for extra readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48702
diff
changeset
|
1963 raise error.StateError(msg, hint=hint) |
6375
cdc458b12f0f
update: better logic and messages for updates
Matt Mackall <mpm@selenic.com>
parents:
6350
diff
changeset
|
1964 if branchmerge: |
48704
58a2c66fa94c
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48703
diff
changeset
|
1965 m_a = _(b"merging with a working directory ancestor has no effect") |
21081
ffd7b6ce46ff
merge: pass merge ancestor to calculateupdates as a list
Mads Kiilerich <madski@unity3d.com>
parents:
21080
diff
changeset
|
1966 if pas == [p2]: |
48704
58a2c66fa94c
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48703
diff
changeset
|
1967 raise error.Abort(m_a) |
21081
ffd7b6ce46ff
merge: pass merge ancestor to calculateupdates as a list
Mads Kiilerich <madski@unity3d.com>
parents:
21080
diff
changeset
|
1968 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
|
1969 if not mergeancestor and wc.branch() == p2.branch(): |
48705
bca57b01518f
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48704
diff
changeset
|
1970 msg = _(b"nothing to merge") |
bca57b01518f
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48704
diff
changeset
|
1971 hint = _(b"use 'hg update' or check 'hg heads'") |
bca57b01518f
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48704
diff
changeset
|
1972 raise error.Abort(msg, hint=hint) |
6375
cdc458b12f0f
update: better logic and messages for updates
Matt Mackall <mpm@selenic.com>
parents:
6350
diff
changeset
|
1973 if not force and (wc.files() or wc.deleted()): |
48706
00bfd920169d
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48705
diff
changeset
|
1974 msg = _(b"uncommitted changes") |
00bfd920169d
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48705
diff
changeset
|
1975 hint = _(b"use 'hg status' to list changes") |
00bfd920169d
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48705
diff
changeset
|
1976 raise error.StateError(msg, hint=hint) |
35284
1b03407e808d
merge: skip subrepo state, update hooks, and updating the dirstate in IMM
Phil Cohen <phillco@fb.com>
parents:
35283
diff
changeset
|
1977 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
|
1978 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
|
1979 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
|
1980 |
6375
cdc458b12f0f
update: better logic and messages for updates
Matt Mackall <mpm@selenic.com>
parents:
6350
diff
changeset
|
1981 elif not overwrite: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1982 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
|
1983 # 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
|
1984 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
|
1985 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
|
1986 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
|
1987 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1988 if updatecheck == UPDATECHECK_LINEAR and pas not in ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1989 [p1], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1990 [p2], |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1991 ): # nonlinear |
18985
a59e575c6ff8
update: allow dirty update to foreground (successors)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18895
diff
changeset
|
1992 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
|
1993 if dirty: |
18985
a59e575c6ff8
update: allow dirty update to foreground (successors)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18895
diff
changeset
|
1994 # 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
|
1995 # 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
|
1996 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
|
1997 # 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
|
1998 if repo[node].node() in foreground: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
1999 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
|
2000 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2001 msg = _(b"uncommitted changes") |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2002 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
|
2003 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
|
2004 else: |
a59e575c6ff8
update: allow dirty update to foreground (successors)
Pierre-Yves David <pierre-yves.david@logilab.fr>
parents:
18895
diff
changeset
|
2005 # 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
|
2006 pass |
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2007 |
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2008 if overwrite: |
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2009 pas = [wc] |
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2010 elif not branchmerge: |
47278970fc8c
update: localize logic around which ancestor to use
Martin von Zweigbergk <martinvonz@google.com>
parents:
30859
diff
changeset
|
2011 pas = [p1] |
2814
0f787997e3c2
Merge: move most tests to the beginning
Matt Mackall <mpm@selenic.com>
parents:
2813
diff
changeset
|
2012 |
25843
bf9ea348b487
merge: mark ancient debugging option
Matt Mackall <mpm@selenic.com>
parents:
25754
diff
changeset
|
2013 # deprecated config: merge.followcopies |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2014 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
|
2015 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
|
2016 followcopies = False |
a2804ddcf9ae
update: enable copy tracing for backwards and non-linear updates
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30172
diff
changeset
|
2017 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
|
2018 followcopies = False |
a2804ddcf9ae
update: enable copy tracing for backwards and non-linear updates
Gábor Stefanik <gabor.stefanik@nng.com>
parents:
30172
diff
changeset
|
2019 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
|
2020 followcopies = False |
21080
04540a8499a3
merge: move ancestor selection tweaking from manifestmerge to update function
Mads Kiilerich <madski@unity3d.com>
parents:
21024
diff
changeset
|
2021 |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2022 update_from_null = False |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2023 update_from_null_fallback = False |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2024 if ( |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2025 MAYBE_USE_RUST_UPDATE |
52061
43e15277498e
rust-update: add a config item to disable the Rust update fastpath
Raphaël Gomès <rgomes@octobus.net>
parents:
52060
diff
changeset
|
2026 and repo.ui.configbool(b"rust", b"update-from-null") |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2027 and rust_update_mod is not None |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2028 and p1.rev() == nullrev |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2029 and not branchmerge |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2030 # TODO it's probably not too hard to pass down the transaction and |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2031 # respect the write patterns from Rust. But since it doesn't affect |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2032 # a simple update from null, then it doesn't matter yet. |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2033 and repo.currenttransaction() is None |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2034 and matcher is None |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2035 and not wc.mergestate().active() |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2036 and b'.hgsubstate' not in p2 |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2037 ): |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2038 working_dir_iter = os.scandir(repo.root) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2039 maybe_hg_folder = next(working_dir_iter) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2040 assert maybe_hg_folder is not None |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2041 if maybe_hg_folder.name == b".hg": |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2042 try: |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2043 next(working_dir_iter) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2044 except StopIteration: |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2045 update_from_null = True |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2046 |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2047 if update_from_null: |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2048 # Check the narrowspec and sparsespec here to display warnings |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2049 # more easily. |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2050 # TODO figure out of a way of bubbling up warnings to Python |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2051 # while not polluting the Rust code (probably a channel) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2052 repo.narrowmatch() |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2053 sparse.matcher(repo, [nullrev, p2.rev()]) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2054 repo.hook(b'preupdate', throw=True, parent1=xp1, parent2=xp2) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2055 # note that we're in the middle of an update |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2056 repo.vfs.write(b'updatestate', p2.hex()) |
52190
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Raphaël Gomès <rgomes@octobus.net>
parents:
52061
diff
changeset
|
2057 num_cpus = ( |
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Raphaël Gomès <rgomes@octobus.net>
parents:
52061
diff
changeset
|
2058 repo.ui.configint(b"worker", b"numcpus", None) |
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Raphaël Gomès <rgomes@octobus.net>
parents:
52061
diff
changeset
|
2059 if repo.ui.configbool(b"worker", b"enabled") |
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Raphaël Gomès <rgomes@octobus.net>
parents:
52061
diff
changeset
|
2060 else 1 |
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Raphaël Gomès <rgomes@octobus.net>
parents:
52061
diff
changeset
|
2061 ) |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2062 try: |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2063 updated_count = rust_update_mod.update_from_null( |
52190
e6a44bc91bc2
rust-update: make `update_from_null` respect `worker.numcpu` config option
Raphaël Gomès <rgomes@octobus.net>
parents:
52061
diff
changeset
|
2064 repo.root, p2.rev(), num_cpus |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2065 ) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2066 except rust_update_mod.FallbackError: |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2067 update_from_null_fallback = True |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2068 else: |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2069 # We've changed the dirstate from Rust, we need to tell Python |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2070 repo.dirstate.invalidate() |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2071 # This includes setting the parents, since they are not read |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2072 # again on invalidation |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2073 with repo.dirstate.changing_parents(repo): |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2074 repo.dirstate.setparents(fp2) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2075 repo.dirstate.setbranch(p2.branch(), repo.currenttransaction()) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2076 sparse.prunetemporaryincludes(repo) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2077 repo.hook(b'update', parent1=xp1, parent2=xp2, error=0) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2078 # update completed, clear state |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2079 util.unlink(repo.vfs.join(b'updatestate')) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2080 return updateresult(updated_count, 0, 0, 0) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2081 |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4904
diff
changeset
|
2082 ### calculate phase |
45274
0e18861f96ab
merge: return a mergeresult obj from manifestmerge(), calculateupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45168
diff
changeset
|
2083 mresult = calculateupdates( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2084 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2085 wc, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2086 p2, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2087 pas, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2088 branchmerge, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2089 force, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2090 mergeancestor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2091 followcopies, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2092 matcher=matcher, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2093 mergeforce=mergeforce, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2094 ) |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2095 |
42970
1ad3ebb39c61
merge: replace magic strings with NAMED_CONSTANTS (API)
Augie Fackler <augie@google.com>
parents:
42959
diff
changeset
|
2096 if updatecheck == UPDATECHECK_NO_CONFLICT: |
45278
0c849f0166c2
merge: introduce hasconflicts() on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45277
diff
changeset
|
2097 if mresult.hasconflicts(): |
0c849f0166c2
merge: introduce hasconflicts() on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45277
diff
changeset
|
2098 msg = _(b"conflicting changes") |
0c849f0166c2
merge: introduce hasconflicts() on mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45277
diff
changeset
|
2099 hint = _(b"commit or update --clean to discard changes") |
46418
dc00324e80f4
errors: use StateError more in merge module
Martin von Zweigbergk <martinvonz@google.com>
parents:
46367
diff
changeset
|
2100 raise error.StateError(msg, hint=hint) |
31168
41a9edc5d00f
update: allow setting default update check to "noconflict"
Martin von Zweigbergk <martinvonz@google.com>
parents:
31166
diff
changeset
|
2101 |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2102 # 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
|
2103 # 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
|
2104 # subrepoutil.submerge yet so we have to keep prompting for it. |
45344
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
2105 vals = mresult.getfile(b'.hgsubstate') |
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
2106 if vals: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2107 f = b'.hgsubstate' |
45344
4c6004afd836
mergeresult: introduce getfile() and use it where required
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45343
diff
changeset
|
2108 m, args, msg = vals |
29774
a7f8939641aa
merge: use labels in prompts to the user
Simon Farnsworth <simonfar@fb.com>
parents:
29629
diff
changeset
|
2109 prompts = filemerge.partextras(labels) |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2110 prompts[b'f'] = f |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
2111 if m == mergestatemod.ACTION_CHANGED_DELETED: |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2112 if repo.ui.promptchoice( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2113 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2114 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
|
2115 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
|
2116 b"$$ &Changed $$ &Delete" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2117 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2118 % prompts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2119 0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2120 ): |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
2121 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2122 f, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2123 mergestatemod.ACTION_REMOVE, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2124 None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2125 b'prompt delete', |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
2126 ) |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2127 elif f in p1: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
2128 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
2129 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
2130 mergestatemod.ACTION_ADD_MODIFIED, |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2131 None, |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2132 b'prompt keep', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2133 ) |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2134 else: |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
2135 mresult.addfile( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2136 f, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2137 mergestatemod.ACTION_ADD, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2138 None, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2139 b'prompt keep', |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
2140 ) |
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
2141 elif m == mergestatemod.ACTION_DELETED_CHANGED: |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2142 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
|
2143 flags = p2[f2].flags() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2144 if ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2145 repo.ui.promptchoice( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2146 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2147 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
|
2148 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
|
2149 b"$$ &Changed $$ &Deleted" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2150 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2151 % prompts, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2152 0, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2153 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2154 == 0 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2155 ): |
45282
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
2156 mresult.addfile( |
b442920ab1de
merge: introduce mergeresult.addfile() and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45281
diff
changeset
|
2157 f, |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
2158 mergestatemod.ACTION_GET, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2159 (flags, False), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2160 b'prompt recreating', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2161 ) |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2162 else: |
45283
f1fb9a079131
merge: add removefile() to mergeresult object
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45282
diff
changeset
|
2163 mresult.removefile(f) |
27951
6bce6d925e45
merge: don't try to merge subrepos twice (issue4988)
Siddharth Agarwal <sid0@fb.com>
parents:
27852
diff
changeset
|
2164 |
29889
6f447b9ec263
util: rename checkcase() to fscasesensitive() (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
29831
diff
changeset
|
2165 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
|
2166 # 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
|
2167 if not branchmerge and ( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2168 force or not wc.dirty(missing=True, branch=False) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2169 ): |
23544
7cc0fb0080b6
merge: perform case-collision checking on final set of actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23541
diff
changeset
|
2170 _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
|
2171 else: |
45333
f569ca3eb430
merge: pass mergeresult obj instead of actions in _checkcollision() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45299
diff
changeset
|
2172 _checkcollision(repo, wc.manifest(), mresult) |
23544
7cc0fb0080b6
merge: perform case-collision checking on final set of actions
Martin von Zweigbergk <martinvonz@google.com>
parents:
23541
diff
changeset
|
2173 |
23525
5126d7718d7c
merge: move dr/rd warning messages out of applyupdates()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23524
diff
changeset
|
2174 # divergent renames |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2175 for f, fl in sorted(mresult.diverge.items()): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2176 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2177 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2178 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
|
2179 b"multiple times to:\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2180 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2181 % f |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2182 ) |
42110
3a7efcbdf288
copies: print list of divergent renames in sorted order
Martin von Zweigbergk <martinvonz@google.com>
parents:
42057
diff
changeset
|
2183 for nf in sorted(fl): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2184 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
|
2185 |
5126d7718d7c
merge: move dr/rd warning messages out of applyupdates()
Martin von Zweigbergk <martinvonz@google.com>
parents:
23524
diff
changeset
|
2186 # rename and delete |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2187 for f, fl in sorted(mresult.renamedelete.items()): |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2188 repo.ui.warn( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2189 _( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2190 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
|
2191 b"and renamed to:\n" |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2192 ) |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2193 % f |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2194 ) |
42110
3a7efcbdf288
copies: print list of divergent renames in sorted order
Martin von Zweigbergk <martinvonz@google.com>
parents:
42057
diff
changeset
|
2195 for nf in sorted(fl): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2196 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
|
2197 |
26957
d16d73173fdd
merge: move messages about possible conflicts a litte earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
26949
diff
changeset
|
2198 ### apply phase |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2199 if not branchmerge: # just jump to the new rev |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
2200 fp1, fp2, xp1, xp2 = fp2, repo.nullid, xp2, b'' |
44165
ae9310709c13
merge: move definition of `partial` closer to where it's used
Martin von Zweigbergk <martinvonz@google.com>
parents:
44151
diff
changeset
|
2201 # If we're doing a partial update, we need to skip updating |
44166
faec51c76b7b
merge: avoid a negation in the definition of updatedirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44165
diff
changeset
|
2202 # the dirstate. |
faec51c76b7b
merge: avoid a negation in the definition of updatedirstate
Martin von Zweigbergk <martinvonz@google.com>
parents:
44165
diff
changeset
|
2203 always = matcher is None or matcher.always() |
44271
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2204 updatedirstate = updatedirstate and always and not wc.isinmemory() |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2205 # If we're in the fallback case, we've already done this |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2206 if updatedirstate and not update_from_null_fallback: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2207 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
|
2208 # 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
|
2209 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
|
2210 |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2211 # TODO don't run if Rust is available |
45167
796b63b0f0dd
merge: refactor code to advise fsmonitor in separate function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45159
diff
changeset
|
2212 _advertisefsmonitor( |
45338
72b8c082676b
mergeresult: implement a len() function and use it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45337
diff
changeset
|
2213 repo, mresult.len((mergestatemod.ACTION_GET,)), p1.node() |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2214 ) |
34885
df2ff314e36f
fsmonitor: warn when fsmonitor could be used
Gregory Szorc <gregory.szorc@gmail.com>
parents:
34787
diff
changeset
|
2215 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2216 wantfiledata = updatedirstate and not branchmerge |
47372
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2217 stats, getfiledata, extraactions = applyupdates( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2218 repo, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2219 mresult, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2220 wc, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2221 p2, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2222 overwrite, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2223 wantfiledata, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45940
diff
changeset
|
2224 labels=labels, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2225 ) |
26957
d16d73173fdd
merge: move messages about possible conflicts a litte earlier
Martin von Zweigbergk <martinvonz@google.com>
parents:
26949
diff
changeset
|
2226 |
42456
87a34c767384
merge: fix race that could cause wrong size in dirstate
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
42412
diff
changeset
|
2227 if updatedirstate: |
47372
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2228 if extraactions: |
48913
f254fc73d956
global: bulk replace simple pycompat.iteritems(x) with x.items()
Gregory Szorc <gregory.szorc@gmail.com>
parents:
48875
diff
changeset
|
2229 for k, acts in extraactions.items(): |
47372
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2230 for a in acts: |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2231 mresult.addfile(a[0], k, *a[1:]) |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2232 if k == mergestatemod.ACTION_GET and wantfiledata: |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2233 # no filedata until mergestate is updated to provide it |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2234 for a in acts: |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2235 getfiledata[a[0]] = None |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2236 |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2237 assert len(getfiledata) == ( |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2238 mresult.len((mergestatemod.ACTION_GET,)) if wantfiledata else 0 |
9e6e12e1a87e
merge: make applyupdates() not mutate mresult argument
Martin von Zweigbergk <martinvonz@google.com>
parents:
47012
diff
changeset
|
2239 ) |
49961
7a8bfc05b691
dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49960
diff
changeset
|
2240 with repo.dirstate.changing_parents(repo): |
48380
6dc3dc5e9636
update: filter the ambiguous mtime in update directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48377
diff
changeset
|
2241 if getfiledata: |
52058
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2242 getfiledata = filter_ambiguous_files(repo, getfiledata) |
48380
6dc3dc5e9636
update: filter the ambiguous mtime in update directly
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48377
diff
changeset
|
2243 |
32351
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2244 repo.setparents(fp1, fp2) |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
2245 mergestatemod.recordupdates( |
45334
b9b055f15035
merge: pass mergeresult obj instead of actions in applyupdates() (API)
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45333
diff
changeset
|
2246 repo, mresult.actionsdict, branchmerge, getfiledata |
44856
b7808443ed6a
mergestate: split out merge state handling code from main merge module
Augie Fackler <augie@google.com>
parents:
44687
diff
changeset
|
2247 ) |
32351
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2248 if not branchmerge: |
50260
e60f9168263c
branch: pass current transaction when writing branch in merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
2249 repo.dirstate.setbranch( |
e60f9168263c
branch: pass current transaction when writing branch in merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
2250 p2.branch(), repo.currenttransaction() |
e60f9168263c
branch: pass current transaction when writing branch in merge
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49961
diff
changeset
|
2251 ) |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10431
diff
changeset
|
2252 |
52060
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2253 # update completed, clear state |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2254 util.unlink(repo.vfs.join(b'updatestate')) |
8b7123c8947b
update: add a Rust fast-path when updating from null (and clean)
Raphaël Gomès <rgomes@octobus.net>
parents:
52059
diff
changeset
|
2255 |
47609
c8d6e23fb14a
sparse: adjust the temporary includes within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47372
diff
changeset
|
2256 # If we're updating to a location, clean up any stale temporary includes |
c8d6e23fb14a
sparse: adjust the temporary includes within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47372
diff
changeset
|
2257 # (ex: this happens during hg rebase --abort). |
c8d6e23fb14a
sparse: adjust the temporary includes within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47372
diff
changeset
|
2258 if not branchmerge: |
c8d6e23fb14a
sparse: adjust the temporary includes within a `parentchange` context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47372
diff
changeset
|
2259 sparse.prunetemporaryincludes(repo) |
33321
d09e948dc303
sparse: move pruning of temporary includes into core
Gregory Szorc <gregory.szorc@gmail.com>
parents:
33311
diff
changeset
|
2260 |
44150
ff22c76825b9
merge: don't call update hook when using in-memory context
Martin von Zweigbergk <martinvonz@google.com>
parents:
44092
diff
changeset
|
2261 if updatedirstate: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2262 repo.hook( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2263 b'update', parent1=xp1, parent2=xp2, error=stats.unresolvedcount |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2264 ) |
10492
0e64d814d7d0
run commit and update hooks after command completion (issue1827)
Sune Foldager <cryo@cyanite.org>
parents:
10431
diff
changeset
|
2265 return stats |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2266 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2267 |
52058
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2268 # filename -> (mode, size, timestamp) |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2269 FileData = Dict[bytes, Optional[Tuple[int, int, Optional[timestamp.timestamp]]]] |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2270 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2271 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2272 def filter_ambiguous_files(repo, file_data: FileData) -> Optional[FileData]: |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2273 """We've gathered "cache" information for the clean files while updating |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2274 them: their mtime, size and mode. |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2275 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2276 At the time this comment is written, there are various issues with how we |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2277 gather the `mode` and `mtime` information (see the comment in `batchget`). |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2278 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2279 We are going to smooth one of these issues here: mtime ambiguity. |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2280 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2281 i.e. even if the mtime gathered during `batchget` was correct[1] a change |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2282 happening right after it could change the content while keeping |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2283 the same mtime[2]. |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2284 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2285 When we reach the current code, the "on disk" part of the update operation |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2286 is finished. We still assume that no other process raced that "on disk" |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2287 part, but we want to at least prevent later file changes to alter the |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2288 contents of the file right after the update operation so quickly that the |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2289 same mtime is recorded for the operation. |
52059
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2290 |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2291 To prevent such ambiguities from happenning, we will do (up to) two things: |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2292 - wait until the filesystem clock has ticked |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2293 - only keep the "file data" for files with mtimes that are strictly in |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2294 the past, i.e. whose mtime is strictly lower than the current time. |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2295 |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2296 We only wait for the system clock to tick if using dirstate-v2, since v1 |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2297 only has second-level granularity and waiting for a whole second is |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2298 too much of a penalty in the general case. |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2299 |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2300 Although we're assuming that people running dirstate-v2 on Linux |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2301 don't have a second-granularity FS (with the exclusion of NFS), users |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2302 can be surprising, and at some point in the future, dirstate-v2 will become |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2303 the default. To that end, we limit the wait time to 100ms and fall back |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2304 to the filtering method in case of a timeout. |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2305 |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2306 +------------+------+--------------+ |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2307 | version | wait | filter level | |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2308 +------------+------+--------------+ |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2309 | V1 | No | Second | |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2310 | V2 | Yes | Nanosecond | |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2311 | V2-slow-fs | No | Second | |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2312 +------------+------+--------------+ |
52058
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2313 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2314 This protects us from race conditions from operations that could run right |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2315 after this one, especially other Mercurial operations that could be waiting |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2316 for the wlock to touch files contents and the dirstate. |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2317 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2318 In an ideal world, we could only get reliable information in `getfiledata` |
52059
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2319 (from `getbatch`), however this filtering approach has been a successful |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2320 compromise for many years. A patch series of the linux kernel might change |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2321 this in 6.12³. |
52058
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2322 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2323 At the time this comment is written, not using any "cache" file data at all |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2324 here would not be viable, as it would result is a very large amount of work |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2325 (equivalent to the previous `hg update` during the next status after an |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2326 update). |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2327 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2328 [1] the current code cannot grantee that the `mtime` and `mode` |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2329 are correct, but the result is "okay in practice". |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2330 (see the comment in `batchget`) |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2331 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2332 [2] using nano-second precision can greatly help here because it makes the |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2333 "different write with same mtime" issue virtually vanish. However, |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2334 dirstate v1 cannot store such precision and a bunch of python-runtime, |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2335 operating-system and filesystem parts do not provide us with such |
52059
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2336 precision, so we have to operate as if it wasn't available. |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2337 |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2338 [3] https://lore.kernel.org/all/20241002-mgtime-v10-8-d1c4717f5284@kernel.org |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2339 """ |
52058
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2340 ambiguous_mtime: FileData = {} |
52059
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2341 dirstate_v2 = repo.dirstate._use_dirstate_v2 |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2342 fs_now_result = None |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2343 fast_enough_fs = True |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2344 if dirstate_v2: |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2345 fstype = util.getfstype(repo.vfs.base) |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2346 # Exclude NFS right off the bat |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2347 fast_enough_fs = fstype != b'nfs' |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2348 if fstype is not None and fast_enough_fs: |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2349 fs_now_result = timestamp.wait_until_fs_tick(repo.vfs) |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2350 |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2351 if fs_now_result is None: |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2352 try: |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2353 now = timestamp.get_fs_now(repo.vfs) |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2354 fs_now_result = (now, False) |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2355 except OSError: |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2356 pass |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2357 |
52058
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2358 if fs_now_result is None: |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2359 # we can't write to the FS, so we won't actually update |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2360 # the dirstate content anyway, no need to put cache |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2361 # information. |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2362 return None |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2363 else: |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2364 now, timed_out = fs_now_result |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2365 if timed_out: |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2366 fast_enough_fs = False |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2367 for f, m in file_data.items(): |
52059
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2368 if m is not None: |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2369 reliable = timestamp.make_mtime_reliable(m[2], now) |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2370 if reliable is None or ( |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2371 reliable[2] and (not dirstate_v2 or not fast_enough_fs) |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2372 ): |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2373 # Either it's not reliable, or it's second ambiguous |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2374 # and we're in dirstate-v1 or in a slow fs, so discard |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2375 # the mtime. |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2376 ambiguous_mtime[f] = (m[0], m[1], None) |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2377 elif reliable[2]: |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2378 # We need to remember that this time is "second ambiguous" |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2379 # otherwise the next status might miss a subsecond change |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2380 # if its "stat" doesn't provide nanoseconds. |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2381 # |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2382 # TODO make osutil.c understand nanoseconds when possible |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2383 # (see timestamp.py for the same note) |
b332ae615714
merge: improve working-copy mtime race handling
Raphaël Gomès <rgomes@octobus.net>
parents:
52058
diff
changeset
|
2384 ambiguous_mtime[f] = (m[0], m[1], reliable) |
52058
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2385 for f, m in ambiguous_mtime.items(): |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2386 file_data[f] = m |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2387 return file_data |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2388 |
f5742367a279
merge: move the filtering of ambiguous files to a dedicated function
Raphaël Gomès <rgomes@octobus.net>
parents:
51863
diff
changeset
|
2389 |
44399
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2390 def merge(ctx, labels=None, force=False, wc=None): |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2391 """Merge another topological branch into the working copy. |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2392 |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2393 force = whether the merge was run with 'merge --force' (deprecated) |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2394 """ |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2395 |
45557
2c86b9587740
merge: make low-level update() private (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45544
diff
changeset
|
2396 return _update( |
44399
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2397 ctx.repo(), |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2398 ctx.rev(), |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2399 labels=labels, |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2400 branchmerge=True, |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2401 force=force, |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2402 mergeforce=force, |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2403 wc=wc, |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2404 ) |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2405 |
a45ffad9ae98
merge: introduce a merge() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44394
diff
changeset
|
2406 |
45576
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2407 def update(ctx, updatecheck=None, wc=None): |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2408 """Do a regular update to the given commit, aborting if there are conflicts. |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2409 |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2410 The 'updatecheck' argument can be used to control what to do in case of |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2411 conflicts. |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2412 |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2413 Note: This is a new, higher-level update() than the one that used to exist |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2414 in this module. That function is now called _update(). You can hopefully |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2415 replace your callers to use this new update(), or clean_update(), merge(), |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2416 revert_to(), or graft(). |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2417 """ |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2418 return _update( |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2419 ctx.repo(), |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2420 ctx.rev(), |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2421 branchmerge=False, |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2422 force=False, |
48590
7e503eff3c76
update: set custom conflict label for base commit
Martin von Zweigbergk <martinvonz@google.com>
parents:
48450
diff
changeset
|
2423 labels=[b'working copy', b'destination', b'working copy parent'], |
45576
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2424 updatecheck=updatecheck, |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2425 wc=wc, |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2426 ) |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2427 |
c1b603cdc95a
merge: add a higher-level update() for the common `hg update` use case
Martin von Zweigbergk <martinvonz@google.com>
parents:
45557
diff
changeset
|
2428 |
44270
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44215
diff
changeset
|
2429 def clean_update(ctx, wc=None): |
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44215
diff
changeset
|
2430 """Do a clean update to the given commit. |
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44215
diff
changeset
|
2431 |
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44215
diff
changeset
|
2432 This involves updating to the commit and discarding any changes in the |
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44215
diff
changeset
|
2433 working copy. |
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44215
diff
changeset
|
2434 """ |
45557
2c86b9587740
merge: make low-level update() private (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45544
diff
changeset
|
2435 return _update(ctx.repo(), ctx.rev(), branchmerge=False, force=True, wc=wc) |
44270
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44215
diff
changeset
|
2436 |
f546d2170b0f
merge: introduce a clean_update() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44215
diff
changeset
|
2437 |
44271
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2438 def revert_to(ctx, matcher=None, wc=None): |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2439 """Revert the working copy to the given commit. |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2440 |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2441 The working copy will keep its current parent(s) but its content will |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2442 be the same as in the given commit. |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2443 """ |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2444 |
45557
2c86b9587740
merge: make low-level update() private (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45544
diff
changeset
|
2445 return _update( |
44271
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2446 ctx.repo(), |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2447 ctx.rev(), |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2448 branchmerge=False, |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2449 force=True, |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2450 updatedirstate=False, |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2451 matcher=matcher, |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2452 wc=wc, |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2453 ) |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2454 |
c791ed6a2154
merge: introduce a revert_to() for that use-case
Martin von Zweigbergk <martinvonz@google.com>
parents:
44270
diff
changeset
|
2455 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2456 def graft( |
44211
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2457 repo, |
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2458 ctx, |
44212
cb8b67016110
graft: default `base` argument to common case of `ctx.p1()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
44211
diff
changeset
|
2459 base=None, |
44211
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2460 labels=None, |
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2461 keepparent=False, |
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2462 keepconflictparent=False, |
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2463 wctx=None, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2464 ): |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2465 """Do a graft-like merge. |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2466 |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2467 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
|
2468 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
|
2469 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
|
2470 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
|
2471 renames/copies appropriately. |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2472 |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2473 ctx - changeset to rebase |
44212
cb8b67016110
graft: default `base` argument to common case of `ctx.p1()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
44211
diff
changeset
|
2474 base - merge base, or ctx.p1() if not specified |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2475 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
|
2476 keepparent - keep second parent if any |
42412
127937874395
merge: correct argument name in docstring
Anton Shestakov <av6@dwimlabs.net>
parents:
42410
diff
changeset
|
2477 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
|
2478 |
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2479 """ |
24643
a8e6897dffbe
graft: allow creating sibling grafts
Durham Goode <durham@fb.com>
parents:
24471
diff
changeset
|
2480 # 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
|
2481 # 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
|
2482 # 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
|
2483 # 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
|
2484 # 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
|
2485 # which local deleted". |
44383
218feb1a7e00
graft: always allow hg graft --base . (issue6248)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44289
diff
changeset
|
2486 # We also pass mergeancestor=True when base is the same revision as p1. 2) |
218feb1a7e00
graft: always allow hg graft --base . (issue6248)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44289
diff
changeset
|
2487 # doesn't matter as there can't possibly be conflicts, but 1) is necessary. |
44211
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2488 wctx = wctx or repo[None] |
44089
bd22e90c54b3
graft: extract repo[None] to a variable
Martin von Zweigbergk <martinvonz@google.com>
parents:
44060
diff
changeset
|
2489 pctx = wctx.p1() |
44212
cb8b67016110
graft: default `base` argument to common case of `ctx.p1()`
Martin von Zweigbergk <martinvonz@google.com>
parents:
44211
diff
changeset
|
2490 base = base or ctx.p1() |
44383
218feb1a7e00
graft: always allow hg graft --base . (issue6248)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44289
diff
changeset
|
2491 mergeancestor = ( |
218feb1a7e00
graft: always allow hg graft --base . (issue6248)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44289
diff
changeset
|
2492 repo.changelog.isancestor(pctx.node(), ctx.node()) |
218feb1a7e00
graft: always allow hg graft --base . (issue6248)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44289
diff
changeset
|
2493 or pctx.rev() == base.rev() |
218feb1a7e00
graft: always allow hg graft --base . (issue6248)
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44289
diff
changeset
|
2494 ) |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2495 |
45557
2c86b9587740
merge: make low-level update() private (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45544
diff
changeset
|
2496 stats = _update( |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2497 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2498 ctx.node(), |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2499 True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2500 True, |
43796
ebfd349eac46
graft: rename `pctx` argument to `base` since that's what it is
Martin von Zweigbergk <martinvonz@google.com>
parents:
43787
diff
changeset
|
2501 base.node(), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2502 mergeancestor=mergeancestor, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2503 labels=labels, |
44211
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2504 wc=wctx, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2505 ) |
38494
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2506 |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2507 if keepconflictparent and stats.unresolvedcount: |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2508 pother = ctx.node() |
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2509 else: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
2510 pother = repo.nullid |
38494
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2511 parents = ctx.parents() |
43796
ebfd349eac46
graft: rename `pctx` argument to `base` since that's what it is
Martin von Zweigbergk <martinvonz@google.com>
parents:
43787
diff
changeset
|
2512 if keepparent and len(parents) == 2 and base in parents: |
ebfd349eac46
graft: rename `pctx` argument to `base` since that's what it is
Martin von Zweigbergk <martinvonz@google.com>
parents:
43787
diff
changeset
|
2513 parents.remove(base) |
38494
d4be8ea8f22d
merge: add a 'keepconflictparent' argument to graft
Boris Feld <boris.feld@octobus.net>
parents:
38426
diff
changeset
|
2514 pother = parents[0].node() |
43798
32d11a23c9cf
graft: never set both parents equal in the dirstate (issue6098)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43797
diff
changeset
|
2515 # Never set both parents equal to each other |
32d11a23c9cf
graft: never set both parents equal in the dirstate (issue6098)
Martin von Zweigbergk <martinvonz@google.com>
parents:
43797
diff
changeset
|
2516 if pother == pctx.node(): |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46819
diff
changeset
|
2517 pother = repo.nullid |
27267
d6859d86a5d5
merge.graft: add option to keep second parent
Andrew Halberstadt <ahalberstadt@mozilla.com>
parents:
27137
diff
changeset
|
2518 |
44211
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2519 if wctx.isinmemory(): |
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2520 wctx.setparents(pctx.node(), pother) |
32351
c568c187102f
merge: migrate to context manager for changing dirstate parents
Augie Fackler <augie@google.com>
parents:
32246
diff
changeset
|
2521 # fix up dirstate for copies and renames |
44092
833210fbd900
graftcopies: remove `skip` and `repo` arguments
Martin von Zweigbergk <martinvonz@google.com>
parents:
44090
diff
changeset
|
2522 copies.graftcopies(wctx, ctx, base) |
44211
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2523 else: |
49961
7a8bfc05b691
dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
49960
diff
changeset
|
2524 with repo.dirstate.changing_parents(repo): |
44211
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2525 repo.setparents(pctx.node(), pother) |
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2526 repo.dirstate.write(repo.currenttransaction()) |
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2527 # fix up dirstate for copies and renames |
fc7175df6359
graft: let caller pass in overlayworkingctx to merge.graft()
Martin von Zweigbergk <martinvonz@google.com>
parents:
44200
diff
changeset
|
2528 copies.graftcopies(wctx, ctx, base) |
22902
ce0592328d68
merge: add merge.graft helper
Matt Mackall <mpm@selenic.com>
parents:
22841
diff
changeset
|
2529 return stats |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2530 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2531 |
45544
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2532 def back_out(ctx, parent=None, wc=None): |
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2533 if parent is None: |
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2534 if ctx.p2() is not None: |
48707
48aff31e7f4c
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48706
diff
changeset
|
2535 msg = b"must specify parent of merge commit to back out" |
48aff31e7f4c
merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48706
diff
changeset
|
2536 raise error.ProgrammingError(msg) |
45544
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2537 parent = ctx.p1() |
45557
2c86b9587740
merge: make low-level update() private (API)
Martin von Zweigbergk <martinvonz@google.com>
parents:
45544
diff
changeset
|
2538 return _update( |
45544
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2539 ctx.repo(), |
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2540 parent, |
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2541 branchmerge=True, |
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2542 force=True, |
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2543 ancestor=ctx.node(), |
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2544 mergeancestor=False, |
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2545 ) |
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2546 |
2b339c6c6e99
merge: add a back_out() function to encapsulate update()
Martin von Zweigbergk <martinvonz@google.com>
parents:
45525
diff
changeset
|
2547 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2548 def purge( |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2549 repo, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2550 matcher, |
44289
9f8eddd2723f
purge: add -i flag to delete ignored files instead of untracked files
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44287
diff
changeset
|
2551 unknown=True, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2552 ignored=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2553 removeemptydirs=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2554 removefiles=True, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2555 abortonerror=False, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2556 noop=False, |
46366
135056e8b5a8
purge: add a --confirm option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46361
diff
changeset
|
2557 confirm=False, |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
42972
diff
changeset
|
2558 ): |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2559 """Purge the working directory of untracked files. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2560 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2561 ``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
|
2562 potentially a subset. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2563 |
44289
9f8eddd2723f
purge: add -i flag to delete ignored files instead of untracked files
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44287
diff
changeset
|
2564 ``unknown`` controls whether unknown files should be purged. |
9f8eddd2723f
purge: add -i flag to delete ignored files instead of untracked files
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44287
diff
changeset
|
2565 |
9f8eddd2723f
purge: add -i flag to delete ignored files instead of untracked files
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44287
diff
changeset
|
2566 ``ignored`` controls whether ignored files should be purged. |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2567 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2568 ``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
|
2569 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2570 ``removefiles`` controls whether files are removed. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2571 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2572 ``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
|
2573 deleting a file or directory. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2574 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2575 ``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
|
2576 will be taken. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2577 |
46366
135056e8b5a8
purge: add a --confirm option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46361
diff
changeset
|
2578 ``confirm`` ask confirmation before actually removing anything. |
135056e8b5a8
purge: add a --confirm option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46361
diff
changeset
|
2579 |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2580 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
|
2581 or would be removed. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2582 """ |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2583 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2584 def remove(removefn, path): |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2585 try: |
39464
3dd34b401bc2
merge: use vfs methods for I/O
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39463
diff
changeset
|
2586 removefn(path) |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2587 except OSError: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2588 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
|
2589 if abortonerror: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2590 raise error.Abort(m) |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2591 else: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2592 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
|
2593 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2594 # 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
|
2595 # restore it when we're done. |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2596 oldtraversedir = matcher.traversedir |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2597 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2598 res = [] |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2599 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2600 try: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2601 if removeemptydirs: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2602 directories = [] |
43713
95d2eab0a7b9
dirstate: include explicit matches in match.traversedir calls
Martin von Zweigbergk <martinvonz@google.com>
parents:
43633
diff
changeset
|
2603 matcher.traversedir = directories.append |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2604 |
44289
9f8eddd2723f
purge: add -i flag to delete ignored files instead of untracked files
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com>
parents:
44287
diff
changeset
|
2605 status = repo.status(match=matcher, ignored=ignored, unknown=unknown) |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2606 |
46366
135056e8b5a8
purge: add a --confirm option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46361
diff
changeset
|
2607 if confirm: |
49352
0cc5f74ff7f0
purge: prevent a silly crash with --confirm --files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48805
diff
changeset
|
2608 msg = None |
46366
135056e8b5a8
purge: add a --confirm option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46361
diff
changeset
|
2609 nb_ignored = len(status.ignored) |
48423
fff5942d445f
typo: s/unkown/unknown across the codebase
Raphaël Gomès <rgomes@octobus.net>
parents:
48380
diff
changeset
|
2610 nb_unknown = len(status.unknown) |
fff5942d445f
typo: s/unkown/unknown across the codebase
Raphaël Gomès <rgomes@octobus.net>
parents:
48380
diff
changeset
|
2611 if nb_unknown and nb_ignored: |
fff5942d445f
typo: s/unkown/unknown across the codebase
Raphaël Gomès <rgomes@octobus.net>
parents:
48380
diff
changeset
|
2612 msg = _(b"permanently delete %d unknown and %d ignored files?") |
fff5942d445f
typo: s/unkown/unknown across the codebase
Raphaël Gomès <rgomes@octobus.net>
parents:
48380
diff
changeset
|
2613 msg %= (nb_unknown, nb_ignored) |
fff5942d445f
typo: s/unkown/unknown across the codebase
Raphaël Gomès <rgomes@octobus.net>
parents:
48380
diff
changeset
|
2614 elif nb_unknown: |
fff5942d445f
typo: s/unkown/unknown across the codebase
Raphaël Gomès <rgomes@octobus.net>
parents:
48380
diff
changeset
|
2615 msg = _(b"permanently delete %d unknown files?") |
fff5942d445f
typo: s/unkown/unknown across the codebase
Raphaël Gomès <rgomes@octobus.net>
parents:
48380
diff
changeset
|
2616 msg %= nb_unknown |
46366
135056e8b5a8
purge: add a --confirm option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46361
diff
changeset
|
2617 elif nb_ignored: |
135056e8b5a8
purge: add a --confirm option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46361
diff
changeset
|
2618 msg = _(b"permanently delete %d ignored files?") |
135056e8b5a8
purge: add a --confirm option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46361
diff
changeset
|
2619 msg %= nb_ignored |
46367
57370e7deb7b
purge: also deal with directory with --confirm
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46366
diff
changeset
|
2620 elif removeemptydirs: |
57370e7deb7b
purge: also deal with directory with --confirm
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46366
diff
changeset
|
2621 dir_count = 0 |
57370e7deb7b
purge: also deal with directory with --confirm
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46366
diff
changeset
|
2622 for f in directories: |
57370e7deb7b
purge: also deal with directory with --confirm
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46366
diff
changeset
|
2623 if matcher(f) and not repo.wvfs.listdir(f): |
57370e7deb7b
purge: also deal with directory with --confirm
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46366
diff
changeset
|
2624 dir_count += 1 |
57370e7deb7b
purge: also deal with directory with --confirm
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46366
diff
changeset
|
2625 if dir_count: |
57370e7deb7b
purge: also deal with directory with --confirm
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46366
diff
changeset
|
2626 msg = _( |
57370e7deb7b
purge: also deal with directory with --confirm
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46366
diff
changeset
|
2627 b"permanently delete at least %d empty directories?" |
57370e7deb7b
purge: also deal with directory with --confirm
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46366
diff
changeset
|
2628 ) |
57370e7deb7b
purge: also deal with directory with --confirm
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46366
diff
changeset
|
2629 msg %= dir_count |
49352
0cc5f74ff7f0
purge: prevent a silly crash with --confirm --files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48805
diff
changeset
|
2630 if msg is None: |
0cc5f74ff7f0
purge: prevent a silly crash with --confirm --files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48805
diff
changeset
|
2631 return res |
0cc5f74ff7f0
purge: prevent a silly crash with --confirm --files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48805
diff
changeset
|
2632 else: |
0cc5f74ff7f0
purge: prevent a silly crash with --confirm --files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48805
diff
changeset
|
2633 msg += b" (yN)$$ &Yes $$ &No" |
0cc5f74ff7f0
purge: prevent a silly crash with --confirm --files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48805
diff
changeset
|
2634 if repo.ui.promptchoice(msg, default=1) == 1: |
0cc5f74ff7f0
purge: prevent a silly crash with --confirm --files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48805
diff
changeset
|
2635 raise error.CanceledError(_(b'removal cancelled')) |
46366
135056e8b5a8
purge: add a --confirm option
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
46361
diff
changeset
|
2636 |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2637 if removefiles: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2638 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
|
2639 if not noop: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2640 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
|
2641 remove(repo.wvfs.unlink, f) |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2642 res.append(f) |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2643 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2644 if removeemptydirs: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2645 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
|
2646 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
|
2647 if not noop: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
2648 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
|
2649 remove(repo.wvfs.rmdir, f) |
39463
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2650 res.append(f) |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2651 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2652 return res |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2653 |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2654 finally: |
7fea205fd5dc
merge: move purge logic from extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
38757
diff
changeset
|
2655 matcher.traversedir = oldtraversedir |