#163: Failed Git target nested renames [PATCH]
---------------------------------+------------------------------------------
Reporter: jhs | Owner: lele
Type: defect | Status: new
Priority: major | Milestone: VersionOne
Component: git | Version: 0.9
Keywords: git rename disjunct |
---------------------------------+------------------------------------------
The Git target (and possibly the SynchronizableTargetWorkingDir class do
not handle renaming correctly when a single commit both renames a
directory, and also renames a file within that directory. For example:
{{{
$ mkdir bzrproj
$ cd bzrproj
$ bzr init
$ mkdir Original-Dir
$ touch Original-Dir/Original-File
$ bzr add
$ bzr ci -m 'Original layout'
$ bzr mv Original-Dir New-Dir
$ bzr mv New-Dir/Original-File New-Dir/New-File
$ bzr ci -m 'New layout'
$ cd ..
$ cat > tailor.conf <<EOF
[project]
source = bzr:proj
target = git:proj
start-revision = INITIAL
state-file = tailor.state
[bzr:proj]
repository = bzrproj
subdir = bzr-source
[git:proj]
subdir = git-target
EOF
$ tailor --configfile tailor.conf
18:29:58 [C] Couldn't replay changeset:
Revision: [EMAIL PROTECTED]
Date: 2008-06-27 18:18:47.900000+07:00
Author: Jason Smith <[EMAIL PROTECTED]>
Entries: New-Dir[DIR](REN from Original-Dir), New-Dir/New-File(REN from
New-Dir/Original-File)
Log: New layout
18:29:58 [C] Upstream change application failed: /tmp/j/git-target $ git
mv New-Dir/Original-File New-Dir/New-File failed
18:29:58 [C] Something unexpected!
Traceback (most recent call last):
File "build/bdist.linux-i686/egg/vcpx/tailor.py", line 156, in __call__
self.update()
File "build/bdist.linux-i686/egg/vcpx/tailor.py", line 120, in update
applyable=self._applyable, applied=self._applied)
File "build/bdist.linux-i686/egg/vcpx/dualwd.py", line 102, in
applyPendingChangesets
applied=applied)
File "build/bdist.linux-i686/egg/vcpx/source.py", line 136, in
applyPendingChangesets
replay(c)
File "build/bdist.linux-i686/egg/vcpx/dualwd.py", line 113, in
replayChangeset
self.target.replayChangeset(changeset)
File "build/bdist.linux-i686/egg/vcpx/target.py", line 134, in
replayChangeset
self._replayChangeset(changeset)
File "build/bdist.linux-i686/egg/vcpx/target.py", line 336, in
_replayChangeset
action(group)
File "build/bdist.linux-i686/egg/vcpx/target.py", line 502, in
_renameEntries
self._renamePathname(e.old_name, e.name)
File "build/bdist.linux-i686/egg/vcpx/repository/git/target.py", line
279, in _renamePathname
self.repository.runCommand(['mv', oldname, newname])
File "build/bdist.linux-i686/egg/vcpx/repository/git/__init__.py", line
77, in runCommand
Exception: /tmp/j/git-target $ git mv New-Dir/Original-File New-Dir/New-
File failed
}}}
I have attached a couple of patches (both require my patches from #162 and
#161) which fixes the problem for me.
--
Ticket URL: <http://progetti.arstecnica.it/tailor/ticket/163>
Tailor <http://progetti.arstecnica.it/tailor>
An inter-VCs changeset exchanger
_______________________________________________
Tailor mailing list
[email protected]
http://lists.zooko.com/mailman/listinfo/tailor