git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] git-filter-branch: add --egrep-filter option
@ 2011-04-15 22:50 Michael O'Cleirigh
  2011-04-16  8:16 ` Johannes Sixt
  0 siblings, 1 reply; 5+ messages in thread
From: Michael O'Cleirigh @ 2011-04-15 22:50 UTC (permalink / raw)
  To: git

The --subdirectory-filter will look for a single directory and then rewrite
history to make its content the root.  This is ok except for cases where we
want to retain history of those files before they were moved into that
directory.

The --egrep-filter option allows specifying an egrep regex for the files in the
tree of each commit to keep.  For example:

Directories we want are A, B, C, D and they exist in several different
lifetimes.  A and B exist sometimes together then B and C and finally then D.

e.g. git-filter-branch --egrep-filter "(A|B|C|D)"

Each commit will then contain different combination's of A or B or C or D (up to A and B and C and D).
---
  git-filter-branch.sh |   12 ++++++++++++
  1 files changed, 12 insertions(+), 0 deletions(-)

diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 962a93b..2392ad6 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -101,6 +101,7 @@ USAGE="[--env-filter<command>] [--tree-filter<command>]
              [--index-filter<command>] [--parent-filter<command>]
              [--msg-filter<command>] [--commit-filter<command>]
              [--tag-name-filter<command>] [--subdirectory-filter<directory>]
+			[--egrep-filter<filter>]
              [--original<namespace>] [-d<directory>] [-f | --force]
              [<rev-list options>...]"

@@ -122,6 +123,7 @@ filter_msg=cat
  filter_commit=
  filter_tag_name=
  filter_subdir=
+filter_egrep=
  orig_namespace=refs/original/
  force=
  prune_empty=
@@ -191,6 +193,10 @@ do
  		filter_subdir="$OPTARG"
  		remap_to_ancestor=t
  		;;
+	--egrep-filter)
+		filter_egrep="$OPTARG"
+		remap_to_ancestor=t
+		;;
  	--original)
  		orig_namespace=$(expr "$OPTARG/" : '\(.*[^/]\)/*$')/
  		;;
@@ -317,6 +323,12 @@ while read commit parents; do
  		}
  	esac || die "Could not initialize the index"

+	if [ "$filter_egrep" ]; then
+
+		git ls-tree $commit | egrep "$filter_egrep" | git mktree | xargs git read-tree -i -m
+
+	fi
+
  	GIT_COMMIT=$commit
  	export GIT_COMMIT
  	git cat-file commit "$commit">../commit ||
-- 1.7.2.3

^ permalink raw reply related	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-04-19 16:03 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-15 22:50 [PATCH] git-filter-branch: add --egrep-filter option Michael O'Cleirigh
2011-04-16  8:16 ` Johannes Sixt
2011-04-17  1:45   ` Michael O'Cleirigh
2011-04-19  8:01     ` Jonathan Nieder
2011-04-19 16:03       ` Phil Hord

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).