From: Wesley Schwengle <wesleys@opperschaap.net>
To: git@vger.kernel.org
Subject: [PATCH 1/2] git-svn: don't print v1-layout migration noise when there's nothing to migrate
Date: Thu, 27 Aug 2026 12:51:33 -0400 [thread overview]
Message-ID: <20260827165134.848207-2-wesleys@opperschaap.net> (raw)
In-Reply-To: <20260827165134.848207-1-wesleys@opperschaap.net>
`migrate_from_v1()' unconditionally announced and created `.git/svn'
when no legacy `refs/remotes/*' metadata existed to migrate. This
happens for example right after a `git init'.
Defer the logic until an actual candidate is found, matching
the existing pattern of `migrate_from_v0'
Signed-off-by: Wesley Schwengle <wesleys@opperschaap.net>
---
perl/Git/SVN/Migration.pm | 16 ++++++++++------
t/t9107-git-svn-migrate.sh | 7 +++++++
2 files changed, 17 insertions(+), 6 deletions(-)
diff --git a/perl/Git/SVN/Migration.pm b/perl/Git/SVN/Migration.pm
index ed96ac593e..a6de4b14a8 100644
--- a/perl/Git/SVN/Migration.pm
+++ b/perl/Git/SVN/Migration.pm
@@ -84,35 +84,39 @@ sub migrate_from_v0 {
sub migrate_from_v1 {
my $git_dir = $ENV{GIT_DIR};
my $migrated = 0;
return $migrated unless -d $git_dir;
my $svn_dir = Git::SVN::svn_dir();
# just in case somebody used 'svn' as their $id at some point...
return $migrated if -d $svn_dir && ! -f "$svn_dir/info/url";
- print STDERR "Migrating from a git-svn v1 layout...\n";
- mkpath([$svn_dir]);
- print STDERR "Data from a previous version of git-svn exists, but\n\t",
- "$svn_dir\n\t(required for this version ",
- "($::VERSION) of git-svn) does not exist.\n";
my ($fh, $ctx) = command_output_pipe(qw/rev-parse --symbolic --all/);
while (<$fh>) {
my $x = $_;
next unless $x =~ s#^refs/remotes/##;
chomp $x;
my $info_url = command_oneline(qw(rev-parse --git-path),
"$x/info/url");
next unless -f $info_url;
my $u = eval { ::file_to_s($info_url) };
next unless $u;
+ unless ($migrated) {
+ print STDERR "Migrating from a git-svn v1 layout...\n";
+ mkpath([$svn_dir]);
+ print STDERR "Data from a previous version of ",
+ "git-svnexists, but\n\t",
+ "$svn_dir\n\t(required for this version ",
+ "($::VERSION) of git-svn) does not ",
+ "exist.\n";
+ }
my $dn = dirname("$svn_dir/$x");
mkpath([$dn]) unless -d $dn;
if ($x eq 'svn') { # they used 'svn' as GIT_SVN_ID:
mkpath(["$svn_dir/svn"]);
print STDERR " - $git_dir/$x/info => ",
"$svn_dir/$x/info\n";
rename "$git_dir/$x/info", "$svn_dir/$x/info" or
croak "$!: $x";
# don't worry too much about these, they probably
# don't exist with repos this old (save for index,
@@ -120,21 +124,21 @@ sub migrate_from_v1 {
foreach my $f (qw/unhandled.log index .rev_db/) {
rename "$git_dir/$x/$f", "$svn_dir/$x/$f";
}
} else {
print STDERR " - $git_dir/$x => $svn_dir/$x\n";
rename "$git_dir/$x", "$svn_dir/$x" or croak "$!: $x";
}
$migrated++;
}
command_close_pipe($fh, $ctx);
- print STDERR "Done migrating from a git-svn v1 layout\n";
+ print STDERR "Done migrating from a git-svn v1 layout\n" if $migrated;
$migrated;
}
sub read_old_urls {
my ($l_map, $pfx, $path) = @_;
my @dir;
foreach (<$path/*>) {
if (-r "$_/info/url") {
$pfx .= '/' if $pfx && $pfx !~ m!/$!;
my $ref_id = $pfx . basename $_;
diff --git a/t/t9107-git-svn-migrate.sh b/t/t9107-git-svn-migrate.sh
index 6d7d2aa491..a27f7f6171 100755
--- a/t/t9107-git-svn-migrate.sh
+++ b/t/t9107-git-svn-migrate.sh
@@ -1,15 +1,22 @@
#!/bin/sh
# Copyright (c) 2006 Eric Wong
test_description='git svn metadata migrations from previous versions'
. ./lib-git-svn.sh
+test_expect_success 'migrate is silent when there is nothing to migrate' '
+ git svn migrate 2>err.log &&
+ test_grep ! "Migrating from a git-svn v1 layout" err.log &&
+ test_grep ! "Data from a previous version of git-svn exists" err.log &&
+ ! test -d "$GIT_DIR"/svn
+ '
+
test_expect_success 'setup old-looking metadata' '
cp "$GIT_DIR"/config "$GIT_DIR"/config-old-git-svn &&
mkdir import &&
(
cd import &&
for i in trunk branches/a branches/b tags/0.1 tags/0.2 tags/0.3
do
mkdir -p $i &&
echo hello >>$i/README ||
exit 1
--
2.55.0.827.g48ce2c92dc
next prev parent reply other threads:[~2026-08-27 17:01 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-27 16:51 [PATCH 0/2] git-svn: silence bogus v1-layout migration message Wesley Schwengle
2026-08-27 16:51 ` Wesley Schwengle [this message]
2026-08-27 17:42 ` [PATCH 1/2] git-svn: don't print v1-layout migration noise when there's nothing to migrate Junio C Hamano
2026-08-27 23:43 ` [PATCH v2 0/2] " Wesley Schwengle
2026-08-27 23:43 ` [PATCH v2 1/2] " Wesley Schwengle
2026-08-27 23:43 ` [PATCH v2 2/2] Makefile: add NO_GIT_SVN knob to skip building/installing git-svn Wesley Schwengle
2026-08-27 16:51 ` [PATCH " Wesley Schwengle
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=20260827165134.848207-2-wesleys@opperschaap.net \
--to=wesleys@opperschaap.net \
--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.