Interrupting commit can mark files as removed
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Bazaar |
Fix Released
|
High
|
John A Meinel | ||
2.0 |
Fix Released
|
Medium
|
John A Meinel | ||
bzr (Ubuntu) |
Fix Released
|
Undecided
|
Unassigned |
Bug Description
When you interrupt a commit to a smart server using ctrl-C, occasionally it will remove a directory of files and commit the change. (This may also happen without using a smart server but I haven't tested that.) As with bug 495011 this is difficult to reproduce as it depends on the timing.
See the attached log for more detail. Note that the log doesn't seem to mention the interrupt. In the process output you get something like:
Committing to: bzr://localhost
Exception exceptions.
missing dir1
modified dir1
missing dir1/file1.txt
modified dir1/file1.txt
missing dir1/file2.txt
modified dir1/file2.txt
missing dir1/file3.txt
modified dir1/file3.txt
Committed revision 3153.
I've reproduced this with Bazaar 2.0.1 and 2.1.0b3 using Python 2.5 on Windows XP SP3.
To reproduce:
Set up a branch with a few thousand files at .\testrepo\branch1
start bzr serve --allow-writes
bzr checkout --lightweight bzr://localhost
cd branch1
Now repeat the following and eventually you'll see it remove a random directory of files:
bzr commit -m "test" --unchanged
Hit ctrl-C sometime after the "Committing to:" message appears.
Related branches
- Martin Pool: Approve
- John A Meinel: Approve
-
Diff: 103 lines (+20/-7)2 files modifiedNEWS (+4/-0)
bzrlib/_readdir_pyx.pyx (+16/-7)
- Andrew Bennetts: Approve
-
Diff: 71 lines (+26/-2)3 files modifiedNEWS (+4/-0)
bzrlib/_dirstate_helpers_pyx.pyx (+2/-1)
bzrlib/tests/test__dirstate_helpers.py (+20/-1)
Changed in bzr: | |
status: | Confirmed → Fix Committed |
summary: |
- Interrupting commit to smart server sometimes removes files + Interrupting commit can mark files as removed |
Changed in bzr: | |
assignee: | nobody → John A Meinel (jameinel) |
milestone: | none → 2.1.0rc1 |
Changed in bzr: | |
status: | Fix Committed → Fix Released |
Changed in bzr (Ubuntu): | |
status: | New → Fix Released |
'Remove' in the sense of 'deletes them from the working tree'? And this can really be reproduced by commits that don't change anything?