From 9cfe2b4090c723df0bd577e2f7ec4070b4e2dcd4 Mon Sep 17 00:00:00 2001 From: rndbit Date: Thu, 26 Aug 2021 01:59:29 +0000 Subject: [PATCH] filter-repo: fix detection of binary blobs for --replace-text Detection if blob is binary for the purpose of --replace-text always fails and text replacement is applied to all blobs. This has changed going to python3. With python2 the same code would still be wrong but would manifest differently. In the construct 'for x in b"..."' the x is - of type in python3 - of type in python2 thus in python3 condition 'x == b"\0"' can not be true for any x due to type difference. Further, the search was supposed to look for NUL byte and not 0 character, thus change to b"\0" instead of b"0". Signed-off-by: rndbit --- git-filter-repo | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/git-filter-repo b/git-filter-repo index 63c47da..c539eb8 100755 --- a/git-filter-repo +++ b/git-filter-repo @@ -3261,8 +3261,10 @@ class RepoFilter(object): if blob.original_id in self._args.strip_blobs_with_ids: blob.skip() - if self._args.replace_text and \ - not any(x == b"0" for x in blob.data[0:8192]): + if ( self._args.replace_text + # not (if blob contains zero byte in the first 8Kb, that is, if blob is binary data) + and not b"\0" in blob.data[0:8192] + ): for literal, replacement in self._args.replace_text['literals']: blob.data = blob.data.replace(literal, replacement) for regex, replacement in self._args.replace_text['regexes']: