Mercurial > public > mercurial-scm > hg-stable
annotate mercurial/commit.py @ 45274:4cde23ba076e
commitctx: create the new extra dict on its own line
A trivial move to make the next changeset easier to read.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Sat, 25 Jul 2020 14:59:55 +0200 |
parents | e15416c95b25 |
children | b3040b6739ce |
rev | line source |
---|---|
45239
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 from __future__ import absolute_import |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
7 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
8 import errno |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
9 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
10 from .i18n import _ |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
11 from .node import ( |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
12 hex, |
45240
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
13 nullid, |
45239
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
14 nullrev, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
15 ) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
16 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
17 from . import ( |
45240
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
18 context, |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
19 mergestate, |
45239
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
20 metadata, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
21 phases, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
22 scmutil, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
23 subrepoutil, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
24 ) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
25 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
26 |
45260
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
27 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:
45259
diff
changeset
|
28 """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:
45259
diff
changeset
|
29 |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
30 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:
45259
diff
changeset
|
31 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:
45259
diff
changeset
|
32 """ |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
33 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:
45259
diff
changeset
|
34 writechangesetcopy = True |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
35 writefilecopymeta = True |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
36 else: |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
37 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:
45259
diff
changeset
|
38 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:
45259
diff
changeset
|
39 writechangesetcopy = writecopiesto in ( |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
40 b'changeset-only', |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
41 b'compatibility', |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
42 ) |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
43 return writechangesetcopy, writefilecopymeta |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
44 |
ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45259
diff
changeset
|
45 |
45239
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
46 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
|
47 """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
|
48 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
|
49 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
50 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
|
51 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
|
52 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
|
53 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
|
54 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
55 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
|
56 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
|
57 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
|
58 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
|
59 do so. |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
60 """ |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
61 repo = repo.unfiltered() |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
62 |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
63 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
|
64 user = ctx.user() |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
65 |
45265
bd7515273fd6
commitctx: gather more preparation code within the lock context
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45264
diff
changeset
|
66 with repo.lock(), repo.transaction(b"commit") as tr: |
45266
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
67 r = _prepare_files(tr, ctx, error=error, origctx=origctx) |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
68 mn, files, p1copies, p2copies, filesadded, filesremoved = r |
45239
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
69 |
45274
4cde23ba076e
commitctx: create the new extra dict on its own line
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45273
diff
changeset
|
70 extra = ctx.extra().copy() |
4cde23ba076e
commitctx: create the new extra dict on its own line
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45273
diff
changeset
|
71 |
45239
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
72 # update changelog |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
73 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
|
74 repo.changelog.delayupdate(tr) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
75 n = repo.changelog.add( |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
76 mn, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
77 files, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
78 ctx.description(), |
45257
5d0998ccedbb
commitctx: stop using weakref proxy for transaction
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45256
diff
changeset
|
79 tr, |
45239
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
80 p1.node(), |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
81 p2.node(), |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
82 user, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
83 ctx.date(), |
45274
4cde23ba076e
commitctx: create the new extra dict on its own line
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45273
diff
changeset
|
84 extra, |
45239
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
85 p1copies, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
86 p2copies, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
87 filesadded, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
88 filesremoved, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
89 ) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
90 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
|
91 repo.hook( |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
92 b'pretxncommit', throw=True, node=hex(n), parent1=xp1, parent2=xp2, |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
93 ) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
94 # 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
|
95 targetphase = subrepoutil.newcommitphase(repo.ui, ctx) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
96 if targetphase: |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
97 # 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
|
98 # 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
|
99 # be compliant anyway |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
100 # |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
101 # if minimal phase was 0 we don't need to retract anything |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
102 phases.registernew(repo, tr, targetphase, [n]) |
ae5c1a3bc339
commitctx: extract the function in a dedicated module
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
diff
changeset
|
103 return n |
45240
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
104 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
105 |
45266
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
106 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:
45265
diff
changeset
|
107 repo = ctx.repo() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
108 p1 = ctx.p1() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
109 |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
110 writechangesetcopy, writefilecopymeta = _write_copy_meta(repo) |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
111 |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
112 p1copies, p2copies = None, None |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
113 if writechangesetcopy: |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
114 p1copies = ctx.p1copies() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
115 p2copies = ctx.p2copies() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
116 filesadded, filesremoved = None, None |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
117 if ctx.manifestnode(): |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
118 # 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:
45265
diff
changeset
|
119 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:
45265
diff
changeset
|
120 mn = ctx.manifestnode() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
121 files = ctx.files() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
122 if writechangesetcopy: |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
123 filesadded = ctx.filesadded() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
124 filesremoved = ctx.filesremoved() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
125 elif not ctx.files(): |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
126 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:
45265
diff
changeset
|
127 mn = p1.manifestnode() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
128 files = [] |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
129 else: |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
130 mn, files, added, removed = _process_files(tr, ctx, error=error) |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
131 if writechangesetcopy: |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
132 filesremoved = removed |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
133 filesadded = added |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
134 |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
135 if origctx and origctx.manifestnode() == mn: |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
136 files = origctx.files() |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
137 |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
138 if not writefilecopymeta: |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
139 # If writing only to changeset extras, use None to indicate that |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
140 # no entry should be written. If writing to both, write an empty |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
141 # entry to prevent the reader from falling back to reading |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
142 # filelogs. |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
143 p1copies = p1copies or None |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
144 p2copies = p2copies or None |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
145 filesadded = filesadded or None |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
146 filesremoved = filesremoved or None |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
147 |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
148 return mn, files, p1copies, p2copies, filesadded, filesremoved |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
149 |
13814622b3b1
commitctx: extract all the file preparation logic in a new function
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45265
diff
changeset
|
150 |
45263
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
151 def _process_files(tr, ctx, error=False): |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
152 repo = ctx.repo() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
153 p1 = ctx.p1() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
154 p2 = ctx.p2() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
155 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
156 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:
45262
diff
changeset
|
157 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
158 m1ctx = p1.manifestctx() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
159 m2ctx = p2.manifestctx() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
160 mctx = m1ctx.copy() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
161 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
162 m = mctx.read() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
163 m1 = m1ctx.read() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
164 m2 = m2ctx.read() |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
165 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
166 # check in files |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
167 added = [] |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
168 filesadded = [] |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
169 removed = list(ctx.removed()) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
170 touched = [] |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
171 linkrev = len(repo) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
172 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:
45262
diff
changeset
|
173 uipathfn = scmutil.getuipathfn(repo) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
174 for f in sorted(ctx.modified() + ctx.added()): |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
175 repo.ui.note(uipathfn(f) + b"\n") |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
176 try: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
177 fctx = ctx[f] |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
178 if fctx is None: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
179 removed.append(f) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
180 else: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
181 added.append(f) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
182 m[f], is_touched = _filecommit( |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
183 repo, fctx, m1, m2, linkrev, tr, writefilecopymeta, |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
184 ) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
185 if is_touched: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
186 touched.append(f) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
187 if is_touched == 'added': |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
188 filesadded.append(f) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
189 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:
45262
diff
changeset
|
190 except OSError: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
191 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:
45262
diff
changeset
|
192 raise |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
193 except IOError as inst: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
194 errcode = getattr(inst, 'errno', errno.ENOENT) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
195 if error or errcode and errcode != errno.ENOENT: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
196 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:
45262
diff
changeset
|
197 raise |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
198 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
199 # update manifest |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
200 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:
45262
diff
changeset
|
201 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:
45262
diff
changeset
|
202 for f in drop: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
203 del m[f] |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
204 if p2.rev() != nullrev: |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
205 rf = metadata.get_removal_filter(ctx, (p1, p2, m1, m2)) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
206 removed = [f for f in removed if not rf(f)] |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
207 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
208 touched.extend(removed) |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
209 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
210 files = touched |
45273
e15416c95b25
commitctx: explicitly pass `manifest` to _commit_manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45266
diff
changeset
|
211 mn = _commit_manifest(tr, linkrev, ctx, mctx, m, files, added, drop) |
45263
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
212 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
213 return mn, files, filesadded, removed |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
214 |
0c468fef09b3
commitctx: extract all the manual logic to process the files
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45262
diff
changeset
|
215 |
45240
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
216 def _filecommit( |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
217 repo, fctx, manifest1, manifest2, linkrev, tr, includecopymeta, |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
218 ): |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
219 """ |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
220 commit an individual file as part of a larger transaction |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
221 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
222 input: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
223 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
224 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:
45239
diff
changeset
|
225 manifest1: manifest of changeset first parent |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
226 manifest2: manifest of changeset second parent |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
227 linkrev: revision number of the changeset being created |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
228 tr: current transation |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
229 individual: boolean, set to False to skip storing the copy data |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
230 (only used by the Google specific feature of using |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
231 changeset extra as copy source of truth). |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
232 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
233 output: (filenode, touched) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
234 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
235 filenode: the filenode that should be used by this changeset |
45256
d056a131c93f
commitctx: document the None return for "touched" value
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45240
diff
changeset
|
236 touched: one of: None (mean untouched), 'added' or 'modified' |
45240
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
237 """ |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
238 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
239 fname = fctx.path() |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
240 fparent1 = manifest1.get(fname, nullid) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
241 fparent2 = manifest2.get(fname, nullid) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
242 touched = None |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
243 if fparent1 == fparent2 == nullid: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
244 touched = 'added' |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
245 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
246 if isinstance(fctx, context.filectx): |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
247 # 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:
45239
diff
changeset
|
248 # 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:
45239
diff
changeset
|
249 # need to create a new file revision in this case. |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
250 node = fctx.filenode() |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
251 if node in [fparent1, fparent2]: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
252 repo.ui.debug(b'reusing %s filelog entry\n' % fname) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
253 if ( |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
254 fparent1 != nullid and manifest1.flags(fname) != fctx.flags() |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
255 ) or ( |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
256 fparent2 != nullid and manifest2.flags(fname) != fctx.flags() |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
257 ): |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
258 touched = 'modified' |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
259 return node, touched |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
260 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
261 flog = repo.file(fname) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
262 meta = {} |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
263 cfname = fctx.copysource() |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
264 fnode = None |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
265 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
266 if cfname and cfname != fname: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
267 # 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:
45239
diff
changeset
|
268 # file. This copy data will effectively act as a parent |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
269 # 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:
45239
diff
changeset
|
270 # 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:
45239
diff
changeset
|
271 # 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:
45239
diff
changeset
|
272 # |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
273 # 0 --- 1 --- 3 rev1 changes file foo |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
274 # \ / rev2 renames foo to bar and changes it |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
275 # \- 2 -/ rev3 should have bar with all changes and |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
276 # should record that bar descends from |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
277 # bar in rev2 and foo in rev1 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
278 # |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
279 # this allows this merge to succeed: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
280 # |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
281 # 0 --- 1 --- 3 rev4 reverts the content change from rev2 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
282 # \ / merging rev3 and rev4 should use bar@rev2 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
283 # \- 2 --- 4 as the merge base |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
284 # |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
285 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
286 cnode = manifest1.get(cfname) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
287 newfparent = fparent2 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
288 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
289 if manifest2: # branch merge |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
290 if fparent2 == nullid or cnode is None: # copied on remote side |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
291 if cfname in manifest2: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
292 cnode = manifest2[cfname] |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
293 newfparent = fparent1 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
294 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
295 # 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:
45239
diff
changeset
|
296 # 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:
45239
diff
changeset
|
297 # 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:
45239
diff
changeset
|
298 # 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:
45239
diff
changeset
|
299 # 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:
45239
diff
changeset
|
300 # 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:
45239
diff
changeset
|
301 # 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:
45239
diff
changeset
|
302 # behavior in this circumstance. |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
303 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
304 if cnode: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
305 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:
45239
diff
changeset
|
306 if includecopymeta: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
307 meta[b"copy"] = cfname |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
308 meta[b"copyrev"] = hex(cnode) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
309 fparent1, fparent2 = nullid, newfparent |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
310 else: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
311 repo.ui.warn( |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
312 _( |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
313 b"warning: can't find ancestor for '%s' " |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
314 b"copied from '%s'!\n" |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
315 ) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
316 % (fname, cfname) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
317 ) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
318 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
319 elif fparent1 == nullid: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
320 fparent1, fparent2 = fparent2, nullid |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
321 elif fparent2 != nullid: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
322 # is one parent an ancestor of the other? |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
323 fparentancestors = flog.commonancestorsheads(fparent1, fparent2) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
324 if fparent1 in fparentancestors: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
325 fparent1, fparent2 = fparent2, nullid |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
326 elif fparent2 in fparentancestors: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
327 fparent2 = nullid |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
328 elif not fparentancestors: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
329 # TODO: this whole if-else might be simplified much more |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
330 ms = mergestate.mergestate.read(repo) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
331 if ( |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
332 fname in ms |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
333 and ms[fname] == mergestate.MERGE_RECORD_MERGED_OTHER |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
334 ): |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
335 fparent1, fparent2 = fparent2, nullid |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
336 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
337 # is the file changed? |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
338 text = fctx.data() |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
339 if fparent2 != nullid or meta or flog.cmp(fparent1, text): |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
340 if touched is None: # do not overwrite added |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
341 touched = 'modified' |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
342 fnode = flog.add(text, meta, tr, linkrev, fparent1, fparent2) |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
343 # are just the flags changed during merge? |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
344 elif fname in manifest1 and manifest1.flags(fname) != fctx.flags(): |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
345 touched = 'modified' |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
346 fnode = fparent1 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
347 else: |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
348 fnode = fparent1 |
ce9ee81df9ff
commitctx: extract _filecommit too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45239
diff
changeset
|
349 return fnode, touched |
45258
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
350 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
351 |
45273
e15416c95b25
commitctx: explicitly pass `manifest` to _commit_manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45266
diff
changeset
|
352 def _commit_manifest(tr, linkrev, ctx, mctx, manifest, files, added, drop): |
45258
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
353 """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:
45257
diff
changeset
|
354 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
355 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:
45257
diff
changeset
|
356 - 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:
45257
diff
changeset
|
357 - 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:
45257
diff
changeset
|
358 - 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:
45257
diff
changeset
|
359 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
360 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:
45257
diff
changeset
|
361 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
362 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:
45257
diff
changeset
|
363 """ |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
364 repo = ctx.repo() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
365 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
366 md = None |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
367 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
368 # 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:
45257
diff
changeset
|
369 p1 = ctx.p1() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
370 p2 = ctx.p2() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
371 m1ctx = p1.manifestctx() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
372 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
373 m1 = m1ctx.read() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
374 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
375 if not files: |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
376 # 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:
45257
diff
changeset
|
377 # 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:
45257
diff
changeset
|
378 # 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:
45257
diff
changeset
|
379 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:
45257
diff
changeset
|
380 if not files and md: |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
381 repo.ui.debug( |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
382 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:
45257
diff
changeset
|
383 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:
45257
diff
changeset
|
384 ) |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
385 if files or md: |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
386 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:
45257
diff
changeset
|
387 # 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:
45257
diff
changeset
|
388 # 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:
45257
diff
changeset
|
389 # 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:
45257
diff
changeset
|
390 # 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:
45257
diff
changeset
|
391 # 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:
45257
diff
changeset
|
392 # 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:
45257
diff
changeset
|
393 # so this is safe. |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
394 mn = mctx.write( |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
395 tr, |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
396 linkrev, |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
397 p1.manifestnode(), |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
398 p2.manifestnode(), |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
399 added, |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
400 drop, |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
401 match=repo.narrowmatch(), |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
402 ) |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
403 else: |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
404 repo.ui.debug( |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
405 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:
45257
diff
changeset
|
406 ) |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
407 mn = p1.manifestnode() |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
408 |
f0d4d1343cb4
commitctx: extract the function that commit a new manifest
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
45257
diff
changeset
|
409 return mn |