Mercurial > hg
comparison mercurial/commit.py @ 45233:ada51c1b6916
commitctx: move copy meta config reading in a dedicated function
The logic is non trivial, make it contained in a function is clearer. It also
unlock easy re-use of that logic without having the pass the value around.
author | Pierre-Yves David <pierre-yves.david@octobus.net> |
---|---|
date | Thu, 23 Jul 2020 21:09:42 +0200 |
parents | 4eb6466e6889 |
children | 595307e14140 |
comparison
equal
deleted
inserted
replaced
45232:4eb6466e6889 | 45233:ada51c1b6916 |
---|---|
22 scmutil, | 22 scmutil, |
23 subrepoutil, | 23 subrepoutil, |
24 ) | 24 ) |
25 | 25 |
26 | 26 |
27 def commitctx(repo, ctx, error=False, origctx=None): | 27 def _write_copy_meta(repo): |
28 """Add a new revision to the target repository. | 28 """return a (changelog, filelog) boolean tuple |
29 Revision information is passed via the context argument. | 29 |
30 | 30 changelog: copy related information should be stored in the changeset |
31 ctx.files() should list all files involved in this commit, i.e. | 31 filelof: copy related information should be written in the file revision |
32 modified/added/removed files. On merge, it may be wider than the | 32 """ |
33 ctx.files() to be committed, since any file nodes derived directly | |
34 from p1 or p2 are excluded from the committed ctx.files(). | |
35 | |
36 origctx is for convert to work around the problem that bug | |
37 fixes to the files list in changesets change hashes. For | |
38 convert to be the identity, it can pass an origctx and this | |
39 function will use the same files list when it makes sense to | |
40 do so. | |
41 """ | |
42 repo = repo.unfiltered() | |
43 | |
44 p1, p2 = ctx.p1(), ctx.p2() | |
45 user = ctx.user() | |
46 | |
47 if repo.filecopiesmode == b'changeset-sidedata': | 33 if repo.filecopiesmode == b'changeset-sidedata': |
48 writechangesetcopy = True | 34 writechangesetcopy = True |
49 writefilecopymeta = True | 35 writefilecopymeta = True |
50 else: | 36 else: |
51 writecopiesto = repo.ui.config(b'experimental', b'copies.write-to') | 37 writecopiesto = repo.ui.config(b'experimental', b'copies.write-to') |
52 writefilecopymeta = writecopiesto != b'changeset-only' | 38 writefilecopymeta = writecopiesto != b'changeset-only' |
53 writechangesetcopy = writecopiesto in ( | 39 writechangesetcopy = writecopiesto in ( |
54 b'changeset-only', | 40 b'changeset-only', |
55 b'compatibility', | 41 b'compatibility', |
56 ) | 42 ) |
43 return writechangesetcopy, writefilecopymeta | |
44 | |
45 | |
46 def commitctx(repo, ctx, error=False, origctx=None): | |
47 """Add a new revision to the target repository. | |
48 Revision information is passed via the context argument. | |
49 | |
50 ctx.files() should list all files involved in this commit, i.e. | |
51 modified/added/removed files. On merge, it may be wider than the | |
52 ctx.files() to be committed, since any file nodes derived directly | |
53 from p1 or p2 are excluded from the committed ctx.files(). | |
54 | |
55 origctx is for convert to work around the problem that bug | |
56 fixes to the files list in changesets change hashes. For | |
57 convert to be the identity, it can pass an origctx and this | |
58 function will use the same files list when it makes sense to | |
59 do so. | |
60 """ | |
61 repo = repo.unfiltered() | |
62 | |
63 p1, p2 = ctx.p1(), ctx.p2() | |
64 user = ctx.user() | |
65 | |
66 writechangesetcopy, writefilecopymeta = _write_copy_meta(repo) | |
67 | |
57 p1copies, p2copies = None, None | 68 p1copies, p2copies = None, None |
58 if writechangesetcopy: | 69 if writechangesetcopy: |
59 p1copies = ctx.p1copies() | 70 p1copies = ctx.p1copies() |
60 p2copies = ctx.p2copies() | 71 p2copies = ctx.p2copies() |
61 filesadded, filesremoved = None, None | 72 filesadded, filesremoved = None, None |