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