git/list[1] front-page[2] threads[3] people[4] search[5] about
 

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

From
FHFrédéric Heitzmann <frederic.heitzmann@gmail.com>
Date
Jul 5, 2011, 20:44 UTC
Message-ID
<1309898684-9486-1-git-send-email-frederic.heitzmann@gmail.com>
In-Reply-To
<4E11558B.90708@gmail.com>

The 'pre-svn-dcommit' hook is called before 'git svn dcommit', which aborts if return value is not zero. The only parameter given to the hook is the reference given to 'git svn dcommit'. If no paramter was used, hook gets HEAD as its only parameter.

Signed-off-by: Frédéric Heitzmann <frederic.heitzmann@gmail.com>
---

This is the second iteration of the patch. Previous 2 patches were merged into one.

 Documentation/git-svn.txt |   14 +++++++++++++-
 git-svn.perl              |   21 +++++++++++++++++++++
 2 files changed, 34 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
 ---
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
Previous: Frédéric HeitzmannNext: Frédéric Heitzmann
Message 10 of 11 in “git svn : hook before 'git svn dcommit'”
  1. git svn : hook before 'git svn dcommit'Frédéric Heitzmann, Jul 2, 2011
  2. Matthieu MoyJul 2, 2011
  3. Frédéric HeitzmannJul 2, 2011
  4. Matthieu MoyJul 2, 2011
  5. git svn : hook before 'git svn dcommit'Frédéric Heitzmann, Jul 3, 2011
  6. 1/2 git svn : hook before 'git svn dcommit'Frédéric Heitzmann, Jul 3, 2011
  7. 2/2 git svn : documentation of 'pre-svn-dcommit'Frédéric Heitzmann, Jul 3, 2011
  8. Matthieu MoyJul 3, 2011
  9. Frédéric HeitzmannJul 4, 2011
  10. git svn : hook before 'git svn dcommit'Frédéric Heitzmann, Jul 5, 2011
  11. git svn : hook before 'git svn dcommit'Frédéric Heitzmann, Jul 9, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.