From: Thomas Rast <trast@student.ethz.ch>
To: <git@vger.kernel.org>
Cc: Johannes Sixt <j6t@kdbg.org>, Johan Herland <johan@herland.net>
Subject: [RFC PATCH v2 11/11] filter-branch: learn how to filter notes
Date: Wed, 17 Feb 2010 00:26:07 +0100 [thread overview]
Message-ID: <a1bdef42de198dec4ec59c0d2b8b67e8656192d1.1266361759.git.trast@student.ethz.ch> (raw)
In-Reply-To: <cover.1266361759.git.trast@student.ethz.ch>
Teach filter-branch a new option --notes-filter that acts as a pipe
filter (much like --msg-filter) for the commit notes. For consistency
with the note copying support in amend/rebase, it defaults to 'cat' if
notes.rewrite.filter-branch is set.
Signed-off-by: Thomas Rast <trast@student.ethz.ch>
---
Documentation/config.txt | 12 ++++++++----
Documentation/git-filter-branch.txt | 13 +++++++++++++
Documentation/githooks.txt | 8 ++++----
git-filter-branch.sh | 18 +++++++++++++++++-
t/t7003-filter-branch.sh | 22 ++++++++++++++++++++++
5 files changed, 64 insertions(+), 9 deletions(-)
diff --git a/Documentation/config.txt b/Documentation/config.txt
index 403f5cf..2dfab6d 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1301,10 +1301,10 @@ mergetool.prompt::
Prompt before each invocation of the merge resolution program.
notes.rewrite.<command>::
- When rewriting commits with <command> (currently `amend` or
- `rebase`) and this variable is set to `true`, git
- automatically copies your notes from the original to the
- rewritten commit. Defaults to `false`.
+ When rewriting commits with <command> (currently `amend`,
+ `rebase` or `filter-branch`) and this variable is set to
+ `true`, git automatically copies your notes from the original
+ to the rewritten commit. Defaults to `false`.
notes.rewriteMode::
When copying notes during a rewrite (see the
@@ -1312,6 +1312,10 @@ notes.rewriteMode::
the target commit already has a note. Must be one of
`overwrite`, `concatenate`, or `ignore`. Defaults to
`concatenate`.
++
+Note that 'git-filter-branch' ignores this setting and always
+overwrites; see the description of `--notes-filter` in
+linkgit:git-filter-branch[1].
pack.window::
The size of the window used by linkgit:git-pack-objects[1] when no
diff --git a/Documentation/git-filter-branch.txt b/Documentation/git-filter-branch.txt
index 28a705f..6fd97d7 100644
--- a/Documentation/git-filter-branch.txt
+++ b/Documentation/git-filter-branch.txt
@@ -161,6 +161,19 @@ to other tags will be rewritten to point to the underlying commit.
The result will contain that directory (and only that) as its
project root. Implies --remap-to-ancestor.
+--notes-filter <command>::
+ This filter rewrites the notes (see linkgit:git-notes[1]). It
+ gets the old notes on standard input, and its standard output
+ is written as the new note (overwriting any existing notes).
++
+Defaults to doing nothing, unless the `notes.rewrite.filter-branch`
+option is set, in which case it copies the notes (i.e., defaults to
+`cat`).
++
+In addition to the usual variables, GIT_NEW_COMMIT is set to the
+result of the rewriting so that the filter can get at the existing
+notes, if any.
+
--remap-to-ancestor::
Rewrite refs to the nearest rewritten ancestor instead of
ignoring them.
diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
index c33a38e..f9252dd 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.txt
@@ -350,11 +350,11 @@ rebase::
filter-branch::
Commits that were processed by 'git-filter-branch', but not
changed, are not included in the list. If the list is empty
- after this filtering, the hook is not invoked at all.
+ after this filtering, the hook is not invoked at all. Also
+ see the `--post-rewrite` option in
+ linkgit:git-filter-branch[1].
-There is no default 'post-rewrite' hook, but see the
-`post-receive-copy-notes` script in `contrib/hooks` for an example
-that copies your git-notes to the rewritten commits.
+There is no default 'post-rewrite' hook.
GIT
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 301c497..ad2da4e 100755
--- a/git-filter-branch.sh
+++ b/git-filter-branch.sh
@@ -101,7 +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>]
- [--post-rewrite <command>]
+ [--post-rewrite <command>] [--notes-filter <command>]
[--original <namespace>] [-d <directory>] [-f | --force]
[<rev-list options>...]"
@@ -134,6 +134,12 @@ else
post_rewrite=:
fi
+if test "$(git config --bool notes.rewrite.filter-branch)"; then
+ filter_notes=cat
+else
+ filter_notes=
+fi
+
while :
do
case "$1" in
@@ -198,6 +204,9 @@ do
filter_subdir="$OPTARG"
remap_to_ancestor=t
;;
+ --notes-filter)
+ filter_notes="$OPTARG"
+ ;;
--post-rewrite)
post_rewrite="$OPTARG"
post_rewrite_given=t
@@ -374,6 +383,13 @@ while read commit parents; do
if test $commit != $new_commit; then
echo $commit $new_commit >> "$workdir"/../rewritten
fi
+ if test -n "$filter_notes"; then
+ if git notes show $commit >../note 2>/dev/null; then
+ export GIT_NEW_COMMIT="$new_commit"
+ eval "$filter_notes" <../note |
+ git notes add -F- -f $new_commit
+ fi
+ fi
done <../revs
# If we are filtering for paths, as in the case of a subdirectory
diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh
index 0da13a8..6dc21e8 100755
--- a/t/t7003-filter-branch.sh
+++ b/t/t7003-filter-branch.sh
@@ -306,6 +306,28 @@ test_expect_success '--remap-to-ancestor with filename filters' '
test $orig_invariant = $(git rev-parse invariant)
'
+test_expect_success '--notes-filter off' '
+ git checkout master &&
+ test_commit notes-foo &&
+ git notes add -mtestnote &&
+ git filter-branch -f --tree-filter "touch notes-1" HEAD^.. &&
+ test_must_fail git notes show
+'
+
+test_expect_success '--notes-filter manually' '
+ git reset --hard notes-foo &&
+ git filter-branch -f --notes-filter "sed s/test/foo/" \
+ --tree-filter "touch notes-2" HEAD^.. &&
+ test foonote = "$(git notes show)"
+'
+
+test_expect_success '--notes-filter implicit' '
+ git reset --hard notes-foo &&
+ git config notes.rewrite.filter-branch true &&
+ git filter-branch -f --tree-filter "touch notes-3" HEAD^.. &&
+ test testnote = "$(git notes show)"
+'
+
test_expect_success 'setup submodule' '
rm -fr ?* .git &&
git init &&
--
1.7.0.53.g5c2e6.dirty
next prev parent reply other threads:[~2010-02-16 23:27 UTC|newest]
Thread overview: 135+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-02-14 16:17 [RFC PATCH 0/6] post-rewrite hook and copying notes Thomas Rast
2010-02-14 16:17 ` [RFC PATCH 1/6] Documentation: document post-rewrite hook Thomas Rast
2010-02-14 16:17 ` [RFC PATCH 2/6] commit --amend: invoke " Thomas Rast
2010-02-14 16:17 ` [RFC PATCH 3/6] filter-branch: " Thomas Rast
2010-02-15 20:36 ` Johannes Sixt
2010-02-14 16:17 ` [RFC PATCH 4/6] rebase: " Thomas Rast
2010-02-14 16:17 ` [RFC PATCH 5/6] rebase -i: " Thomas Rast
2010-02-14 16:17 ` [RFC PATCH 6/6] contrib: add a hook that copies notes over rewrites Thomas Rast
2010-02-14 16:21 ` Thomas Rast
2010-02-14 21:46 ` [PATCH] WIP: git notes copy --stdin Thomas Rast
2010-02-15 1:25 ` Johan Herland
2010-02-16 23:25 ` [RFC PATCH v2 00/11] post-rewrite / automatic notes copying Thomas Rast
2010-02-16 23:25 ` [RFC PATCH v2 01/11] Documentation: document post-rewrite hook Thomas Rast
2010-02-16 23:59 ` Junio C Hamano
2010-02-17 0:18 ` Thomas Rast
2010-02-17 0:29 ` Junio C Hamano
2010-02-16 23:25 ` [RFC PATCH v2 02/11] commit --amend: invoke " Thomas Rast
2010-02-16 23:25 ` [RFC PATCH v2 03/11] rebase: " Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 04/11] rebase -i: " Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 05/11] notes: clean up t3301 Thomas Rast
2010-02-16 23:52 ` Junio C Hamano
2010-02-16 23:26 ` [RFC PATCH v2 06/11] notes: implement 'git notes copy --stdin' Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 07/11] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-02-16 23:58 ` Junio C Hamano
2010-02-17 0:09 ` Thomas Rast
2010-02-17 0:18 ` Junio C Hamano
2010-02-20 14:58 ` [WIP/RFC PATCH] Support showing notes from more than one notes tree Thomas Rast
2010-02-20 15:23 ` Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 08/11] rebase: support automatic notes copying Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 09/11] commit --amend: copy notes to the new commit Thomas Rast
2010-02-16 23:26 ` [RFC PATCH v2 10/11] filter-branch: invoke post-rewrite hook Thomas Rast
2010-02-16 23:26 ` Thomas Rast [this message]
2010-02-17 19:59 ` [RFC PATCH v2 11/11] filter-branch: learn how to filter notes Johannes Sixt
2010-02-17 23:06 ` Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 00/12] several notes refs, post-rewrite, notes rewriting Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 01/12] Support showing notes from more than one notes tree Thomas Rast
2010-02-21 3:06 ` Junio C Hamano
2010-02-20 22:16 ` [RFC PATCH v3 02/12] Documentation: document post-rewrite hook Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 03/12] commit --amend: invoke " Thomas Rast
2010-02-21 3:12 ` Junio C Hamano
2010-02-20 22:16 ` [RFC PATCH v3 04/12] rebase: " Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 05/12] rebase -i: " Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 06/12] notes: implement 'git notes copy --stdin' Thomas Rast
2010-02-21 3:31 ` Junio C Hamano
2010-02-20 22:16 ` [RFC PATCH v3 07/12] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-02-21 3:34 ` Junio C Hamano
2010-02-20 22:16 ` [RFC PATCH v3 08/12] rebase: support automatic notes copying Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 09/12] commit --amend: copy notes to the new commit Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 10/12] filter-branch: invoke post-rewrite hook Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 11/12] filter-branch: learn how to filter notes Thomas Rast
2010-02-20 22:16 ` [RFC PATCH v3 12/12] notes: add shorthand --ref to override GIT_NOTES_REF Thomas Rast
2010-02-21 3:47 ` [RFC PATCH v3 00/12] several notes refs, post-rewrite, notes rewriting Junio C Hamano
2010-02-21 6:14 ` Thomas Rast
2010-02-22 0:18 ` Junio C Hamano
2010-02-22 0:10 ` [PATCH v4 00/11] " Thomas Rast
2010-02-22 0:10 ` [PATCH v4 01/11] test-lib: unset GIT_NOTES_REF to stop it from influencing tests Thomas Rast
2010-02-22 0:10 ` [PATCH v4 02/11] Support showing notes from more than one notes tree Thomas Rast
2010-02-22 23:20 ` Junio C Hamano
2010-02-22 23:25 ` Thomas Rast
2010-02-23 0:21 ` Junio C Hamano
2010-02-22 0:10 ` [PATCH v4 03/11] Documentation: document post-rewrite hook Thomas Rast
2010-02-22 0:10 ` [PATCH v4 04/11] commit --amend: invoke " Thomas Rast
2010-02-22 0:10 ` [PATCH v4 05/11] rebase: " Thomas Rast
2010-02-22 0:10 ` [PATCH v4 06/11] rebase -i: " Thomas Rast
2010-02-22 0:10 ` [PATCH v4 07/11] notes: implement 'git notes copy --stdin' Thomas Rast
2010-02-22 0:10 ` [PATCH v4 08/11] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-02-22 0:10 ` [PATCH v4 09/11] rebase: support automatic notes copying Thomas Rast
2010-02-22 0:10 ` [PATCH v4 10/11] commit --amend: copy notes to the new commit Thomas Rast
2010-02-22 0:10 ` [PATCH v4 11/11] notes: add shorthand --ref to override GIT_NOTES_REF Thomas Rast
2010-02-22 0:25 ` [PATCH v4 00/11] several notes refs, post-rewrite, notes rewriting Junio C Hamano
2010-02-22 0:32 ` Thomas Rast
2010-02-23 0:42 ` [PATCH v5 " Thomas Rast
2010-02-23 0:42 ` [PATCH v5 01/11] test-lib: unset GIT_NOTES_REF to stop it from influencing tests Thomas Rast
2010-02-23 0:42 ` [PATCH v5 02/11] Support showing notes from more than one notes tree Thomas Rast
2010-02-23 1:47 ` Junio C Hamano
2010-02-23 17:10 ` Thomas Rast
2010-02-23 17:34 ` [PATCH] format-patch: learn to fill comment section of email from notes Thomas Rast
2010-02-23 17:34 ` [PATCH] BROKEN -- " Thomas Rast
2010-02-23 17:37 ` Thomas Rast
2010-02-24 7:45 ` Stephen Boyd
2010-02-23 21:56 ` [PATCH] " Junio C Hamano
2010-03-10 14:08 ` Thomas Rast
2010-02-23 0:42 ` [PATCH v5 03/11] Documentation: document post-rewrite hook Thomas Rast
2010-02-23 0:42 ` [PATCH v5 04/11] commit --amend: invoke " Thomas Rast
2010-02-23 0:42 ` [PATCH v5 05/11] rebase: " Thomas Rast
2010-02-23 0:42 ` [PATCH v5 06/11] rebase -i: " Thomas Rast
2010-02-24 6:15 ` Junio C Hamano
2010-02-23 0:42 ` [PATCH v5 07/11] notes: implement 'git notes copy --stdin' Thomas Rast
2010-02-23 0:42 ` [PATCH v5 08/11] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-02-23 0:42 ` [PATCH v5 09/11] rebase: support automatic notes copying Thomas Rast
2010-02-25 3:58 ` Junio C Hamano
2010-03-10 14:03 ` [PATCH v6 00/13] several notes refs, post-rewrite, notes rewriting Thomas Rast
2010-03-10 14:03 ` [PATCH v6 01/13] test-lib: unset GIT_NOTES_REF to stop it from influencing tests Thomas Rast
2010-03-11 8:55 ` Johan Herland
2010-03-10 14:03 ` [PATCH v6 02/13] Support showing notes from more than one notes tree Thomas Rast
2010-03-11 10:03 ` Johan Herland
2010-03-12 17:04 ` [PATCH v7 00/13] tr/display-notes Thomas Rast
2010-03-12 17:04 ` [PATCH v7 01/13] test-lib: unset GIT_NOTES_REF to stop it from influencing tests Thomas Rast
2010-03-12 17:04 ` [PATCH v7 02/13] Support showing notes from more than one notes tree Thomas Rast
2010-03-12 17:04 ` [PATCH v7 03/13] Documentation: document post-rewrite hook Thomas Rast
2010-03-12 17:04 ` [PATCH v7 04/13] commit --amend: invoke " Thomas Rast
2010-03-12 17:04 ` [PATCH v7 05/13] rebase: " Thomas Rast
2010-03-12 17:04 ` [PATCH v7 06/13] rebase -i: " Thomas Rast
2010-03-12 17:04 ` [PATCH v7 07/13] notes: implement 'git notes copy --stdin' Thomas Rast
2010-06-14 23:40 ` [PATCH] notes: Initialize variable to appease Sun Studio Ævar Arnfjörð Bjarmason
2010-06-19 4:52 ` Junio C Hamano
2010-06-19 11:58 ` Ævar Arnfjörð Bjarmason
2010-06-21 20:53 ` Ramsay Jones
2010-03-12 17:04 ` [PATCH v7 08/13] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-03-12 17:04 ` [PATCH v7 09/13] rebase: support automatic notes copying Thomas Rast
2010-03-12 17:04 ` [PATCH v7 10/13] commit --amend: copy notes to the new commit Thomas Rast
2010-03-12 17:04 ` [PATCH v7 11/13] notes: add shorthand --ref to override GIT_NOTES_REF Thomas Rast
2010-03-12 17:04 ` [PATCH v7 12/13] notes: track whether notes_trees were changed at all Thomas Rast
2010-03-12 17:04 ` [PATCH v7 13/13] git-notes(1): add a section about the meaning of history Thomas Rast
2010-03-10 14:03 ` [PATCH v6 03/13] Documentation: document post-rewrite hook Thomas Rast
2010-03-10 14:05 ` [PATCH v6 04/13] commit --amend: invoke " Thomas Rast
2010-03-10 14:05 ` [PATCH v6 05/13] rebase: " Thomas Rast
2010-03-10 14:05 ` [PATCH v6 06/13] rebase -i: " Thomas Rast
2010-03-10 14:05 ` [PATCH v6 07/13] notes: implement 'git notes copy --stdin' Thomas Rast
2010-03-11 10:30 ` Johan Herland
2010-03-10 14:05 ` [PATCH v6 08/13] notes: implement helpers needed for note copying during rewrite Thomas Rast
2010-03-11 10:50 ` Johan Herland
2010-03-10 14:05 ` [PATCH v6 09/13] rebase: support automatic notes copying Thomas Rast
2010-03-10 14:05 ` [PATCH v6 10/13] commit --amend: copy notes to the new commit Thomas Rast
2010-03-10 14:05 ` [PATCH v6 11/13] notes: add shorthand --ref to override GIT_NOTES_REF Thomas Rast
2010-03-11 10:56 ` Johan Herland
2010-03-10 14:05 ` [PATCH v6 12/13] notes: track whether notes_trees were changed at all Thomas Rast
2010-03-11 10:58 ` Johan Herland
2010-03-10 14:06 ` [PATCH v6 13/13] git-notes(1): add a section about the meaning of history Thomas Rast
2010-03-11 10:59 ` Johan Herland
2010-03-10 21:23 ` [PATCH v6 00/13] several notes refs, post-rewrite, notes rewriting Junio C Hamano
2010-02-23 0:42 ` [PATCH v5 10/11] commit --amend: copy notes to the new commit Thomas Rast
2010-02-23 0:42 ` [PATCH v5 11/11] notes: add shorthand --ref to override GIT_NOTES_REF Thomas Rast
2010-02-23 0:49 ` [PATCH v5 00/11] several notes refs, post-rewrite, notes rewriting Junio C Hamano
2010-02-23 0:49 ` Thomas Rast
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: http://vger.kernel.org/majordomo-info.html
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a1bdef42de198dec4ec59c0d2b8b67e8656192d1.1266361759.git.trast@student.ethz.ch \
--to=trast@student.ethz.ch \
--cc=git@vger.kernel.org \
--cc=j6t@kdbg.org \
--cc=johan@herland.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://80x24.org/mirrors/git.git
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 read-only IMAP folder(s) and NNTP newsgroup(s).