mirror of
https://github.com/newren/git-filter-repo.git
synced 2024-06-03 10:55:20 +02:00
filter-repo: add new --replace-message option
Like --replace-text, add an option --replace-message which replaces text in commit/tag message bodies, so that users can easily replace text without constructing a --message-callback. Signed-off-by: Gwyneth Morgan <gwymor@tilde.club> Signed-off-by: Elijah Newren <newren@gmail.com>
This commit is contained in:
parent
c5af37f82c
commit
129a3bcb8b
|
@ -181,6 +181,11 @@ Renaming of refs (see also --refname-callback)
|
|||
Filtering of commit messages (see also --message-callback)
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
--replace-message <expressions_file>::
|
||||
A file with expressions that, if found in commit or tag
|
||||
messages, will be replaced. This file uses the same syntax as
|
||||
--replace-text.
|
||||
|
||||
--preserve-commit-hashes::
|
||||
By default, since commits are rewritten and thus gain new
|
||||
hashes, references to old commit hashes in commit messages are
|
||||
|
@ -896,6 +901,26 @@ YYYY-MM-DD. In the expressions file, there are a few things to note:
|
|||
|
||||
See also the `--blob-callback` from <<CALLBACKS>>.
|
||||
|
||||
Updating commit/tag messages
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
If you want to modify commit or tag messages, you can do so with the
|
||||
same syntax as `--replace-text`, explained above. For example, with a
|
||||
file named expressions.txt containing
|
||||
|
||||
--------------------------------------------------
|
||||
foo==>bar
|
||||
--------------------------------------------------
|
||||
|
||||
then running
|
||||
--------------------------------------------------
|
||||
git filter-repo --replace-message expressions.txt
|
||||
--------------------------------------------------
|
||||
|
||||
will replace `foo` in commit or tag messages with `bar`.
|
||||
|
||||
See also the `--message-callback` from <<CALLBACKS>>.
|
||||
|
||||
Refname based filtering
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
|
|
@ -1843,6 +1843,10 @@ EXAMPLES
|
|||
|
||||
messages = parser.add_argument_group(title=_("Filtering of commit messages "
|
||||
"(see also --message-callback)"))
|
||||
messages.add_argument('--replace-message', metavar='EXPRESSIONS_FILE',
|
||||
help=_("A file with expressions that, if found in commit messages, "
|
||||
"will be replaced. This file uses the same syntax as "
|
||||
"--replace-text."))
|
||||
messages.add_argument('--preserve-commit-hashes', action='store_true',
|
||||
help=_("By default, since commits are rewritten and thus gain new "
|
||||
"hashes, references to old commit hashes in commit messages "
|
||||
|
@ -2189,6 +2193,8 @@ EXAMPLES
|
|||
args.mailmap = MailmapInfo(args.mailmap)
|
||||
if args.replace_text:
|
||||
args.replace_text = FilteringOptions.get_replace_text(args.replace_text)
|
||||
if args.replace_message:
|
||||
args.replace_message = FilteringOptions.get_replace_text(args.replace_message)
|
||||
if args.strip_blobs_with_ids:
|
||||
with open(args.strip_blobs_with_ids, 'br') as f:
|
||||
args.strip_blobs_with_ids = set(f.read().split())
|
||||
|
@ -3374,6 +3380,11 @@ class RepoFilter(object):
|
|||
if not self._args.preserve_commit_hashes:
|
||||
commit.message = self._hash_re.sub(self._translate_commit_hash,
|
||||
commit.message)
|
||||
if self._args.replace_message:
|
||||
for literal, replacement in self._args.replace_message['literals']:
|
||||
commit.message = commit.message.replace(literal, replacement)
|
||||
for regex, replacement in self._args.replace_message['regexes']:
|
||||
commit.message = regex.sub(replacement, commit.message)
|
||||
if self._message_callback:
|
||||
commit.message = self._message_callback(commit.message)
|
||||
|
||||
|
@ -3474,6 +3485,11 @@ class RepoFilter(object):
|
|||
|
||||
def _tweak_tag(self, tag):
|
||||
# Tweak the tag message according to callbacks
|
||||
if self._args.replace_message:
|
||||
for literal, replacement in self._args.replace_message['literals']:
|
||||
tag.message = tag.message.replace(literal, replacement)
|
||||
for regex, replacement in self._args.replace_message['regexes']:
|
||||
tag.message = regex.sub(replacement, tag.message)
|
||||
if self._message_callback:
|
||||
tag.message = self._message_callback(tag.message)
|
||||
|
||||
|
|
|
@ -39,6 +39,7 @@ filter_testcase basic basic-filename --invert-paths --path-glob 't*en*'
|
|||
filter_testcase basic basic-numbers --invert-paths --path-regex 'f.*e.*e'
|
||||
filter_testcase basic basic-mailmap --mailmap ../t9390/sample-mailmap
|
||||
filter_testcase basic basic-replace --replace-text ../t9390/sample-replace
|
||||
filter_testcase basic basic-message --replace-message ../t9390/sample-message
|
||||
filter_testcase empty empty-keepme --path keepme
|
||||
filter_testcase empty more-empty-keepme --path keepme --prune-empty=always \
|
||||
--prune-degenerate=always
|
||||
|
|
78
t/t9390/basic-message
Normal file
78
t/t9390/basic-message
Normal file
|
@ -0,0 +1,78 @@
|
|||
feature done
|
||||
blob
|
||||
mark :1
|
||||
data 8
|
||||
initial
|
||||
|
||||
reset refs/heads/B
|
||||
commit refs/heads/B
|
||||
mark :2
|
||||
author Little O. Me <me@little.net> 1535228562 -0700
|
||||
committer Little O. Me <me@little.net> 1535228562 -0700
|
||||
data 9
|
||||
Modified
|
||||
M 100644 :1 filename
|
||||
M 100644 :1 ten
|
||||
M 100644 :1 twenty
|
||||
|
||||
blob
|
||||
mark :3
|
||||
data 11
|
||||
twenty-mod
|
||||
|
||||
commit refs/heads/B
|
||||
mark :4
|
||||
author Little 'ol Me <me@laptop.(none)> 1535229544 -0700
|
||||
committer Little 'ol Me <me@laptop.(none)> 1535229544 -0700
|
||||
data 18
|
||||
add the number 20
|
||||
from :2
|
||||
M 100644 :3 twenty
|
||||
|
||||
blob
|
||||
mark :5
|
||||
data 8
|
||||
ten-mod
|
||||
|
||||
commit refs/heads/A
|
||||
mark :6
|
||||
author Little O. Me <me@machine52.little.net> 1535229523 -0700
|
||||
committer Little O. Me <me@machine52.little.net> 1535229523 -0700
|
||||
data 8
|
||||
add ten
|
||||
from :2
|
||||
M 100644 :5 ten
|
||||
|
||||
commit refs/heads/master
|
||||
mark :7
|
||||
author Lit.e Me <me@fire.com> 1535229559 -0700
|
||||
committer Lit.e Me <me@fire.com> 1535229580 -0700
|
||||
data 24
|
||||
Merge branch 'A' into B
|
||||
from :4
|
||||
merge :6
|
||||
M 100644 :5 ten
|
||||
|
||||
blob
|
||||
mark :8
|
||||
data 6
|
||||
final
|
||||
|
||||
commit refs/heads/master
|
||||
mark :9
|
||||
author Little Me <me@bigcompany.com> 1535229601 -0700
|
||||
committer Little Me <me@bigcompany.com> 1535229601 -0700
|
||||
data 9
|
||||
whatever
|
||||
from :7
|
||||
M 100644 :8 filename
|
||||
M 100644 :8 ten
|
||||
M 100644 :8 twenty
|
||||
|
||||
tag v1.0
|
||||
from :9
|
||||
tagger Little John <second@merry.men> 1535229618 -0700
|
||||
data 15
|
||||
version one :)
|
||||
|
||||
done
|
4
t/t9390/sample-message
Normal file
4
t/t9390/sample-message
Normal file
|
@ -0,0 +1,4 @@
|
|||
Initial==>Modified
|
||||
regex:tw.nty==>the number 20
|
||||
v1.0==>version one!
|
||||
regex:!$==> :)
|
Loading…
Reference in New Issue
Block a user