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 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).