#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 Tailor@lists.zooko.com http://lists.zooko.com/mailman/listinfo/tailor