I ran into this today by accident. It's even more confusing with a 2a repository as "bzr status" incorrectly reports the merged file as renamed and tells you to update. If you then update you either get a conflict and an error (2.0.3), a crash (2.0.4) or a different error (2.1.0rc1). Revert may then crash too.
Since it sounds like this is pretty hard to fix can we not make it detect you're merging into an empty branch and just abort the merge altogether (with a friendly error message)?
Current behaviour with 2.0.3:
> bzr init branch1
Created a standalone tree (format: 2a)
> bzr init branch2
Created a standalone tree (format: 2a)
> cd branch1
> touch test
> bzr add test
adding test
> bzr commit -m "test"
Committing to: /Users/garethw/Programming/Bazaar/branch1/
added test
Committed revision 1.
> cd ../branch2
> bzr merge ../branch1
+N test
All changes applied successfully.
> bzr status
working tree is out of date, run 'bzr update'
renamed:
test => test
> bzr update
-D test
Path conflict: test / test
1 conflicts encountered.
bzr: ERROR: Reserved revision-id {null:}
> bzr revert
bzr: ERROR: exceptions.ValueError: Cannot have multiple roots.
Traceback (most recent call last):
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/commands.py", line 842, in exception_to_return_code
return the_callable(*args, **kwargs)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/commands.py", line 1037, in run_bzr
ret = run(*run_argv)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/commands.py", line 654, in run_argv_aliases
return self.run(**all_cmd_args)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/builtins.py", line 4053, in run
self._revert_tree_to_revision(tree, revision, file_list, no_backup)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/builtins.py", line 4063, in _revert_tree_to_revision
report_changes=True)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/mutabletree.py", line 53, in tree_write_locked
return unbound(self, *args, **kwargs)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/workingtree.py", line 2067, in revert
report_changes)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/transform.py", line 2510, in revert
working_tree, target_tree, tt, filenames, backups, pp)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/transform.py", line 2537, in _prepare_revert_transform
merge_modified, basis_tree)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/transform.py", line 2639, in _alter_files
tt.adjust_path(name[1], parent_trans, trans_id)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/transform.py", line 1074, in adjust_path
TreeTransformBase.adjust_path(self, name, parent, trans_id)
File "/Users/garethw/Programming/Bazaar/bzr-repo/2.0.3/bzrlib/transform.py", line 170, in adjust_path
raise ValueError("Cannot have multiple roots.")
ValueError: Cannot have multiple roots.
With 2.0.4, it's the same until the update:
> bzr update
bzr: ERROR: exceptions.ValueError: WorkingTree.set_root_id with fileid=None
Traceback (most recent call last):
File "/Users/garethw/Programming/Bazaar/bzr-repo/bzr-2.0/bzrlib/commands.py", line 842, in exception_to_return_code
File "/Users/garethw/Programming/Bazaar/bzr-repo/bzr-2.0/bzrlib/commands.py", line 1037, in run_bzr
File "/Users/garethw/Programming/Bazaar/bzr-repo/bzr-2.0/bzrlib/commands.py", line 654, in run_argv_aliases
File "/Users/garethw/Programming/Bazaar/bzr-repo/bzr-2.0/bzrlib/builtins.py", line 1413, in run
File "/Users/garethw/Programming/Bazaar/bzr-repo/bzr-2.0/bzrlib/workingtree.py", line 2217, in update
File "/Users/garethw/Programming/Bazaar/bzr-repo/bzr-2.0/bzrlib/mutabletree.py", line 53, in tree_write_locked
File "/Users/garethw/Programming/Bazaar/bzr-repo/bzr-2.0/bzrlib/workingtree.py", line 2252, in _update_tree
File "/Users/garethw/Programming/Bazaar/bzr-repo/bzr-2.0/bzrlib/mutabletree.py", line 53, in tree_write_locked
File "/Users/garethw/Programming/Bazaar/bzr-repo/bzr-2.0/bzrlib/workingtree.py", line 2140, in set_root_id
ValueError: WorkingTree.set_root_id with fileid=None
With 2.1.0rc1:
> bzr update
bzr: ERROR: branch has no revision null:
bzr update --revision only works for a revision in the branch history
> bzr revert
- /
R test => test
> bzr status
working tree is out of date, run 'bzr update'
> bzr update
bzr: ERROR: branch has no revision null:
bzr update --revision only works for a revision in the branch history
I ran into this today by accident. It's even more confusing with a 2a repository as "bzr status" incorrectly reports the merged file as renamed and tells you to update. If you then update you either get a conflict and an error (2.0.3), a crash (2.0.4) or a different error (2.1.0rc1). Revert may then crash too.
Since it sounds like this is pretty hard to fix can we not make it detect you're merging into an empty branch and just abort the merge altogether (with a friendly error message)?
Current behaviour with 2.0.3: garethw/ Programming/ Bazaar/ branch1/ ValueError: Cannot have multiple roots.
> bzr init branch1
Created a standalone tree (format: 2a)
> bzr init branch2
Created a standalone tree (format: 2a)
> cd branch1
> touch test
> bzr add test
adding test
> bzr commit -m "test"
Committing to: /Users/
added test
Committed revision 1.
> cd ../branch2
> bzr merge ../branch1
+N test
All changes applied successfully.
> bzr status
working tree is out of date, run 'bzr update'
renamed:
test => test
> bzr update
-D test
Path conflict: test / test
1 conflicts encountered.
bzr: ERROR: Reserved revision-id {null:}
> bzr revert
bzr: ERROR: exceptions.
Traceback (most recent call last): garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ commands. py", line 842, in exception_ to_return_ code garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ commands. py", line 1037, in run_bzr garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ commands. py", line 654, in run_argv_aliases **all_cmd_ args) garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ builtins. py", line 4053, in run _revert_ tree_to_ revision( tree, revision, file_list, no_backup) garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ builtins. py", line 4063, in _revert_ tree_to_ revision changes= True) garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ mutabletree. py", line 53, in tree_write_locked garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ workingtree. py", line 2067, in revert garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ transform. py", line 2510, in revert garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ transform. py", line 2537, in _prepare_ revert_ transform garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ transform. py", line 2639, in _alter_files adjust_ path(name[ 1], parent_trans, trans_id) garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ transform. py", line 1074, in adjust_path rmBase. adjust_ path(self, name, parent, trans_id) garethw/ Programming/ Bazaar/ bzr-repo/ 2.0.3/bzrlib/ transform. py", line 170, in adjust_path
File "/Users/
return the_callable(*args, **kwargs)
File "/Users/
ret = run(*run_argv)
File "/Users/
return self.run(
File "/Users/
self.
File "/Users/
report_
File "/Users/
return unbound(self, *args, **kwargs)
File "/Users/
report_changes)
File "/Users/
working_tree, target_tree, tt, filenames, backups, pp)
File "/Users/
merge_modified, basis_tree)
File "/Users/
tt.
File "/Users/
TreeTransfo
File "/Users/
raise ValueError("Cannot have multiple roots.")
ValueError: Cannot have multiple roots.
With 2.0.4, it's the same until the update: ValueError: WorkingTree. set_root_ id with fileid=None
> bzr update
bzr: ERROR: exceptions.
Traceback (most recent call last): garethw/ Programming/ Bazaar/ bzr-repo/ bzr-2.0/ bzrlib/ commands. py", line 842, in exception_ to_return_ code garethw/ Programming/ Bazaar/ bzr-repo/ bzr-2.0/ bzrlib/ commands. py", line 1037, in run_bzr garethw/ Programming/ Bazaar/ bzr-repo/ bzr-2.0/ bzrlib/ commands. py", line 654, in run_argv_aliases garethw/ Programming/ Bazaar/ bzr-repo/ bzr-2.0/ bzrlib/ builtins. py", line 1413, in run garethw/ Programming/ Bazaar/ bzr-repo/ bzr-2.0/ bzrlib/ workingtree. py", line 2217, in update garethw/ Programming/ Bazaar/ bzr-repo/ bzr-2.0/ bzrlib/ mutabletree. py", line 53, in tree_write_locked garethw/ Programming/ Bazaar/ bzr-repo/ bzr-2.0/ bzrlib/ workingtree. py", line 2252, in _update_tree garethw/ Programming/ Bazaar/ bzr-repo/ bzr-2.0/ bzrlib/ mutabletree. py", line 53, in tree_write_locked garethw/ Programming/ Bazaar/ bzr-repo/ bzr-2.0/ bzrlib/ workingtree. py", line 2140, in set_root_id set_root_ id with fileid=None
File "/Users/
File "/Users/
File "/Users/
File "/Users/
File "/Users/
File "/Users/
File "/Users/
File "/Users/
File "/Users/
ValueError: WorkingTree.
With 2.1.0rc1:
> bzr update
bzr: ERROR: branch has no revision null:
bzr update --revision only works for a revision in the branch history
> bzr revert
- /
R test => test
> bzr status
working tree is out of date, run 'bzr update'
> bzr update
bzr: ERROR: branch has no revision null:
bzr update --revision only works for a revision in the branch history