From: Seth Falcon <sethfalcon@gmail.com>
To: git@vger.kernel.org
Subject: Re: git-svn can lose changes silently
Date: Wed, 08 Nov 2006 23:33:53 -0800 [thread overview]
Message-ID: <m2u019ysym.fsf@ziti.local> (raw)
In-Reply-To: <455277A6.2000404@midwinter.com> (Steven Grimm's message of "Wed, 08 Nov 2006 16:34:46 -0800")
Steven Grimm <koreth@midwinter.com> writes:
> git-svn is happy to overwrite changes in the svn repository with no
> warnings. Didn't seem to be known behavior when I mentioned it in
> #git, so here's an example, starting completely from scratch to make
> it easier to reproduce. I'm using git-svn 1.4.3 and svn 1.2.3 on OS
> X.
I can reproduce your example and also see the same thing when
accessing an svn repository via https [I've never used the local
file:// mode and was leary of it].
> It is probably not a feature that you can lose changes without knowing
> about it! Even if I'd run git-svn fetch before that commit, it still
> wouldn't help if the svn version of the file changed between the time
> I ran fetch and the time I ran dcommit, totally possible with a busy
> svn repository.
>
> Opinions? Suggestions on fixing it? Do other people agree this is a
> bug?
I think this is a pretty big deal -- at least in terms of user
expectation. The man page for 'git-svn commit' warns that upstream
changes will be lost. But in suggesting to use 'git-svn dcommit'
instead, one might expect (hope?) this overwritting upstream changes
to not occur.
I'm embarassed to admit that I've been using git-svn for a few weeks
now and didn't test out these details.
Here is a patch that I think improves matters a bit:
diff --git a/git-svn.perl b/git-svn.perl
index 4a56f18..daa1764 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -830,6 +830,17 @@ sub commit_diff {
($repo, $SVN_PATH) = repo_path_split($SVN_URL);
$SVN_LOG ||= libsvn_connect($repo);
$SVN ||= libsvn_connect($repo);
+
+ my ($r_last, $cmt_last) = svn_grab_base_rev();
+ my $fetched = fetch();
+ if ($r_last != $fetched->{revision}) {
+ print STDERR "There are new revisions that were fetched ",
+ "and need to be merged (or acknowledged) ",
+ "before committing.\n",
+ "last rev: $r_last\n",
+ " current: $fetched->{revision}\n";
+ exit 1;
+ }
my @lock = $SVN::Core::VERSION ge '1.2.0' ? (undef, 0) : ();
my $ed = SVN::Git::Editor->new({ r => $SVN->get_latest_revnum,
ra => $SVN_LOG, c => $tb,
But for a possibly busy svn repository, the only real solution is one
that uses the svn libs in a way that behaves like the svn client in
terms of atomicity.
next prev parent reply other threads:[~2006-11-09 7:34 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-09 0:34 git-svn can lose changes silently Steven Grimm
2006-11-09 7:33 ` Seth Falcon [this message]
2006-11-09 9:19 ` [PATCH] git-svn: fix dcommit losing changes when out-of-date from svn Eric Wong
2006-11-09 10:00 ` Junio C Hamano
2006-11-09 17:42 ` Seth Falcon
2006-11-09 19:22 ` Eric Wong
2006-11-09 19:30 ` Steven Grimm
2006-11-09 20:47 ` Eric Wong
2006-11-09 22:37 ` Steven Grimm
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=m2u019ysym.fsf@ziti.local \
--to=sethfalcon@gmail.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.