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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.