git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* BUG: git-svn dcommit and concurrency (Re: git svn dcommit errors all no-yet-commited changes are left squashed/uncommited?)
@ 2011-04-13 19:48 Piotr Krukowiecki
  2011-04-13 22:40 ` Eric Wong
  0 siblings, 1 reply; 3+ messages in thread
From: Piotr Krukowiecki @ 2011-04-13 19:48 UTC (permalink / raw
  To: Git Mailing List; +Cc: Eric Wong

[-- Attachment #1: Type: text/plain, Size: 7053 bytes --]

Hello again,

resending mail, this time with involved people on CC and with clearer message.

I believe there's a bug in git-svn dcommit.

If during dcommit someone else commits to svn repository then git
a) stops
b) loses commits not-yet dcommitted

"a" is bug IMO, because it seems to work sometimes (only for first
dcommited change?)
"b" is more severe, because it destroys user data (in a way) - you
have to use reflog to get it back, I believe.

I have reproduced it locally - added "sleep" to git-svn in the dcommit
loop and did svn commit when it slept.

Pasting log from dcommit below. Notes:
- local git commits and unfetched svn commits were not conflicting
(changed different files)
- when starting dcommit there was one unfetched commit (r4) - this
worked without problems
- new change commited to svn was r8 - during sleep after r6
- "git log remotes/git-svn.." shows nothing => commit history is lost
- "git diff" shows all not-yet-commited changes merged in working tree

----------------------------------------------------------------------------------------
piotr@piotr-laptop:/tmp/d/b$ git svn dcommit
Committing to file:///tmp/b ...
	A	two.txt
Committed r5
	M	file.txt
r4 = 161ef277a311148c42a4391fab1531b818d6b8ba (refs/remotes/git-svn)
	A	two.txt
r5 = e2ac55eff258832e0dc7612b9a12913c861897a3 (refs/remotes/git-svn)
W: 9a64a0288d5474a78eb528c81efe38a026331fdb and refs/remotes/git-svn
differ, using rebase:
:100644 100644 b77ce16c276583c177f535cde69e8764ee4a1497
928a139863b65711aa12167b81fefccfacc00d69 M	file.txt
First, rewinding head to replay your work on top of it...
Applying: three.txt
Applying: next
Applying: next
Applying: next
Applying: next
Sleeping...
	A	three.txt
Committed r6
	A	three.txt
r6 = fe11637f550e3158acf333cbd6197fbc775d9000 (refs/remotes/git-svn)
No changes between current HEAD and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
Unstaged changes after reset:
M	three.txt
Sleeping...
	M	three.txt
Committed r7
	M	three.txt
r7 = 9ebda9f54668427441daa97b0f152eb1885d266b (refs/remotes/git-svn)
No changes between current HEAD and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
Unstaged changes after reset:
M	three.txt
Sleeping...
	M	three.txt
Committed r9
	M	file.txt
r8 = 92bcba5a1a5be41d4393be1810bed0e9417da1a8 (refs/remotes/git-svn)
	M	three.txt
r9 = 6988d79c042c21534241e4f6e82ef29056ce69bc (refs/remotes/git-svn)
W: cdc341b381aab0ab01233bcc0b47d36acef75eb8 and refs/remotes/git-svn
differ, using rebase:
:100644 100644 928a139863b65711aa12167b81fefccfacc00d69
a063167d351d2715c1a612cd0f431ac77b9eba92 M	file.txt
Cannot rebase: You have unstaged changes.
Please commit or stash them.
rebase refs/remotes/git-svn: command returned error: 1

piotr@piotr-laptop:/tmp/d/b$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   three.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
piotr@piotr-laptop:/tmp/d/b$ git log remotes/git-svn..
piotr@piotr-laptop:/tmp/d/b$ git diff
diff --git a/three.txt b/three.txt
index 7bfc0fd..ce447d2 100644
--- a/three.txt
+++ b/three.txt
@@ -1,2 +1,5 @@
 three
 next
+next
+next
+next
----------------------------------------------------------------------------------------

I'm also attaching "sleep" patch, logs from creating/commiting to svn
repository and from git svn clone for convenience (some messages from
svn are in Polish but that shouldn't matter)

git version 1.7.5-rc1


On Mon, Apr 11, 2011 at 4:32 PM, Piotr Krukowiecki
<piotr.krukowiecki@gmail.com> wrote:
> Hi,
>
> I've done some changes to "local" trunk, dcomitted them to svn server,
> then cherry-picked those changes to "local" branch and tried to
> dcommit them to svn.
> Several changes where successfully dcommited, but then I got an error.
>
> Two problems:
> 1. after the error I'm left with changes not sent to svn server as
> unstaged changes
> 2. git-svn errors if someone commits something to svn during my commit
> even if there is no conflict
>
> Even if the second problem is intentional (which I'm not sure is a
> good idea), the first problem means it's not possible to continue
> after the error (which is not really an error but should be a warning,
> even if it stops the dcommit).
>
>
> Full story:
>
> The log looked like this:
>
> [... this is the end of older commit, which succeeded ...]
> W: -empty_dir: cptests/branches/a_branch/src/file
> r23939 = 400e84221ca15be3976ba4dcd6d7a2eb1464b00e (refs/remotes/a_branch)
> No changes between current HEAD and refs/remotes/a_branch
> Resetting to the latest refs/remotes/a_branch
> Unstaged changes after reset:
> M       src/file
> [... next commit preparation and commit ...]
>        R       src/file
> Committed r23941
>        M       etc/file.xml
> r23940 = 420c7b2c8f155563a4f4c8e5421857846bf3ebe5 (refs/remotes/a_branch)
>        D       src/file
> [...]
> r23941 = 010c5b3883c473dd236de1a146fad1e90bd323fd (refs/remotes/a_branch)
> W: bfb909cb21e26930364331660460ccd7be355a2e and refs/remotes/a_branch
> differ, using rebase:
> :040000 040000 5df0982b1cf277dd7d915d32a9ff145554fb9c94
> a662095f06bd349c1a458d52697561ba9d005bac M      etc
> Cannot rebase: You have unstaged changes.
> Please commit or stash them.
> rebase refs/remotes/a_branch: command returned error: 1
>
> Now I was left with all the remaining changes "squashed" - git status
> showed a list of unstaged changes. So all changes not yet commited
> were in fact lost as commits and left in the working tree as one bit
> not-yet-added change.
>
> I believe the reason for this was that while I was dcommiting my
> changes someone changed the "etc/file.xml"
>
> So my previous dcommit was r23939 (src/*). Then someone else checked
> into svn r23940 (etc/file.xml). Then (or earlier) git svn dcommited
> r23941 (src/*). After that dcommit stopped with error.
>
>
> In this case I have just reset --hard and cherry-picked changes that
> were not commited, and it worked this time, but I wonder what should I
> do next time.
> What if those are not cherry-picked changes, but normal changes? Will
> I have to use reflog to get back in time?
>
> Also, I think in this case svn might continue with dcommit. It already
> commited one revision after the other-person commit. The other commit
> changed a completely different directory.
>
> Even if this is left as error, it should be possible to continue
> dcommit in an easy way. Not-commited changes should not be deleted and
> left as unstaged changes.
>
> Also, the "you have unstaged changes" error is not very helpful. I
> thought it meant it commited a change partially, or maybe some other
> weird thing happened.
>
>
> Thanks,
>
> --
> Piotr Krukowiecki
>



-- 
Piotr Krukowiecki

[-- Attachment #2: svn.txt --]
[-- Type: text/plain, Size: 1009 bytes --]

piotr@piotr-laptop:/tmp/c$ svn checkout file:///tmp/b
Pobrano wersję 0.
piotr@piotr-laptop:/tmp/c$ cd b
piotr@piotr-laptop:/tmp/c/b$ echo hi > file.txt
piotr@piotr-laptop:/tmp/c/b$ svn add file.txt
A         file.txt
piotr@piotr-laptop:/tmp/c/b$ svn commit
Dodawanie       file.txt
Przesyłanie treści pliku .
Zatwierdzona wersja 1.
piotr@piotr-laptop:/tmp/c/b$ echo svn next >> file.txt && svn commit -m "svn next"
Wysyłanie       file.txt
Przesyłanie treści pliku .
Zatwierdzona wersja 2.
piotr@piotr-laptop:/tmp/c/b$ echo svn next >> file.txt && svn commit -m "svn next"
Wysyłanie       file.txt
Przesyłanie treści pliku .
Zatwierdzona wersja 3.
piotr@piotr-laptop:/tmp/c/b$ echo svn next >> file.txt && svn commit -m "svn next"
Wysyłanie       file.txt
Przesyłanie treści pliku .
Zatwierdzona wersja 4.
piotr@piotr-laptop:/tmp/c/b$ echo svn next >> file.txt && svn commit -m "svn next"
Wysyłanie       file.txt
Przesyłanie treści pliku .
Zatwierdzona wersja 8.
piotr@piotr-laptop:/tmp/c/b$ 

[-- Attachment #3: git-svn.perl.diff --]
[-- Type: text/x-patch, Size: 247 bytes --]

diff --git a/git-svn.perl b/git-svn.perl
index bf0451b..0ea5302 100755
--- a/git-svn.perl
+++ b/git-svn.perl
@@ -650,6 +650,8 @@ sub cmd_dcommit {
 				$linear_refs = \@l;
 			}
 		}
+		print "Sleeping...\n";
+		sleep 10;
 	}
 
 	if ($old_head) {

[-- Attachment #4: git.txt --]
[-- Type: text/plain, Size: 5421 bytes --]

piotr@piotr-laptop:/tmp/d$ git svn clone file:///tmp/b
Initialized empty Git repository in /tmp/d/b/.git/
	A	file.txt
r1 = 87028a5d8fec778898be76e99ad791219cf23003 (refs/remotes/git-svn)
Checked out HEAD:
  file:///tmp/b r1
piotr@piotr-laptop:/tmp/d$ cd b
piotr@piotr-laptop:/tmp/d/b$ ls
file.txt
piotr@piotr-laptop:/tmp/d/b$ git svn info
Path: .
URL: file:///tmp/b
Repository Root: file:///tmp/b
Repository UUID: 86220547-ff96-4b00-a3f0-fa571945d0ba
Revision: 1
Node Kind: directory
Schedule: normal
Last Changed Author: piotr
Last Changed Rev: 1
Last Changed Date: 2011-04-13 20:55:23 +0200 (śro, 13 kwi 2011)

piotr@piotr-laptop:/tmp/d/b$ echo two > two.txt
piotr@piotr-laptop:/tmp/d/b$ git add two.txt
piotr@piotr-laptop:/tmp/d/b$ git commit -m two
[master 01e5e0a] two
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 two.txt
piotr@piotr-laptop:/tmp/d/b$ echo three > three.txt
piotr@piotr-laptop:/tmp/d/b$ git add three.txt
piotr@piotr-laptop:/tmp/d/b$ git commit -m three.txt
[master d284768] three.txt
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 three.txt
piotr@piotr-laptop:/tmp/d/b$ echo next >> three.txt && git add three.txt && git commit -m next
[master 0a0c0cc] next
 1 files changed, 1 insertions(+), 0 deletions(-)
piotr@piotr-laptop:/tmp/d/b$ echo next >> three.txt && git add three.txt && git commit -m next
[master 77d91f8] next
 1 files changed, 1 insertions(+), 0 deletions(-)
piotr@piotr-laptop:/tmp/d/b$ echo next >> three.txt && git add three.txt && git commit -m next
[master cea17b0] next
 1 files changed, 1 insertions(+), 0 deletions(-)
piotr@piotr-laptop:/tmp/d/b$ echo next >> three.txt && git add three.txt && git commit -m next
[master ff44044] next
 1 files changed, 1 insertions(+), 0 deletions(-)
piotr@piotr-laptop:/tmp/d/b$ git log
commit ff440444a5b8e380fb44180d86f66bb566907a53
Author: Piotr Krukowiecki <>
Date:   Wed Apr 13 21:02:21 2011 +0200

    next

commit cea17b028b195d2988ee5e4dc9da0bd4ffa5c57a
Author: Piotr Krukowiecki <>
Date:   Wed Apr 13 21:02:21 2011 +0200

    next

commit 77d91f88bf9ae81d747d80bb5c370d16e76737ff
Author: Piotr Krukowiecki <>
Date:   Wed Apr 13 21:02:20 2011 +0200

    next

commit 0a0c0cc0f6121d81392d8df80440bef429270b16
Author: Piotr Krukowiecki <>
Date:   Wed Apr 13 21:02:19 2011 +0200

    next

commit d28476865857a9fff237b29869bf21b3c83d916e
Author: Piotr Krukowiecki <>
Date:   Wed Apr 13 21:01:41 2011 +0200

    three.txt

commit 01e5e0abb9c133a6ff7ef85bbbdbc2c98229cd68
Author: Piotr Krukowiecki <>
Date:   Wed Apr 13 21:01:20 2011 +0200

    two

commit 87028a5d8fec778898be76e99ad791219cf23003
Author: piotr <piotr@86220547-ff96-4b00-a3f0-fa571945d0ba>
Date:   Wed Apr 13 18:55:23 2011 +0000

    hi
    
    
    git-svn-id: file:///tmp/b@1 86220547-ff96-4b00-a3f0-fa571945d0ba
piotr@piotr-laptop:/tmp/d/b$ git svn rebase
	M	file.txt
r2 = 1055c8a9239d7a75856f94a6479192158e1073ec (refs/remotes/git-svn)
	M	file.txt
r3 = c9c918a018d21e6af8f4b3d4e22a2aa700024eca (refs/remotes/git-svn)
First, rewinding head to replay your work on top of it...
Applying: two
Applying: three.txt
Applying: next
Applying: next
Applying: next
Applying: next
piotr@piotr-laptop:/tmp/d/b$ git svn dcommit
Committing to file:///tmp/b ...
	A	two.txt
Committed r5
	M	file.txt
r4 = 161ef277a311148c42a4391fab1531b818d6b8ba (refs/remotes/git-svn)
	A	two.txt
r5 = e2ac55eff258832e0dc7612b9a12913c861897a3 (refs/remotes/git-svn)
W: 9a64a0288d5474a78eb528c81efe38a026331fdb and refs/remotes/git-svn differ, using rebase:
:100644 100644 b77ce16c276583c177f535cde69e8764ee4a1497 928a139863b65711aa12167b81fefccfacc00d69 M	file.txt
First, rewinding head to replay your work on top of it...
Applying: three.txt
Applying: next
Applying: next
Applying: next
Applying: next
Sleeping...
	A	three.txt
Committed r6
	A	three.txt
r6 = fe11637f550e3158acf333cbd6197fbc775d9000 (refs/remotes/git-svn)
No changes between current HEAD and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
Unstaged changes after reset:
M	three.txt
Sleeping...
	M	three.txt
Committed r7
	M	three.txt
r7 = 9ebda9f54668427441daa97b0f152eb1885d266b (refs/remotes/git-svn)
No changes between current HEAD and refs/remotes/git-svn
Resetting to the latest refs/remotes/git-svn
Unstaged changes after reset:
M	three.txt
Sleeping...
	M	three.txt
Committed r9
	M	file.txt
r8 = 92bcba5a1a5be41d4393be1810bed0e9417da1a8 (refs/remotes/git-svn)
	M	three.txt
r9 = 6988d79c042c21534241e4f6e82ef29056ce69bc (refs/remotes/git-svn)
W: cdc341b381aab0ab01233bcc0b47d36acef75eb8 and refs/remotes/git-svn differ, using rebase:
:100644 100644 928a139863b65711aa12167b81fefccfacc00d69 a063167d351d2715c1a612cd0f431ac77b9eba92 M	file.txt
Cannot rebase: You have unstaged changes.
Please commit or stash them.
rebase refs/remotes/git-svn: command returned error: 1

piotr@piotr-laptop:/tmp/d/b$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   three.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
piotr@piotr-laptop:/tmp/d/b$ git log remotes/git-svn..
piotr@piotr-laptop:/tmp/d/b$ git diff
diff --git a/three.txt b/three.txt
index 7bfc0fd..ce447d2 100644
--- a/three.txt
+++ b/three.txt
@@ -1,2 +1,5 @@
 three
 next
+next
+next
+next
piotr@piotr-laptop:/tmp/d/b$

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* Re: BUG: git-svn dcommit and concurrency (Re: git svn dcommit errors all no-yet-commited changes are left squashed/uncommited?)
  2011-04-13 19:48 BUG: git-svn dcommit and concurrency (Re: git svn dcommit errors all no-yet-commited changes are left squashed/uncommited?) Piotr Krukowiecki
@ 2011-04-13 22:40 ` Eric Wong
  2011-04-14 13:05   ` Piotr Krukowiecki
  0 siblings, 1 reply; 3+ messages in thread
From: Eric Wong @ 2011-04-13 22:40 UTC (permalink / raw
  To: Piotr Krukowiecki; +Cc: Git Mailing List

Piotr Krukowiecki <piotr.krukowiecki@gmail.com> wrote:
> resending mail, this time with involved people on CC and with clearer message.

Sorry, I don't have time to deal with this in the near future.
Hopefully someone else can fix it.

-- 
Eric Wong

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: BUG: git-svn dcommit and concurrency (Re: git svn dcommit errors all no-yet-commited changes are left squashed/uncommited?)
  2011-04-13 22:40 ` Eric Wong
@ 2011-04-14 13:05   ` Piotr Krukowiecki
  0 siblings, 0 replies; 3+ messages in thread
From: Piotr Krukowiecki @ 2011-04-14 13:05 UTC (permalink / raw
  To: Eric Wong; +Cc: Git Mailing List

On Thu, Apr 14, 2011 at 12:40 AM, Eric Wong <normalperson@yhbt.net> wrote:
> Piotr Krukowiecki <piotr.krukowiecki@gmail.com> wrote:
>> resending mail, this time with involved people on CC and with clearer message.
>
> Sorry, I don't have time to deal with this in the near future.
> Hopefully someone else can fix it.

OK, I'll try to debug this more later today.

I found a blog post about how to act when dcommit fails halfway -
providing for convenience:

http://blogs.gnome.org/diegoe/2009/03/18/saving-your-neck-when-git-svn-dcommit-fails/


-- 
Piotr Krukowiecki

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-04-14 13:06 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-04-13 19:48 BUG: git-svn dcommit and concurrency (Re: git svn dcommit errors all no-yet-commited changes are left squashed/uncommited?) Piotr Krukowiecki
2011-04-13 22:40 ` Eric Wong
2011-04-14 13:05   ` Piotr Krukowiecki

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).