From: "Dave O'Neill" <dmo@roaringpenguin.com>
To: git@vger.kernel.org
Cc: "Dave O'Neill" <dmo@roaringpenguin.com>
Subject: [PATCH] Let git-svnimport and git-svn clean up SVK commit messages
Date: Thu, 21 Jun 2007 16:51:32 -0400 [thread overview]
Message-ID: <11824590923150-git-send-email-dmo@roaringpenguin.com> (raw)
In-Reply-To: <1182392095394-git-send-email-dmo@roaringpenguin.com>
SVN repositories that have been committed to with SVK will have commits that
contain SVK metadata on the first line of the message:
r12345@hostname: user | YYYY-MM-DD HH:MM:SS -ZZZZ
After importing, git will then pick up this first as the commit title, which
isn't terribly informative in 'git log --pretty=oneline' or gitk.
This patch adds a -k option to git-svnimport and a --fix-svk-message option
(and fixSvkMessage config option) to git-svn. Enabling this option allows
git-svn to try and move that metadata to the end of the commit message,
possibly giving us a more meaningful first line.
---
Documentation/git-svn.txt | 13 +++++++++++++
Documentation/git-svnimport.txt | 6 +++++-
git-svn.perl | 23 ++++++++++++++++++++---
git-svnimport.perl | 15 ++++++++++++---
4 files changed, 50 insertions(+), 7 deletions(-)
diff --git a/Documentation/git-svn.txt b/Documentation/git-svn.txt
index c0d7d95..5cd89f9 100644
--- a/Documentation/git-svn.txt
+++ b/Documentation/git-svn.txt
@@ -54,6 +54,8 @@ COMMANDS
Set the 'useSvmProps' option in the [svn-remote] config.
--use-svnsync-props;;
Set the 'useSvnsyncProps' option in the [svn-remote] config.
+--fix-svk-message;;
+ Set the 'fixSvkMessage' option in the [svn-remote] config.
--rewrite-root=<URL>;;
Set the 'rewriteRoot' option in the [svn-remote] config.
--username=<USER>;;
@@ -385,6 +387,14 @@ svn-remote.<name>.rewriteRoot::
the repository with a public http:// or svn:// URL in the
metadata so users of it will see the public URL.
+svn-remote.<name>.fixSvkMessage::
+ SVN repositories that have been committed to with SVK will have
+ commits that contain SVK metadata on the first line of the
+ message, which git will then pick up as the commit title. Enabling
+ this option allows git-svn to try and move that metadata to the end
+ of the commit message, possibly giving us a more meaningful first
+ line.
+
Since the noMetadata, rewriteRoot, useSvnsyncProps and useSvmProps
options all affect the metadata generated and used by git-svn; they
*must* be set in the configuration file before any history is imported
@@ -393,6 +403,9 @@ and these settings should never be changed once they are set.
Additionally, only one of these four options can be used per-svn-remote
section because they affect the 'git-svn-id:' metadata line.
+The fixSvkMessage option may be set in combination with any of these, and
+can be set after import if desired.
+
--
BASIC EXAMPLES
diff --git a/Documentation/git-svnimport.txt b/Documentation/git-svnimport.txt
index e97d15e..23a54b0 100644
--- a/Documentation/git-svnimport.txt
+++ b/Documentation/git-svnimport.txt
@@ -11,7 +11,7 @@ SYNOPSIS
--------
[verse]
'git-svnimport' [ -o <branch-for-HEAD> ] [ -h ] [ -v ] [ -d | -D ]
- [ -C <GIT_repository> ] [ -i ] [ -u ] [-l limit_rev]
+ [ -C <GIT_repository> ] [ -i ] [ -k ] [ -u ] [-l limit_rev]
[ -b branch_subdir ] [ -T trunk_subdir ] [ -t tag_subdir ]
[ -s start_chg ] [ -m ] [ -r ] [ -M regex ]
[ -I <ignorefile_name> ] [ -A <author_file> ]
@@ -68,6 +68,10 @@ When importing incrementally, you might need to edit the .git/svn2git file.
Prepend 'rX: ' to commit messages, where X is the imported
subversion revision.
+-k::
+ Remove SVK-style revision/commiter info from the top of commit
+ messages and move it to the bottom.
+
-I <ignorefile_name>::
Import the svn:ignore directory property to files with this
name in each directory. (The Subversion and GIT ignore
diff --git a/git-svn.perl b/git-svn.perl
index 50128d7..1451f0d 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -83,6 +83,7 @@ my %init_opts = ( 'template=s' => \$_template, 'shared:s' => \$_shared,
'trunk|T=s' => \$_trunk, 'tags|t=s' => \$_tags,
'branches|b=s' => \$_branches, 'prefix=s' => \$_prefix,
'minimize-url|m' => \$Git::SVN::_minimize_url,
+ 'fix-svk-message' => \$Git::SVN::_fix_svk_message,
'no-metadata' => sub { $icv{noMetadata} = 1 },
'use-svm-props' => sub { $icv{useSvmProps} = 1 },
'use-svnsync-props' => sub { $icv{useSvnsyncProps} = 1 },
@@ -280,6 +281,11 @@ sub do_git_init_db {
command_noisy('config', "$pfx.$i", $icv{$i});
$set = $i;
}
+
+ if( defined $Git::SVN::_fix_svk_message ) {
+ command_noisy('config', "$pfx.fixSvkMessage", $Git::SVN::_fix_svk_message);
+ }
+
}
sub init_subdir {
@@ -826,7 +832,7 @@ sub working_head_info {
package Git::SVN;
use strict;
use warnings;
-use vars qw/$default_repo_id $default_ref_id $_no_metadata $_follow_parent
+use vars qw/$default_repo_id $default_ref_id $_no_metadata $_follow_parent $_fix_svk_message
$_repack $_repack_flags $_use_svm_props $_head
$_use_svnsync_props $no_reuse_existing $_minimize_url/;
use Carp qw/croak/;
@@ -849,7 +855,7 @@ BEGIN {
# per [svn-remote "..."] section. Command-line options will *NOT*
# override options set in an [svn-remote "..."] section
no strict 'refs';
- for my $option (qw/follow_parent no_metadata use_svm_props
+ for my $option (qw/follow_parent no_metadata use_svm_props fix_svk_message
use_svnsync_props/) {
my $key = $option;
$key =~ tr/_//d;
@@ -1613,7 +1619,18 @@ sub do_git_commit {
}
defined(my $pid = open3(my $msg_fh, my $out_fh, '>&STDERR', @exec))
or croak $!;
- print $msg_fh $log_entry->{log} or croak $!;
+ my $log_msg = $log_entry->{log};
+
+ if( $self->fix_svk_message ) {
+ # Remove SVK cruft in commit message
+ $log_msg =~ s{(r\d+\@[^:]+:\s+\S+\s+\|\s+\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\s[\+-]\d{4})\s*}{};
+ if( $1 ) {
+ # and stick it on the end so we don't lose it
+ $log_msg .= "\n$1"
+ }
+ }
+
+ print $msg_fh $log_msg or croak $!;
unless ($self->no_metadata) {
print $msg_fh "\ngit-svn-id: $log_entry->{metadata}\n"
or croak $!;
diff --git a/git-svnimport.perl b/git-svnimport.perl
index f459762..89afdd8 100755
--- a/git-svnimport.perl
+++ b/git-svnimport.perl
@@ -32,20 +32,20 @@ $ENV{'TZ'}="UTC";
our($opt_h,$opt_o,$opt_v,$opt_u,$opt_C,$opt_i,$opt_m,$opt_M,$opt_t,$opt_T,
$opt_b,$opt_r,$opt_I,$opt_A,$opt_s,$opt_l,$opt_d,$opt_D,$opt_S,$opt_F,
- $opt_P,$opt_R);
+ $opt_P,$opt_R,$opt_k);
sub usage() {
print STDERR <<END;
Usage: ${\basename $0} # fetch/update GIT from SVN
[-o branch-for-HEAD] [-h] [-v] [-l max_rev] [-R repack_each_revs]
[-C GIT_repository] [-t tagname] [-T trunkname] [-b branchname]
- [-d|-D] [-i] [-u] [-r] [-I ignorefilename] [-s start_chg]
+ [-d|-D] [-i] [-k] [-u] [-r] [-I ignorefilename] [-s start_chg]
[-m] [-M regex] [-A author_file] [-S] [-F] [-P project_name] [SVN_URL]
END
exit(1);
}
-getopts("A:b:C:dDFhiI:l:mM:o:rs:t:T:SP:R:uv") or usage();
+getopts("A:b:C:dDFhiI:kl:mM:o:rs:t:T:SP:R:uv") or usage();
usage if $opt_h;
my $tag_name = $opt_t || "tags";
@@ -835,6 +835,15 @@ sub commit {
$pw->writer();
$pr->reader();
+ if ( $opt_k ) {
+ # Remove SVK cruft in commit message
+ $message =~ s{(r\d+\@[^:]+:\s+\S+\s+\|\s+\d{4}-\d{2}-\d{2}\s+\d{2}:\d{2}:\d{2}\s[\+-]\d{4})\s*}{};
+ if( $1 ) {
+ # and stick it on the end so we don't lose it
+ $message .= "\n$1"
+ }
+ }
+
$message =~ s/[\s\n]+\z//;
$message = "r$revision: $message" if $opt_r;
--
1.5.2.2.239.g89630
prev parent reply other threads:[~2007-06-21 20:51 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-21 2:14 [PATCH] Let git-svnimport clean up SVK commit messages Dave O'Neill
2007-06-21 3:19 ` Steven Grimm
2007-06-21 14:14 ` Dave O'Neill
2007-06-21 15:00 ` Jeffrey C. Ollie
2007-06-21 21:58 ` Dave O'Neill
2007-06-21 6:01 ` Sam Vilain
2007-06-21 14:22 ` Dave O'Neill
2007-06-21 20:51 ` Dave O'Neill [this message]
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=11824590923150-git-send-email-dmo@roaringpenguin.com \
--to=dmo@roaringpenguin.com \
--cc=git@vger.kernel.org \
/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.
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).