annotate mercurial/merge.py @ 45337:5ce63ee1fe3d

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