Re: [PATCH v7 12/12] cherry-pick: copy notes and run hooks

2014-04-24 Thread Ramkumar Ramachandra
Felipe Contreras wrote:
 If no action-name is specified, nothing is done.

Why? Is it because git-rebase implements its own notes-copy-on-rewrite logic?

Otherwise, I agree with the goal of making notes.rewrite.command
work for cherry-pick.
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v7 12/12] cherry-pick: copy notes and run hooks

2014-04-24 Thread Ramkumar Ramachandra
Felipe Contreras wrote:
 diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
 index 43631b4..fd085e1 100644
 --- a/git-rebase--interactive.sh
 +++ b/git-rebase--interactive.sh
 @@ -248,7 +248,7 @@ pick_one () {

 test -d $rewritten 
 pick_one_preserving_merges $@  return
 -   output eval git cherry-pick $strategy_args $empty_args $ff $@
 +   output eval git cherry-pick --action-name '' $strategy_args 
 $empty_args $ff $@

Passing an empty action-name looks quite ugly. Is there a better way
to achieve this?
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v7 12/12] cherry-pick: copy notes and run hooks

2014-04-24 Thread Felipe Contreras
Ramkumar Ramachandra wrote:
 Felipe Contreras wrote:
  If no action-name is specified, nothing is done.
 
 Why? Is it because git-rebase implements its own notes-copy-on-rewrite logic?

Yes, and `git rebase` uses `git cherry-pick`.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v7 12/12] cherry-pick: copy notes and run hooks

2014-04-24 Thread Felipe Contreras
Ramkumar Ramachandra wrote:
 Felipe Contreras wrote:
  diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
  index 43631b4..fd085e1 100644
  --- a/git-rebase--interactive.sh
  +++ b/git-rebase--interactive.sh
  @@ -248,7 +248,7 @@ pick_one () {
 
  test -d $rewritten 
  pick_one_preserving_merges $@  return
  -   output eval git cherry-pick $strategy_args $empty_args $ff $@
  +   output eval git cherry-pick --action-name '' $strategy_args 
  $empty_args $ff $@
 
 Passing an empty action-name looks quite ugly. Is there a better way
 to achieve this?

I want `git cherry-pick` to be able to do two things:

1) Omit the whole notes and hooks code
2) Specify a name other than cherry-pick to use for those

The --action-name argument achieves both.

-- 
Felipe Contreras
--
To unsubscribe from this list: send the line unsubscribe git in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH v7 12/12] cherry-pick: copy notes and run hooks

2014-04-23 Thread Felipe Contreras
If no action-name is specified, nothing is done.

Signed-off-by: Felipe Contreras felipe.contre...@gmail.com
---
 Documentation/config.txt   |  9 -
 Documentation/githooks.txt |  8 
 git-rebase--interactive.sh |  4 ++--
 sequencer.c| 28 +++-
 t/t3512-revert-cherry-notes.sh | 18 ++
 t/t5407-post-rewrite-hook.sh   | 16 
 6 files changed, 71 insertions(+), 12 deletions(-)
 create mode 100755 t/t3512-revert-cherry-notes.sh

diff --git a/Documentation/config.txt b/Documentation/config.txt
index c26a7c8..c328d33 100644
--- a/Documentation/config.txt
+++ b/Documentation/config.txt
@@ -1752,11 +1752,10 @@ GIT_NOTES_REF) is also implicitly added to the list of 
refs to be
 displayed.
 
 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 `true`, but see
-   notes.rewriteRef below.
+   When rewriting commits with command (currently `amend`, `rebase`, or
+   `cherry-pick`) and this variable is set to `true`, Git automatically
+   copies your notes from the original to the rewritten commit.  Defaults
+   to `true`, but see notes.rewriteRef below.
 
 notes.rewriteMode::
When copying notes during a rewrite (see the
diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
index d954bf6..2402e7d 100644
--- a/Documentation/githooks.txt
+++ b/Documentation/githooks.txt
@@ -352,10 +352,10 @@ post-rewrite
 
 
 This hook is invoked by commands that rewrite commits (`git commit
---amend`, 'git-rebase'; currently 'git-filter-branch' does 'not' call
-it!).  Its first argument denotes the command it was invoked by:
-currently one of `amend` or `rebase`.  Further command-dependent
-arguments may be passed in the future.
+--amend`, `git rebase`, `git cherry-pick`; currently `git filter-branch` does
+'not' call it!).  Its first argument denotes the command it was invoked by
+(e.g. `rebase`).  Further command-dependent arguments may be passed in the
+future.
 
 The hook receives a list of the rewritten commits on stdin, in the
 format
diff --git a/git-rebase--interactive.sh b/git-rebase--interactive.sh
index 43631b4..fd085e1 100644
--- a/git-rebase--interactive.sh
+++ b/git-rebase--interactive.sh
@@ -248,7 +248,7 @@ pick_one () {
 
test -d $rewritten 
pick_one_preserving_merges $@  return
-   output eval git cherry-pick $strategy_args $empty_args $ff $@
+   output eval git cherry-pick --action-name '' $strategy_args 
$empty_args $ff $@
 }
 
 pick_one_preserving_merges () {
@@ -359,7 +359,7 @@ pick_one_preserving_merges () {
echo $sha1 $(git rev-parse HEAD^0)  
$rewritten_list
;;
*)
-   output eval git cherry-pick $strategy_args $@ ||
+   output eval git cherry-pick --action-name '' 
$strategy_args $@ ||
die_with_patch $sha1 Could not pick $sha1
;;
esac
diff --git a/sequencer.c b/sequencer.c
index ed59d75..2eb6ce8 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -22,6 +22,25 @@ const char sign_off_header[] = Signed-off-by: ;
 static const char cherry_picked_prefix[] = (cherry picked from commit ;
 static struct rewritten rewritten;
 
+static void finish(struct replay_opts *opts)
+{
+   const char *name;
+   struct strbuf msg = STRBUF_INIT;
+
+   if (opts-action != REPLAY_PICK)
+   return;
+
+   name = opts-action_name ? opts-action_name : cherry-pick;
+
+   if (!*name)
+   return;
+
+   strbuf_addf(msg, Notes added by 'git %s', name);
+   copy_rewrite_notes(rewritten, name, msg.buf);
+   run_rewrite_hook(rewritten, name);
+   strbuf_release(msg);
+}
+
 static int is_rfc2822_line(const char *buf, int len)
 {
int i;
@@ -1042,6 +1061,8 @@ static int pick_commits(struct commit_list *todo_list, 
struct replay_opts *opts)
}
}
 
+   finish(opts);
+
/*
 * Sequence of picks finished successfully; cleanup by
 * removing the .git/sequencer directory
@@ -1113,8 +1134,13 @@ static int sequencer_skip(struct replay_opts *opts)
 
 static int single_pick(struct commit *cmit, struct replay_opts *opts)
 {
+   int ret;
setenv(GIT_REFLOG_ACTION, action_name(opts), 0);
-   return do_pick_commit(cmit, opts);
+   ret = do_pick_commit(cmit, opts);
+   if (ret)
+   return ret;
+   finish(opts);
+   return 0;
 }
 
 int sequencer_pick_revisions(struct replay_opts *opts)
diff --git a/t/t3512-revert-cherry-notes.sh b/t/t3512-revert-cherry-notes.sh
new file mode 100755
index 000..9e9e611
--- /dev/null
+++ b/t/t3512-revert-cherry-notes.sh
@@ -0,0