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