Comment 15 for bug 304134

Revision history for this message
Wesley J. Landaker (wjl) wrote : Re: KeyError when updating lightweight bzr-svn checkout

Okay, I've got a reproduction recipe. This happens when a directory is moved with simultaneous modifications from being a peer to being a child.

Here we go. There are still a couple print lines in update_map that I've left in just to better see what is failing.

$ mkdir /tmp/bzr-svn-304134
$ cd /tmp/bzr-svn-304134
$ svnadmin create svn-repos
$ svn co file://`pwd`/svn-repos svn-co
$ cd svn-co/
$ svn mkdir subdir1 subdir2
A subdir1
A subdir2
$ cd subdir1
$ touch file1 file2
$ svn add *
A file1
A file2
$ cd ..
$ cd subdir2/
$ touch file3 file4
$ svn add *
A file3
A file4
$ cd ..
$ svn commit -m "Initial tree."
Adding subdir1
Adding subdir1/file1
Adding subdir1/file2
Adding subdir2
Adding subdir2/file3
Adding subdir2/file4
Transmitting file data ....cd
Committed revision 1.
$ cd subdir1/
$ svn mkdir subdir3
A subdir3
$ touch subdir3/file5
$ touch subdir3/file6
$ svn add subdir3/*
A subdir3/file5
A subdir3/file6
$ svn commit -m "More files."
Adding subdir1/subdir3
Adding subdir1/subdir3/file5
Adding subdir1/subdir3/file6
Transmitting file data ..
Committed revision 2.
$ cd ..
$ ls
subdir1 subdir2
$ cd subdir2/
$ vi file3 # add a line
$ vi file4 # add a line
$ touch file7
$ svn add file7
A file7
$ svn ps svn:executable true file4
property 'svn:executable' set on 'file4'
$ svn status
M file3
MM file4
A file7
$ cd ..
$ svn status
M subdir2/file3
MM subdir2/file4
A subdir2/file7
$ svn mv subdir2/ subdir1/
A subdir1/subdir2
D subdir2/file3
D subdir2/file4
D subdir2/file7
D subdir2
$ svn status
A + subdir1/subdir2
M + subdir1/subdir2/file3
MM + subdir1/subdir2/file4
A + subdir1/subdir2/file7
D subdir2
D subdir2/file3
D subdir2/file4
$ svn commit -m "Directory move with modifications."
Adding subdir1/subdir2
Sending subdir1/subdir2/file3
Sending subdir1/subdir2/file4
Adding subdir1/subdir2/file7
Deleting subdir2
Transmitting file data ...
Committed revision 3.
$ ls
subdir1
$ svn up
At revision 3.
$ bzr up
Initialising Subversion metadata cache in /home/wjlanda/.bazaar/svn-cache/5ba257ea-9eb4-402c-af49-55ecc81b2ba0
revid = svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0::0
delta = {u'': '0@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2F'}
update_map top
revid = svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0::1
delta = {u'subdir2': '1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir2', u'subdir1': '1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir1', u'subdir2/file3': '1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir2%2Ffile3', u'subdir2/file4': '1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir2%2Ffile4', u'subdir1/file2': '1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir1%2Ffile2', u'subdir1/file1': '1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir1%2Ffile1'}
update_map top
revid = svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0::2
delta = {u'subdir1/subdir3': '2@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir1%2Fsubdir3', u'subdir1/subdir3/file5': '2@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir1%2Fsubdir3%2Ffile5', u'subdir1/subdir3/file6': '2@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir1%2Fsubdir3%2Ffile6'}
update_map top
revid = svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0::3
delta = {u'subdir1/subdir2/file4': '3@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir1%2Fsubdir2%2Ffile4', u'subdir1/subdir2': '3@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir1%2Fsubdir2', u'subdir1/subdir2/file7': '3@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir1%2Fsubdir2%2Ffile7', u'subdir2': None, u'subdir1/subdir2/file3': '3@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:%2Fsubdir1%2Fsubdir2%2Ffile3'}
Tree is up to date at revision 4.
$ cd subdir1/
$ bzr up
update_map top
revid = svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1:1
delta = {u'': '1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2F', u'file2': '1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Ffile2', u'file1': '1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Ffile1'}
update_map top
revid = svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1:2
delta = {u'subdir3': '2@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Fsubdir3', u'subdir3/file6': '2@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Fsubdir3%2Ffile6', u'subdir3/file5': '2@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Fsubdir3%2Ffile5'}
update_map top
revid = svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1:3
delta = {u'subdir2': '3@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Fsubdir2', u'subdir2/file7': '3@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Fsubdir2%2Ffile7'}
--------------------------------
in update_map:
--------------------------------
map = {u'': ('1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2F', 'svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1:1'), u'file2': ('1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Ffile2', 'svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1:1'), u'file1': ('1@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Ffile1', 'svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1:1'), u'subdir3': ('2@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Fsubdir3', 'svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1:2'), u'subdir3/file5': ('2@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Fsubdir3%2Ffile5', 'svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1:2'), u'subdir3/file6': ('2@5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1%2Fsubdir3%2Ffile6', 'svn-v4:5ba257ea-9eb4-402c-af49-55ecc81b2ba0:subdir1:2')}
--------------------------------
p = subdir2/file3
--------------------------------
bzr: ERROR: exceptions.KeyError: 'subdir2/file3'

Traceback (most recent call last):
  File "/usr/lib/python2.5/site-packages/bzrlib/commands.py", line 893, in run_bzr_catch_errors
    return run_bzr(argv)
  File "/usr/lib/python2.5/site-packages/bzrlib/commands.py", line 839, in run_bzr
    ret = run(*run_argv)
  File "/usr/lib/python2.5/site-packages/bzrlib/commands.py", line 539, in run_argv_aliases
    return self.run(**all_cmd_args)
  File "/usr/lib/python2.5/site-packages/bzrlib/builtins.py", line 1127, in run
    tree = WorkingTree.open_containing(dir)[0]
  File "/usr/lib/python2.5/site-packages/bzrlib/workingtree.py", line 327, in open_containing
    return control.open_workingtree(), relpath
  File "/home/wjlanda/.bazaar/plugins/svn/workingtree.py", line 815, in open_workingtree
    return SvnWorkingTree(self, self.local_path, self.open_branch())
  File "/home/wjlanda/.bazaar/plugins/svn/workingtree.py", line 113, in __init__
    self._update_base_revnum(max_rev)
  File "/home/wjlanda/.bazaar/plugins/svn/workingtree.py", line 541, in _update_base_revnum
    self.read_working_inventory()
  File "/home/wjlanda/.bazaar/plugins/svn/workingtree.py", line 412, in read_working_inventory
    add_dir_to_inv(u"", rootwc, None)
  File "/home/wjlanda/.bazaar/plugins/svn/workingtree.py", line 374, in add_dir_to_inv
    (id, revid) = find_ids(entry, rootwc)
  File "/home/wjlanda/.bazaar/plugins/svn/workingtree.py", line 351, in find_ids
    relpath)
  File "/home/wjlanda/.bazaar/plugins/svn/workingtree.py", line 278, in path_to_file_id
    entry = self.basis_tree().id_map[rp.decode("utf-8")]
  File "/home/wjlanda/.bazaar/plugins/svn/workingtree.py", line 533, in basis_tree
    self.base_tree = SvnBasisTree(self)
  File "/home/wjlanda/.bazaar/plugins/svn/tree.py", line 232, in __init__
    workingtree.branch.mapping)
  File "/home/wjlanda/.bazaar/plugins/svn/repository.py", line 432, in get_fileid_map
    return self.fileid_map.get_map(revmeta.get_foreign_revid(), mapping)
  File "/home/wjlanda/.bazaar/plugins/svn/fileids.py", line 314, in get_map
    self.actual.update_map(map, revid, idmap, changes)
  File "/home/wjlanda/.bazaar/plugins/svn/fileids.py", line 209, in update_map
    print 'map[p] =', map[p]
KeyError: 'subdir2/file3'

bzr 1.10 on python 2.5.2 (linux2)
arguments: ['/usr/bin/bzr', 'up']
encoding: 'UTF-8', fsenc: 'UTF-8', lang: 'en_US.UTF-8'
plugins:
  bzrtools /usr/lib/python2.5/site-packages/bzrlib/plugins/bzrtools [1.10]
  cvsps_import /usr/lib/python2.5/site-packages/bzrlib/plugins/cvsps_import [unknown]
  gtk /usr/lib/python2.5/site-packages/bzrlib/plugins/gtk [0.96.0.dev.1]
  launchpad /usr/lib/python2.5/site-packages/bzrlib/plugins/launchpad [unknown]
  loom /usr/lib/python2.5/site-packages/bzrlib/plugins/loom [1.4dev]
  rebase /usr/lib/python2.5/site-packages/bzrlib/plugins/rebase [0.3]
  search /usr/lib/python2.5/site-packages/bzrlib/plugins/search [1.6.0.dev.3]
  stats /usr/lib/python2.5/site-packages/bzrlib/plugins/stats [unknown]
  svn /home/wjlanda/.bazaar/plugins/svn [0.5.0.rc.1]
  upload /usr/lib/python2.5/site-packages/bzrlib/plugins/upload [0.1]
*** Bazaar has encountered an internal error.
    Please report a bug at https://bugs.launchpad.net/bzr/+filebug
    including this traceback, and a description of what you
    were doing when the error occurred.

I'm also attaching the example tree in case it's helpful.