mirror of
https://github.com/newren/git-filter-repo.git
synced 2024-11-07 09:20:29 +00:00
73e91edecc
Make it easy for users to search and replace text throughout the repository history. Instead of inventing some new syntax, reuse the same syntax used by BFG repo filter's --replace-text option, namely, a file with one expression per line of the form [regex:|glob:|literal:]$MATCH_EXPR[==>$REPLACEMENT_EXPR] Where "$MATCH_EXPR" is by default considered to be literal text, but could be a regex or a glob if the appropriate prefix is used. Also, $REPLACEMENT_EXPR defaults to '***REMOVED***' if not specified. If you want a literal '==>' to be part of your $MATCH_EXPR, then you must also manually specify a replacement expression instead of taking the default. Some examples: sup3rs3kr3t (replaces 'sup3rs3kr3t' with '***REMOVED***') HeWhoShallNotBeNamed==>Voldemort (replaces 'HeWhoShallNotBeNamed' with 'Voldemort') very==> (replaces 'very' with the empty string) regex:(\d{2})/(\d{2})/(\d{4})==>\2/\1/\3 (replaces '05/17/2012' with '17/05/2012', and vice-versa) The format for regex is as from re.sub(<pattern>, <repl>, <string>) from https://docs.python.org/2/library/re.html The <string> comes from file contents of the repo, and you specify the <pattern> and <repl>. glob:Copy*t==>Cartel (replaces 'Copyright' or 'Copyleft' or 'Copy my st' with 'Cartel') Signed-off-by: Elijah Newren <newren@gmail.com>
40 lines
960 B
Bash
Executable File
40 lines
960 B
Bash
Executable File
#!/bin/bash
|
|
|
|
test_description='Basic filter-repo tests'
|
|
|
|
. ./test-lib.sh
|
|
|
|
export PATH=$(dirname $TEST_DIRECTORY):$PATH # Put git-filter-repo in PATH
|
|
|
|
DATA="$TEST_DIRECTORY/t9390"
|
|
|
|
filter_testcase() {
|
|
INPUT=$1
|
|
OUTPUT=$2
|
|
shift 2
|
|
REST=("$@")
|
|
|
|
|
|
NAME="check: $INPUT -> $OUTPUT using '${REST[@]}'"
|
|
test_expect_success "$NAME" '
|
|
# Clean up from previous run
|
|
git pack-refs --all &&
|
|
rm .git/packed-refs &&
|
|
|
|
# Run the example
|
|
cat $DATA/$INPUT | git filter-repo --stdin --quiet --force ${REST[@]} &&
|
|
|
|
# Compare the resulting repo to expected value
|
|
git fast-export --use-done-feature --all >compare &&
|
|
test_cmp $DATA/$OUTPUT compare
|
|
'
|
|
}
|
|
|
|
filter_testcase basic basic-filename --path filename
|
|
filter_testcase basic basic-twenty --path twenty
|
|
filter_testcase basic basic-ten --path ten
|
|
filter_testcase basic basic-mailmap --mailmap ../t9390/sample-mailmap
|
|
filter_testcase basic basic-replace --replace-text ../t9390/sample-replace
|
|
|
|
test_done
|