Mercurial > hg
annotate hgext/censor.py @ 51502:a5d8f261b716 stable
obsutil: sort metadata before comparing in geteffectflag()
This is probably less important now that we dropped Python 2. We do still
support Python 3.6 though, and the dictionaries aren't ordered there either
(that was a big change that came with 3.7).
Still, maybe it's a good idea to sort metadata explicitly.
author | Anton Shestakov <av6@dwimlabs.net> |
---|---|
date | Wed, 13 Mar 2024 16:22:13 -0300 |
parents | ceeb8fa23cc8 |
children | cd72a88c5599 |
rev | line source |
---|---|
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
1 # Copyright (C) 2015 - Mike Edgar <adgar@google.com> |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
2 # |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
3 # This extension enables removal of file content at a given revision, |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
4 # rewriting the data/metadata of successive revisions to preserve revision log |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
5 # integrity. |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
6 |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
7 """erase file content at a given revision |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
8 |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
9 The censor command instructs Mercurial to erase all content of a file at a given |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
10 revision *without updating the changeset hash.* This allows existing history to |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
11 remain valid while preventing future clones/pulls from receiving the erased |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
12 data. |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
13 |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
14 Typical uses for censor are due to security or legal requirements, including:: |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
15 |
26781
1aee2ab0f902
spelling: trivial spell checking
Mads Kiilerich <madski@unity3d.com>
parents:
26587
diff
changeset
|
16 * Passwords, private keys, cryptographic material |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
17 * Licensed data/code/libraries for which the license has expired |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
18 * Personally Identifiable Information or other private data |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
19 |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
20 Censored nodes can interrupt mercurial's typical operation whenever the excised |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
21 data needs to be materialized. Some commands, like ``hg cat``/``hg revert``, |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
22 simply fail when asked to produce censored data. Others, like ``hg verify`` and |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
23 ``hg update``, must be capable of tolerating censored data to continue to |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
24 function in a meaningful way. Such commands only tolerate censored file |
51266
51056bedbe0d
censor: mention that we check the heads in the help
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
25 As having a censored version in a checkout is impractical. The current head |
51056bedbe0d
censor: mention that we check the heads in the help
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
26 revisions of the repository are checked. If the revision to be censored is in |
51056bedbe0d
censor: mention that we check the heads in the help
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
48875
diff
changeset
|
27 any of them the command will abort. |
43434
bec734015b70
censor: document that some commands simply ignore censored data
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43077
diff
changeset
|
28 |
bec734015b70
censor: document that some commands simply ignore censored data
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43077
diff
changeset
|
29 A few informative commands such as ``hg grep`` will unconditionally |
bec734015b70
censor: document that some commands simply ignore censored data
Jordi Gutiérrez Hermoso <jordigh@octave.org>
parents:
43077
diff
changeset
|
30 ignore censored data and merely report that it was encountered. |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
31 """ |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
32 |
28092
5166b7a84b72
censor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27290
diff
changeset
|
33 |
5166b7a84b72
censor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27290
diff
changeset
|
34 from mercurial.i18n import _ |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
35 from mercurial.node import short |
28092
5166b7a84b72
censor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27290
diff
changeset
|
36 |
5166b7a84b72
censor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27290
diff
changeset
|
37 from mercurial import ( |
5166b7a84b72
censor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27290
diff
changeset
|
38 error, |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32315
diff
changeset
|
39 registrar, |
28092
5166b7a84b72
censor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27290
diff
changeset
|
40 scmutil, |
5166b7a84b72
censor: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
27290
diff
changeset
|
41 ) |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
42 |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
43 cmdtable = {} |
32337
46ba2cdda476
registrar: move cmdutil.command to registrar module (API)
Yuya Nishihara <yuya@tcha.org>
parents:
32315
diff
changeset
|
44 command = registrar.command(cmdtable) |
29841
d5883fd055c6
extensions: change magic "shipped with hg" string
Augie Fackler <augie@google.com>
parents:
28092
diff
changeset
|
45 # Note for extension authors: ONLY specify testedwith = 'ships-with-hg-core' for |
25186
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24890
diff
changeset
|
46 # extensions which SHIP WITH MERCURIAL. Non-mainline extensions should |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24890
diff
changeset
|
47 # be specifying the version(s) of Mercurial they are tested with, or |
80c5b2666a96
extensions: document that `testedwith = 'internal'` is special
Augie Fackler <augie@google.com>
parents:
24890
diff
changeset
|
48 # leave the attribute unspecified. |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
49 testedwith = b'ships-with-hg-core' |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
50 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
51 |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
52 @command( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
53 b'censor', |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
54 [ |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
55 ( |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
56 b'r', |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
57 b'rev', |
51270
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
58 [], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
59 _(b'censor file from specified revision'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
60 _(b'REV'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
61 ), |
51268
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
62 ( |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
63 b'', |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
64 b'check-heads', |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
65 True, |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
66 _(b'check that repository heads are not affected'), |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
67 ), |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
68 (b't', b'tombstone', b'', _(b'replacement tombstone data'), _(b'TEXT')), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
69 ], |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
70 _(b'-r REV [-t TEXT] [FILE]'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
71 helpcategory=command.CATEGORY_MAINTENANCE, |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
72 ) |
51270
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
73 def censor(ui, repo, path, rev=(), tombstone=b'', check_heads=True, **opts): |
38441
e219e355e088
censor: use context manager for lock management
Matt Harbison <matt_harbison@yahoo.com>
parents:
37442
diff
changeset
|
74 with repo.wlock(), repo.lock(): |
51268
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
75 return _docensor( |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
76 ui, |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
77 repo, |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
78 path, |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
79 rev, |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
80 tombstone, |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
81 check_heads=check_heads, |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
82 **opts, |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
83 ) |
27290
525d9b3f0a31
censor: make censor acquire locks before processing
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
26781
diff
changeset
|
84 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
85 |
51270
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
86 def _docensor(ui, repo, path, revs=(), tombstone=b'', check_heads=True, **opts): |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
87 if not path: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
88 raise error.Abort(_(b'must specify file path to censor')) |
51270
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
89 if not revs: |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
90 raise error.Abort(_(b'must specify revisions to censor')) |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
91 |
25806
5e18f6e39006
censor: make various path forms available like other Mercurial commands
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25660
diff
changeset
|
92 wctx = repo[None] |
5e18f6e39006
censor: make various path forms available like other Mercurial commands
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25660
diff
changeset
|
93 |
5e18f6e39006
censor: make various path forms available like other Mercurial commands
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25660
diff
changeset
|
94 m = scmutil.match(wctx, (path,)) |
5e18f6e39006
censor: make various path forms available like other Mercurial commands
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25660
diff
changeset
|
95 if m.anypats() or len(m.files()) != 1: |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
96 raise error.Abort(_(b'can only specify an explicit filename')) |
25806
5e18f6e39006
censor: make various path forms available like other Mercurial commands
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents:
25660
diff
changeset
|
97 path = m.files()[0] |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
98 flog = repo.file(path) |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
99 if not len(flog): |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
100 raise error.Abort(_(b'cannot censor file with no history')) |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
101 |
51270
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
102 revs = scmutil.revrange(repo, revs) |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
103 if not revs: |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
104 raise error.Abort(_(b'no matching revisions')) |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
105 file_nodes = set() |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
106 for r in revs: |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
107 try: |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
108 ctx = repo[r] |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
109 file_nodes.add(ctx.filectx(path).filenode()) |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
110 except error.LookupError: |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
111 raise error.Abort(_(b'file does not exist at revision %s') % ctx) |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
112 |
51268
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
113 if check_heads: |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
114 heads = [] |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
115 repo_heads = repo.heads() |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
116 msg = b'checking for the censored content in %d heads\n' |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
117 msg %= len(repo_heads) |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
118 ui.status(msg) |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
119 for headnode in repo_heads: |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
120 hc = repo[headnode] |
51270
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
121 if path in hc and hc.filenode(path) in file_nodes: |
51268
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
122 heads.append(hc) |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
123 if heads: |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
124 headlist = b', '.join([short(c.node()) for c in heads]) |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
125 raise error.Abort( |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
126 _(b'cannot censor file in heads (%s)') % headlist, |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
127 hint=_(b'clean/delete and commit first'), |
622f00b350be
censor: add a command flag to skip the head checks
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51267
diff
changeset
|
128 ) |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
129 |
51269
db121ddd171e
censor: be more verbose about the other steps too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51268
diff
changeset
|
130 msg = b'checking for the censored content in the working directory\n' |
db121ddd171e
censor: be more verbose about the other steps too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51268
diff
changeset
|
131 ui.status(msg) |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
132 wp = wctx.parents() |
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
133 if ctx.node() in [p.node() for p in wp]: |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
134 raise error.Abort( |
43077
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
135 _(b'cannot censor working directory'), |
687b865b95ad
formatting: byteify all mercurial/ and hgext/ string literals
Augie Fackler <augie@google.com>
parents:
43076
diff
changeset
|
136 hint=_(b'clean/delete/update first'), |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
40293
diff
changeset
|
137 ) |
24347
1bcfecbbf569
censor: add censor command to hgext with basic client-side tests
Mike Edgar <adgar@google.com>
parents:
diff
changeset
|
138 |
51270
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
139 msg = b'censoring %d file revisions\n' |
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
140 msg %= len(file_nodes) |
51269
db121ddd171e
censor: be more verbose about the other steps too
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51268
diff
changeset
|
141 ui.status(msg) |
39778
a6b3c4c1019f
revlog: move censor logic out of censor extension
Gregory Szorc <gregory.szorc@gmail.com>
parents:
39661
diff
changeset
|
142 with repo.transaction(b'censor') as tr: |
51270
ceeb8fa23cc8
censor: accept multiple revision in a single call
Pierre-Yves David <pierre-yves.david@octobus.net>
parents:
51269
diff
changeset
|
143 flog.censorrevision(tr, file_nodes, tombstone=tombstone) |