Add --blob-exec to run system commands #83
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
git-filter-branch
docs, describing BFG:This is true. BFG's simple and easy options are (naturally) limited to a subset of all possible data manipulations.
This change adds
--blob-exec
which can execute any system command or script, while still taking advantage of BFG's killer optimizations of (1) parallelism and (2) per-blob (rather than per-commit) rewrites. (Though it does concede the advantage of in-process-only operations.)Users can use any scripting language or tool; Scala, awesome though it is, isn't well-known, and most Git users -- particularly the ones doing filter-branch type stuff -- are more familiar with command line tools.
A few use cases:
expand
utility. (This is more than a simple regex, as it considers mid-line tab positions.)dos2unix
. This is already possible with a replace expressions\r(\n)==>$1
, though that takes some trickery to figure out.There may be some improvements to this.
Runtime.exec
whose tokenizer only uses spaces -- no quotes mechnanism. Git uses the default shell (somehow) in a portable way, which is nicer.