Re: [PATCH] git svn : hook before 'git svn dcommit'

4 messages, 2 authors, 2016-06-15 · open the first message on its own page

Re: [PATCH] git svn : hook before 'git svn dcommit'

From: Matthieu Moy <hidden>
Date: 2016-06-15 22:51:32

Frédéric Heitzmann [off-list ref] writes:
Le 02/07/2011 15:54, Matthieu Moy a écrit :
quoted
Frédéric Heitzmann[off-list ref]  writes:
quoted
The 'pre-svn-dcommit' hook si called before 'git svn dcommit', which aborts
if return value is not zero.
---
  git-svn.perl |   19 +++++++++++++++++++
What about documentation?
Should documentation be part of githooks or git-svn man page ?
I vote for the latest, in order to avoid
I'd also put it in the git-svn page, since git-svn is somehow not really
part of Git.
+prevent some diff to be committed to a SVN repository.
I'd say "an SVN", not "a SVN", but the documentation already use both
forms.
quoted
quoted
+       if ($? == -1) {
+               print "[pre_svn_dcommit_hook] failed to execute $hook:
$!\n";
whitespace damage (extra newline)
As for the 'whitespace damage", I do not understand what you mean.
The \n look mandatory to me.
You may look at 'info perlfunc' for the original code snippet (see
system' function).
I'm not talking about the \n, but the fact that what used to be a single
line of code is broken in two parts in your message.

A patch hunk has lines starting with " ", "+" or "-", yours have a line
starting with $. It won't apply with "patch" or "git apply", hence extra
work for our maintainer.

Try using "git send-email" to avoid that.

And actually, read Documentation/SubmittingPatches, in particular the
part about Signed-off-by.

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

[PATCH] git svn : hook before 'git svn dcommit'

From: Frédéric Heitzmann <hidden>
Date: 2016-06-15 22:51:32

The 'pre-svn-dcommit' hook is called by 'git svn dcommit' and can be used to
prevent some diff to be committed to a SVN repository. It may typically be
used to filter some intermediate patches, which were committed into git but
must not find their way to the SVN repository.

It takes a single parameter, the reference given to 'git svn dcommit'. If the
hook exists with a non zero-status, 'git svn dcommit' will abort.

Documentation/git-svn.txt |   14 +++++++++++++-
git-svn.perl              |   21 +++++++++++++++++++++
2 files changed, 34 insertions(+), 1 deletions(-)

[PATCH 1/2] git svn : hook before 'git svn dcommit'

From: Frédéric Heitzmann <hidden>
Date: 2016-06-15 22:51:32

The 'pre-svn-dcommit' hook is called before 'git svn dcommit', which aborts
if return value is not zero.

Signed-off-by: Frédéric Heitzmann <redacted>
---
 git-svn.perl |   21 +++++++++++++++++++++
 1 files changed, 21 insertions(+), 0 deletions(-)
diff --git a/git-svn.perl b/git-svn.perl
index 89f83fd..a537858 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -396,6 +396,25 @@ sub init_subdir {
 	$_repository = Git->repository(Repository => $ENV{GIT_DIR});
 }
 
+sub pre_svn_dcommit_hook {
+	my $head = shift;
+
+	my $hook = "$ENV{GIT_DIR}/hooks/pre-svn-dcommit";
+	return 0 if ! -e $hook || ! -x $hook;
+
+	system($hook, $head);
+	if ($? == -1) {
+		print "[pre_svn_dcommit_hook] failed to execute $hook: $!\n";
+		return 1;
+	} elsif ($? & 127) {
+		printf "[pre_svn_dcommit_hook] child died with signal %d, %s coredump\n",
+		($? & 127),  ($? & 128) ? 'with' : 'without';
+		return 1;
+	} else {
+		return $? >> 8;
+	}
+}
+
 sub cmd_clone {
 	my ($url, $path) = @_;
 	if (!defined $path &&
@@ -505,6 +524,8 @@ sub cmd_dcommit {
 		. "or stash them with `git stash'.\n";
 	$head ||= 'HEAD';
 
+	return if pre_svn_dcommit_hook($head);
+
 	my $old_head;
 	if ($head ne 'HEAD') {
 		$old_head = eval {
-- 
1.7.6.133.gd3b55a

[PATCH 2/2] git svn : documentation of 'pre-svn-dcommit'

From: Frédéric Heitzmann <hidden>
Date: 2016-06-15 22:51:32

Update of the git-svn documentation: 'pre-svn-dcommit' hook.

Signed-off-by: Frédéric Heitzmann <redacted>
---
 Documentation/git-svn.txt |   14 +++++++++++++-
 1 files changed, 13 insertions(+), 1 deletions(-)
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index 713e523..ec87ed3 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -700,6 +700,18 @@ section because they affect the 'git-svn-id:' metadata line, except
 for rewriteRoot and rewriteUUID which can be used together.
 
 
+HOOKS
+-----
+
+The 'pre-svn-dcommit' hook is called by 'git svn dcommit' and can be used to
+prevent some diff to be committed to a SVN repository. It may typically be
+used to filter some intermediate patches, which were committed into git but
+must not find their way to the SVN repository.
+
+It takes a single parameter, the reference given to 'git svn dcommit'. If the
+hook exists with a non zero-status, 'git svn dcommit' will abort.
+
+
 BASIC EXAMPLES
 --------------
 
@@ -901,7 +913,7 @@ reset) branches-maxRev and/or tags-maxRev as appropriate.
 
 SEE ALSO
 --------
-linkgit:git-rebase[1]
+linkgit:git-rebase[1], linkgit:githooks[5]
 
 GIT
 ---
-- 
1.7.6.133.gd3b55a
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help