Mercurial > hg
annotate mercurial/commit.py @ 50682:2cc5de261d76
rust-hg-core: move from `ouroboros` to `self_cell`
`ouroboros` has a fundamental soundness problem that, while not applicable
today, could become applicable given new compiler optimizations.ยน
`self_cell` is a crate that accomplishes a lot of the same things that
`ouroboros` did while remaining sound (that is, unless a new soundness issue
is discovered) by not assuming as much about the memory layout of the program.
`self_cell` has been scrutinized heavily in the past few months by very
competent people, some from the compiler team and has shown no weaknesses
for a while, with a 1.0 stable release coming out a couple months ago.
Our internal API is exactly the same, this is just an implementation detail.
To reiterate, no actual soundness issue was found with our use of `ouroboros`,
but there might be evolutions of `rustc` (or even a future separate compiler)
that could generate unsound code.
[1] https://github.com/joshua-maros/ouroboros/issues/88
author | Raphaël Gomès <rgomes@octobus.net> |
---|---|
date | Mon, 12 Jun 2023 23:41:28 +0200 |
parents | fce591256085 |
children | 421c9b3f2f4e |
rev | line source |
---|---|
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
1 # commit.py - fonction to perform commit |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
2 # |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
3 # This software may be used and distributed according to the terms of the |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
4 # GNU General Public License version 2 or any later version. |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
5 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
6 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
7 from .i18n import _ |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
8 from .node import ( |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
9 hex, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
10 nullrev, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
11 ) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
12 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
13 from . import ( |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
14 context, |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
15 mergestate, |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
16 metadata, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
17 phases, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
18 scmutil, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
19 subrepoutil, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
20 ) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
21 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
22 |
45233
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
23 def _write_copy_meta(repo): |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
24 """return a (changelog, filelog) boolean tuple |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
25 |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
26 changelog: copy related information should be stored in the changeset |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
27 filelof: copy related information should be written in the file revision |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
28 """ |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
29 if repo.filecopiesmode == b'changeset-sidedata': |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
30 writechangesetcopy = True |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
31 writefilecopymeta = True |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
32 else: |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
33 writecopiesto = repo.ui.config(b'experimental', b'copies.write-to') |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
34 writefilecopymeta = writecopiesto != b'changeset-only' |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
35 writechangesetcopy = writecopiesto in ( |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
36 b'changeset-only', |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
37 b'compatibility', |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
38 ) |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
39 return writechangesetcopy, writefilecopymeta |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
40 |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45232
diff
changeset
|
41 |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
42 def commitctx(repo, ctx, error=False, origctx=None): |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
43 """Add a new revision to the target repository. |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
44 Revision information is passed via the context argument. |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
45 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
46 ctx.files() should list all files involved in this commit, i.e. |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
47 modified/added/removed files. On merge, it may be wider than the |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
48 ctx.files() to be committed, since any file nodes derived directly |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
49 from p1 or p2 are excluded from the committed ctx.files(). |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
50 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
51 origctx is for convert to work around the problem that bug |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
52 fixes to the files list in changesets change hashes. For |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
53 convert to be the identity, it can pass an origctx and this |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
54 function will use the same files list when it makes sense to |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
55 do so. |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
56 """ |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
57 repo = repo.unfiltered() |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
58 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
59 p1, p2 = ctx.p1(), ctx.p2() |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
60 user = ctx.user() |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
61 |
45238
bd7515273fd6
commitctx: gather more preparation code within the lock context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45237
diff
changeset
|
62 with repo.lock(), repo.transaction(b"commit") as tr: |
45323
aea6a812f7cb
commitctx: return a richer object from _prepare_files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45251
diff
changeset
|
63 mn, files = _prepare_files(tr, ctx, error=error, origctx=origctx) |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
64 |
45248
4cde23ba076e
commitctx: create the new extra dict on its own line
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45247
diff
changeset
|
65 extra = ctx.extra().copy() |
4cde23ba076e
commitctx: create the new extra dict on its own line
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45247
diff
changeset
|
66 |
45249
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
67 if extra is not None: |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
68 for name in ( |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
69 b'p1copies', |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
70 b'p2copies', |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
71 b'filesadded', |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
72 b'filesremoved', |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
73 ): |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
74 extra.pop(name, None) |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
75 if repo.changelog._copiesstorage == b'extra': |
45323
aea6a812f7cb
commitctx: return a richer object from _prepare_files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45251
diff
changeset
|
76 extra = _extra_with_copies(repo, extra, files) |
45249
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
77 |
45757
067707e026b4
commit: don't change phases for preexisting commits
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45715
diff
changeset
|
78 # save the tip to check whether we actually committed anything |
067707e026b4
commit: don't change phases for preexisting commits
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45715
diff
changeset
|
79 oldtip = repo.changelog.tiprev() |
067707e026b4
commit: don't change phases for preexisting commits
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45715
diff
changeset
|
80 |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
81 # update changelog |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
82 repo.ui.note(_(b"committing changelog\n")) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
83 repo.changelog.delayupdate(tr) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
84 n = repo.changelog.add( |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
85 mn, |
45324
6c56277317c2
commitctx: directly pass a ChangingFiles object to changelog.add
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45323
diff
changeset
|
86 files, |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
87 ctx.description(), |
45230
5d0998ccedbb
commitctx: stop using weakref proxy for transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45223
diff
changeset
|
88 tr, |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
89 p1.node(), |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
90 p2.node(), |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
91 user, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
92 ctx.date(), |
45248
4cde23ba076e
commitctx: create the new extra dict on its own line
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45247
diff
changeset
|
93 extra, |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
94 ) |
46357
72f5280e33b6
commit: look-up new revision once
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
95 rev = repo[n].rev() |
46371
0903d6b9b1df
repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents:
46357
diff
changeset
|
96 if oldtip != repo.changelog.tiprev(): |
0903d6b9b1df
repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents:
46357
diff
changeset
|
97 repo.register_changeset(rev, repo.changelog.changelogrevision(rev)) |
0903d6b9b1df
repository: introduce register_changeset callback
Joerg Sonnenberger <joerg@bec.de>
parents:
46357
diff
changeset
|
98 |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
99 xp1, xp2 = p1.hex(), p2 and p2.hex() or b'' |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
100 repo.hook( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
101 b'pretxncommit', |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
102 throw=True, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
103 node=hex(n), |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
104 parent1=xp1, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
105 parent2=xp2, |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
106 ) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
107 # set the new commit is proper phase |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
108 targetphase = subrepoutil.newcommitphase(repo.ui, ctx) |
45757
067707e026b4
commit: don't change phases for preexisting commits
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45715
diff
changeset
|
109 |
067707e026b4
commit: don't change phases for preexisting commits
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45715
diff
changeset
|
110 # prevent unmarking changesets as public on recommit |
46357
72f5280e33b6
commit: look-up new revision once
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
111 waspublic = oldtip == repo.changelog.tiprev() and not repo[rev].phase() |
45757
067707e026b4
commit: don't change phases for preexisting commits
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45715
diff
changeset
|
112 |
067707e026b4
commit: don't change phases for preexisting commits
Dan Villiom Podlaski Christiansen <danchr@gmail.com>
parents:
45715
diff
changeset
|
113 if targetphase and not waspublic: |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
114 # retract boundary do not alter parent changeset. |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
115 # if a parent have higher the resulting phase will |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
116 # be compliant anyway |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
117 # |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
118 # if minimal phase was 0 we don't need to retract anything |
46357
72f5280e33b6
commit: look-up new revision once
Joerg Sonnenberger <joerg@bec.de>
parents:
45942
diff
changeset
|
119 phases.registernew(repo, tr, targetphase, [rev]) |
45203
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
120 return n |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
121 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
122 |
45239
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
123 def _prepare_files(tr, ctx, error=False, origctx=None): |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
124 repo = ctx.repo() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
125 p1 = ctx.p1() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
126 |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
127 writechangesetcopy, writefilecopymeta = _write_copy_meta(repo) |
45708
60c46cc28bf4
commit: pass ChangingFiles object as argument to _process_files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45707
diff
changeset
|
128 files = metadata.ChangingFiles() |
45706
b92887ce8db4
commit: move salvaged calculation a bit earlier in the function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45705
diff
changeset
|
129 ms = mergestate.mergestate.read(repo) |
b92887ce8db4
commit: move salvaged calculation a bit earlier in the function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45705
diff
changeset
|
130 salvaged = _get_salvaged(repo, ms, ctx) |
45708
60c46cc28bf4
commit: pass ChangingFiles object as argument to _process_files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45707
diff
changeset
|
131 for s in salvaged: |
60c46cc28bf4
commit: pass ChangingFiles object as argument to _process_files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45707
diff
changeset
|
132 files.mark_salvaged(s) |
45239
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
133 |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
134 narrow_files = {} |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
135 if not ctx.repo().narrowmatch().always(): |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
136 for f, e in ms.allextras().items(): |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
137 action = e.get(b'outside-narrow-merge-action') |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
138 if action is not None: |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
139 narrow_files[f] = action |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
140 if ctx.manifestnode() and not narrow_files: |
45239
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
141 # reuse an existing manifest revision |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
142 repo.ui.debug(b'reusing known manifest\n') |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
143 mn = ctx.manifestnode() |
45328
e52031f5e046
commitctx: create the ChangingFiles object directly in the various case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45327
diff
changeset
|
144 files.update_touched(ctx.files()) |
45239
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
145 if writechangesetcopy: |
45328
e52031f5e046
commitctx: create the ChangingFiles object directly in the various case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45327
diff
changeset
|
146 files.update_added(ctx.filesadded()) |
e52031f5e046
commitctx: create the ChangingFiles object directly in the various case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45327
diff
changeset
|
147 files.update_removed(ctx.filesremoved()) |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
148 elif not ctx.files() and not narrow_files: |
45239
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
149 repo.ui.debug(b'reusing manifest from p1 (no file change)\n') |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
150 mn = p1.manifestnode() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
151 else: |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
152 mn = _process_files(tr, ctx, ms, files, narrow_files, error=error) |
45239
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
153 |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
154 if origctx and origctx.manifestnode() == mn: |
45328
e52031f5e046
commitctx: create the ChangingFiles object directly in the various case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45327
diff
changeset
|
155 origfiles = origctx.files() |
e52031f5e046
commitctx: create the ChangingFiles object directly in the various case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45327
diff
changeset
|
156 assert files.touched.issubset(origfiles) |
e52031f5e046
commitctx: create the ChangingFiles object directly in the various case
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45327
diff
changeset
|
157 files.update_touched(origfiles) |
45239
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
158 |
45326
99614011892b
commitctx: directly gather p1 and p2 copies in `files`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45324
diff
changeset
|
159 if writechangesetcopy: |
99614011892b
commitctx: directly gather p1 and p2 copies in `files`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45324
diff
changeset
|
160 files.update_copies_from_p1(ctx.p1copies()) |
99614011892b
commitctx: directly gather p1 and p2 copies in `files`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45324
diff
changeset
|
161 files.update_copies_from_p2(ctx.p2copies()) |
45323
aea6a812f7cb
commitctx: return a richer object from _prepare_files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45251
diff
changeset
|
162 |
45705
61454026fa04
commit: refactor salvage calculation to a different function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45662
diff
changeset
|
163 return mn, files |
61454026fa04
commit: refactor salvage calculation to a different function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45662
diff
changeset
|
164 |
61454026fa04
commit: refactor salvage calculation to a different function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45662
diff
changeset
|
165 |
61454026fa04
commit: refactor salvage calculation to a different function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45662
diff
changeset
|
166 def _get_salvaged(repo, ms, ctx): |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
167 """returns a list of salvaged files |
45705
61454026fa04
commit: refactor salvage calculation to a different function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45662
diff
changeset
|
168 |
61454026fa04
commit: refactor salvage calculation to a different function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45662
diff
changeset
|
169 returns empty list if config option which process salvaged files are |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
170 not enabled""" |
45705
61454026fa04
commit: refactor salvage calculation to a different function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45662
diff
changeset
|
171 salvaged = [] |
61454026fa04
commit: refactor salvage calculation to a different function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45662
diff
changeset
|
172 copy_sd = repo.filecopiesmode == b'changeset-sidedata' |
45662
64a4b85c4a00
salvaged: record salvaged in ChangingFiles at commit time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45612
diff
changeset
|
173 if copy_sd and len(ctx.parents()) > 1: |
64a4b85c4a00
salvaged: record salvaged in ChangingFiles at commit time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45612
diff
changeset
|
174 if ms.active(): |
45715
0428978bca22
mergestate: add `allextras()` to get all extras
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45708
diff
changeset
|
175 for fname in sorted(ms.allextras().keys()): |
45662
64a4b85c4a00
salvaged: record salvaged in ChangingFiles at commit time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45612
diff
changeset
|
176 might_removed = ms.extras(fname).get(b'merge-removal-candidate') |
64a4b85c4a00
salvaged: record salvaged in ChangingFiles at commit time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45612
diff
changeset
|
177 if might_removed == b'yes': |
64a4b85c4a00
salvaged: record salvaged in ChangingFiles at commit time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45612
diff
changeset
|
178 if fname in ctx: |
45705
61454026fa04
commit: refactor salvage calculation to a different function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45662
diff
changeset
|
179 salvaged.append(fname) |
61454026fa04
commit: refactor salvage calculation to a different function
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45662
diff
changeset
|
180 return salvaged |
45239
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
181 |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45238
diff
changeset
|
182 |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
183 def _process_files(tr, ctx, ms, files, narrow_files=None, error=False): |
45236
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
184 repo = ctx.repo() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
185 p1 = ctx.p1() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
186 p2 = ctx.p2() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
187 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
188 writechangesetcopy, writefilecopymeta = _write_copy_meta(repo) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
189 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
190 m1ctx = p1.manifestctx() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
191 m2ctx = p2.manifestctx() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
192 mctx = m1ctx.copy() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
193 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
194 m = mctx.read() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
195 m1 = m1ctx.read() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
196 m2 = m2ctx.read() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
197 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
198 # check in files |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
199 added = [] |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
200 removed = list(ctx.removed()) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
201 linkrev = len(repo) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
202 repo.ui.note(_(b"committing files:\n")) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
203 uipathfn = scmutil.getuipathfn(repo) |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
204 all_files = ctx.modified() + ctx.added() |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
205 all_files.extend(narrow_files.keys()) |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
206 all_files.sort() |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
207 for f in all_files: |
45236
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
208 repo.ui.note(uipathfn(f) + b"\n") |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
209 if f in narrow_files: |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
210 narrow_action = narrow_files.get(f) |
48746
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
211 if narrow_action == mergestate.CHANGE_REMOVED: |
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
212 files.mark_removed(f) |
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
213 removed.append(f) |
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
214 elif narrow_action == mergestate.CHANGE_ADDED: |
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
215 files.mark_added(f) |
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
216 added.append(f) |
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
217 m[f] = m2[f] |
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
218 flags = m2ctx.find(f)[1] or b'' |
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
219 m.setflag(f, flags) |
18e69f224e4b
narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48716
diff
changeset
|
220 elif narrow_action == mergestate.CHANGE_MODIFIED: |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
221 files.mark_touched(f) |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
222 added.append(f) |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
223 m[f] = m2[f] |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
224 flags = m2ctx.find(f)[1] or b'' |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
225 m.setflag(f, flags) |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
226 else: |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
227 msg = _(b"corrupted mergestate, unknown narrow action: %b") |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
228 hint = _(b"restart the merge") |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
229 raise error.Abort(msg, hint=hint) |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
230 continue |
45236
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
231 try: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
232 fctx = ctx[f] |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
233 if fctx is None: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
234 removed.append(f) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
235 else: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
236 added.append(f) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
237 m[f], is_touched = _filecommit( |
45443
037e88d453fa
commit: pass mergestate into _filecommit() instead of re-reading it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45432
diff
changeset
|
238 repo, fctx, m1, m2, linkrev, tr, writefilecopymeta, ms |
45236
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
239 ) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
240 if is_touched: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
241 if is_touched == 'added': |
45332
54eeb1a0e325
commitctx: directly update the touched and added set of files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45331
diff
changeset
|
242 files.mark_added(f) |
45612
094a91a183f1
changing-files: record merged files at commit time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45585
diff
changeset
|
243 elif is_touched == 'merged': |
094a91a183f1
changing-files: record merged files at commit time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45585
diff
changeset
|
244 files.mark_merged(f) |
45332
54eeb1a0e325
commitctx: directly update the touched and added set of files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45331
diff
changeset
|
245 else: |
54eeb1a0e325
commitctx: directly update the touched and added set of files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45331
diff
changeset
|
246 files.mark_touched(f) |
45236
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
247 m.setflag(f, fctx.flags()) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
248 except OSError: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
249 repo.ui.warn(_(b"trouble committing %s!\n") % uipathfn(f)) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
250 raise |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
251 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
252 # update manifest |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
253 removed = [f for f in removed if f in m1 or f in m2] |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
254 drop = sorted([f for f in removed if f in m]) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
255 for f in drop: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
256 del m[f] |
45331
027f3dd76302
commitctx: directly updated the set of removed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45330
diff
changeset
|
257 if p2.rev() == nullrev: |
027f3dd76302
commitctx: directly updated the set of removed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45330
diff
changeset
|
258 files.update_removed(removed) |
027f3dd76302
commitctx: directly updated the set of removed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45330
diff
changeset
|
259 else: |
45236
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
260 rf = metadata.get_removal_filter(ctx, (p1, p2, m1, m2)) |
45331
027f3dd76302
commitctx: directly updated the set of removed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45330
diff
changeset
|
261 for f in removed: |
027f3dd76302
commitctx: directly updated the set of removed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45330
diff
changeset
|
262 if not rf(f): |
027f3dd76302
commitctx: directly updated the set of removed files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45330
diff
changeset
|
263 files.mark_removed(f) |
45236
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
264 |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
265 mn = _commit_manifest( |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
266 tr, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
267 linkrev, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
268 ctx, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
269 mctx, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
270 m, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
271 files.touched, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
272 added, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
273 drop, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
274 bool(narrow_files), |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
275 ) |
45329
dcbad0f17d76
commitctx: move ChangingFiles creation directly inside `_process_files`
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45328
diff
changeset
|
276 |
45708
60c46cc28bf4
commit: pass ChangingFiles object as argument to _process_files
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45707
diff
changeset
|
277 return mn |
45236
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
278 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45235
diff
changeset
|
279 |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
280 def _filecommit( |
45942
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
281 repo, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
282 fctx, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
283 manifest1, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
284 manifest2, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
285 linkrev, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
286 tr, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
287 includecopymeta, |
89a2afe31e82
formating: upgrade to black 20.8b1
Augie Fackler <raf@durin42.com>
parents:
45794
diff
changeset
|
288 ms, |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
289 ): |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
290 """ |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
291 commit an individual file as part of a larger transaction |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
292 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
293 input: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
294 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
295 fctx: a file context with the content we are trying to commit |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
296 manifest1: manifest of changeset first parent |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
297 manifest2: manifest of changeset second parent |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
298 linkrev: revision number of the changeset being created |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
299 tr: current transation |
45432
f52b0297acc8
commit: fix a wrong argument name in documentation
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45382
diff
changeset
|
300 includecopymeta: boolean, set to False to skip storing the copy data |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
301 (only used by the Google specific feature of using |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
302 changeset extra as copy source of truth). |
45443
037e88d453fa
commit: pass mergestate into _filecommit() instead of re-reading it
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45432
diff
changeset
|
303 ms: mergestate object |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
304 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
305 output: (filenode, touched) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
306 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
307 filenode: the filenode that should be used by this changeset |
45223
d056a131c93f
commitctx: document the None return for "touched" value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45204
diff
changeset
|
308 touched: one of: None (mean untouched), 'added' or 'modified' |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
309 """ |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
310 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
311 fname = fctx.path() |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
312 fparent1 = manifest1.get(fname, repo.nullid) |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
313 fparent2 = manifest2.get(fname, repo.nullid) |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
314 touched = None |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
315 if fparent1 == fparent2 == repo.nullid: |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
316 touched = 'added' |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
317 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
318 if isinstance(fctx, context.filectx): |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
319 # This block fast path most comparisons which are usually done. It |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
320 # assumes that bare filectx is used and no merge happened, hence no |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
321 # need to create a new file revision in this case. |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
322 node = fctx.filenode() |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
323 if node in [fparent1, fparent2]: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
324 repo.ui.debug(b'reusing %s filelog entry\n' % fname) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
325 if ( |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
326 fparent1 != repo.nullid |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
327 and manifest1.flags(fname) != fctx.flags() |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
328 ) or ( |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
329 fparent2 != repo.nullid |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
330 and manifest2.flags(fname) != fctx.flags() |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
331 ): |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
332 touched = 'modified' |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
333 return node, touched |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
334 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
335 flog = repo.file(fname) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
336 meta = {} |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
337 cfname = fctx.copysource() |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
338 fnode = None |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
339 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
340 if cfname and cfname != fname: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
341 # Mark the new revision of this file as a copy of another |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
342 # file. This copy data will effectively act as a parent |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
343 # of this new revision. If this is a merge, the first |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
344 # parent will be the nullid (meaning "look up the copy data") |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
345 # and the second one will be the other parent. For example: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
346 # |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
347 # 0 --- 1 --- 3 rev1 changes file foo |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
348 # \ / rev2 renames foo to bar and changes it |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
349 # \- 2 -/ rev3 should have bar with all changes and |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
350 # should record that bar descends from |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
351 # bar in rev2 and foo in rev1 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
352 # |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
353 # this allows this merge to succeed: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
354 # |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
355 # 0 --- 1 --- 3 rev4 reverts the content change from rev2 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
356 # \ / merging rev3 and rev4 should use bar@rev2 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
357 # \- 2 --- 4 as the merge base |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
358 # |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
359 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
360 cnode = manifest1.get(cfname) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
361 newfparent = fparent2 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
362 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
363 if manifest2: # branch merge |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
364 if ( |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
365 fparent2 == repo.nullid or cnode is None |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
366 ): # copied on remote side |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
367 if cfname in manifest2: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
368 cnode = manifest2[cfname] |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
369 newfparent = fparent1 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
370 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
371 # Here, we used to search backwards through history to try to find |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
372 # where the file copy came from if the source of a copy was not in |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
373 # the parent directory. However, this doesn't actually make sense to |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
374 # do (what does a copy from something not in your working copy even |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
375 # mean?) and it causes bugs (eg, issue4476). Instead, we will warn |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
376 # the user that copy information was dropped, so if they didn't |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
377 # expect this outcome it can be fixed, but this is the correct |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
378 # behavior in this circumstance. |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
379 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
380 if cnode: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
381 repo.ui.debug(b" %s: copy %s:%s\n" % (fname, cfname, hex(cnode))) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
382 if includecopymeta: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
383 meta[b"copy"] = cfname |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
384 meta[b"copyrev"] = hex(cnode) |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
385 fparent1, fparent2 = repo.nullid, newfparent |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
386 else: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
387 repo.ui.warn( |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
388 _( |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
389 b"warning: can't find ancestor for '%s' " |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
390 b"copied from '%s'!\n" |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
391 ) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
392 % (fname, cfname) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
393 ) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
394 |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
395 elif fparent1 == repo.nullid: |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
396 fparent1, fparent2 = fparent2, repo.nullid |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
397 elif fparent2 != repo.nullid: |
46679
d6fa9fbd375d
commit: reorder if-else conditional to give mergestate info priority
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45942
diff
changeset
|
398 if ms.active() and ms.extras(fname).get(b'filenode-source') == b'other': |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
399 fparent1, fparent2 = fparent2, repo.nullid |
46811
5a0b930cfb3e
commit: get info from mergestate whether a file was merged or not
Pulkit Goyal <7895pulkit@gmail.com>
parents:
46794
diff
changeset
|
400 elif ms.active() and ms.extras(fname).get(b'merged') != b'yes': |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
401 fparent1, fparent2 = fparent1, repo.nullid |
46679
d6fa9fbd375d
commit: reorder if-else conditional to give mergestate info priority
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45942
diff
changeset
|
402 # is one parent an ancestor of the other? |
d6fa9fbd375d
commit: reorder if-else conditional to give mergestate info priority
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45942
diff
changeset
|
403 else: |
d6fa9fbd375d
commit: reorder if-else conditional to give mergestate info priority
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45942
diff
changeset
|
404 fparentancestors = flog.commonancestorsheads(fparent1, fparent2) |
d6fa9fbd375d
commit: reorder if-else conditional to give mergestate info priority
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45942
diff
changeset
|
405 if fparent1 in fparentancestors: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
406 fparent1, fparent2 = fparent2, repo.nullid |
46679
d6fa9fbd375d
commit: reorder if-else conditional to give mergestate info priority
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45942
diff
changeset
|
407 elif fparent2 in fparentancestors: |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
408 fparent2 = repo.nullid |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
409 |
45585
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
410 force_new_node = False |
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
411 # The file might have been deleted by merge code and user explicitly choose |
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
412 # to revert the file and keep it. The other case can be where there is |
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
413 # change-delete or delete-change conflict and user explicitly choose to keep |
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
414 # the file. The goal is to create a new filenode for users explicit choices |
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
415 if ( |
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
416 repo.ui.configbool(b'experimental', b'merge-track-salvaged') |
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
417 and ms.active() |
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
418 and ms.extras(fname).get(b'merge-removal-candidate') == b'yes' |
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
419 ): |
479cce8c9882
commit: force create a new filenode if it was set in mergestate by merge
Pulkit Goyal <7895pulkit@gmail.com>
parents:
45443
diff
changeset
|
420 force_new_node = True |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
421 # is the file changed? |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
422 text = fctx.data() |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
423 if ( |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
424 fparent2 != repo.nullid |
47941
5b9de38a0356
narrow: fix commits of empty files
Valentin Gatien-Baron <vgatien-baron@janestreet.com>
parents:
47012
diff
changeset
|
425 or fparent1 == repo.nullid |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
426 or meta |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
427 or flog.cmp(fparent1, text) |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
428 or force_new_node |
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
429 ): |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
430 if touched is None: # do not overwrite added |
47012
d55b71393907
node: replace nullid and friends with nodeconstants class
Joerg Sonnenberger <joerg@bec.de>
parents:
46811
diff
changeset
|
431 if fparent2 == repo.nullid: |
45612
094a91a183f1
changing-files: record merged files at commit time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45585
diff
changeset
|
432 touched = 'modified' |
094a91a183f1
changing-files: record merged files at commit time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45585
diff
changeset
|
433 else: |
094a91a183f1
changing-files: record merged files at commit time
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45585
diff
changeset
|
434 touched = 'merged' |
45204
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
435 fnode = flog.add(text, meta, tr, linkrev, fparent1, fparent2) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
436 # are just the flags changed during merge? |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
437 elif fname in manifest1 and manifest1.flags(fname) != fctx.flags(): |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
438 touched = 'modified' |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
439 fnode = fparent1 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
440 else: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
441 fnode = fparent1 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45203
diff
changeset
|
442 return fnode, touched |
45231
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
443 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
444 |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
445 def _commit_manifest( |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
446 tr, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
447 linkrev, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
448 ctx, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
449 mctx, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
450 manifest, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
451 files, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
452 added, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
453 drop, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
454 has_some_narrow_action=False, |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
455 ): |
45231
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
456 """make a new manifest entry (or reuse a new one) |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
457 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
458 given an initialised manifest context and precomputed list of |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
459 - files: files affected by the commit |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
460 - added: new entries in the manifest |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
461 - drop: entries present in parents but absent of this one |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
462 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
463 Create a new manifest revision, reuse existing ones if possible. |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
464 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
465 Return the nodeid of the manifest revision. |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
466 """ |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
467 repo = ctx.repo() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
468 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
469 md = None |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
470 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
471 # all this is cached, so it is find to get them all from the ctx. |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
472 p1 = ctx.p1() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
473 p2 = ctx.p2() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
474 m1ctx = p1.manifestctx() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
475 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
476 m1 = m1ctx.read() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
477 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
478 if not files: |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
479 # if no "files" actually changed in terms of the changelog, |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
480 # try hard to detect unmodified manifest entry so that the |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
481 # exact same commit can be reproduced later on convert. |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
482 md = m1.diff(manifest, scmutil.matchfiles(repo, ctx.files())) |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
483 if not files and md: |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
484 repo.ui.debug( |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
485 b'not reusing manifest (no file change in ' |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
486 b'changelog, but manifest differs)\n' |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
487 ) |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
488 if files or md: |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
489 repo.ui.note(_(b"committing manifest\n")) |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
490 # we're using narrowmatch here since it's already applied at |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
491 # other stages (such as dirstate.walk), so we're already |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
492 # ignoring things outside of narrowspec in most cases. The |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
493 # one case where we might have files outside the narrowspec |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
494 # at this point is merges, and we already error out in the |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
495 # case where the merge has files outside of the narrowspec, |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
496 # so this is safe. |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
497 if has_some_narrow_action: |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
498 match = None |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
499 else: |
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
500 match = repo.narrowmatch() |
45231
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
501 mn = mctx.write( |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
502 tr, |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
503 linkrev, |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
504 p1.manifestnode(), |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
505 p2.manifestnode(), |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
506 added, |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
507 drop, |
48716
f1eb77dceb36
narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
47941
diff
changeset
|
508 match=match, |
45231
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
509 ) |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
510 else: |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
511 repo.ui.debug( |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
512 b'reusing manifest from p1 (listed files ' b'actually unchanged)\n' |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
513 ) |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
514 mn = p1.manifestnode() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
515 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45230
diff
changeset
|
516 return mn |
45249
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
517 |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
518 |
45323
aea6a812f7cb
commitctx: return a richer object from _prepare_files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45251
diff
changeset
|
519 def _extra_with_copies(repo, extra, files): |
45249
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
520 """encode copy information into a `extra` dictionnary""" |
45323
aea6a812f7cb
commitctx: return a richer object from _prepare_files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45251
diff
changeset
|
521 p1copies = files.copied_from_p1 |
aea6a812f7cb
commitctx: return a richer object from _prepare_files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45251
diff
changeset
|
522 p2copies = files.copied_from_p2 |
aea6a812f7cb
commitctx: return a richer object from _prepare_files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45251
diff
changeset
|
523 filesadded = files.added |
aea6a812f7cb
commitctx: return a richer object from _prepare_files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45251
diff
changeset
|
524 filesremoved = files.removed |
aea6a812f7cb
commitctx: return a richer object from _prepare_files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45251
diff
changeset
|
525 files = sorted(files.touched) |
45251
0041a42c6f28
commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45250
diff
changeset
|
526 if not _write_copy_meta(repo)[1]: |
0041a42c6f28
commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45250
diff
changeset
|
527 # If writing only to changeset extras, use None to indicate that |
0041a42c6f28
commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45250
diff
changeset
|
528 # no entry should be written. If writing to both, write an empty |
0041a42c6f28
commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45250
diff
changeset
|
529 # entry to prevent the reader from falling back to reading |
0041a42c6f28
commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45250
diff
changeset
|
530 # filelogs. |
0041a42c6f28
commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45250
diff
changeset
|
531 p1copies = p1copies or None |
0041a42c6f28
commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45250
diff
changeset
|
532 p2copies = p2copies or None |
0041a42c6f28
commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45250
diff
changeset
|
533 filesadded = filesadded or None |
0041a42c6f28
commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45250
diff
changeset
|
534 filesremoved = filesremoved or None |
0041a42c6f28
commitctx: gather more code dealing with copy-in-extra
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45250
diff
changeset
|
535 |
45249
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
536 extrasentries = p1copies, p2copies, filesadded, filesremoved |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
537 if extra is None and any(x is not None for x in extrasentries): |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
538 extra = {} |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
539 if p1copies is not None: |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
540 p1copies = metadata.encodecopies(files, p1copies) |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
541 extra[b'p1copies'] = p1copies |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
542 if p2copies is not None: |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
543 p2copies = metadata.encodecopies(files, p2copies) |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
544 extra[b'p2copies'] = p2copies |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
545 if filesadded is not None: |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
546 filesadded = metadata.encodefileindices(files, filesadded) |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
547 extra[b'filesadded'] = filesadded |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
548 if filesremoved is not None: |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
549 filesremoved = metadata.encodefileindices(files, filesremoved) |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
550 extra[b'filesremoved'] = filesremoved |
b3040b6739ce
commitctx: extract copy information encoding into extra into commit.py
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45248
diff
changeset
|
551 return extra |