How to resolve these conflicts? (Contents conflict when merging branch where ancestor changed)

Asked by Daniel Hahler

I've now merges another ancestor in a branch (same content).. it deleted all files and readded them.
There were lots of conflicts (per main dir IIRC), which I've resolved manually.

Now, when merging this branch into a branch derived from the one with the new ancestor, I'm getting lots of weird conflicts, e.g.

Conflict: can't delete blogs.moved/skins_adm because it is not empty. Not deleting.
Conflict because blogs.moved/skins_adm is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/skins_adm/login because it is not empty. Not deleting.
Conflict because blogs.moved/skins_adm/login is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/skins_adm/login/_login_form.main.php

Looking at the file, it shows the following status:

$ bzr st blogs/skins_adm/login/_login_form.main.php
added:
  blogs/
  blogs/skins_adm/
  blogs/skins_adm/login/
  blogs/skins_adm/login/_login_form.main.php
renamed:
  blogs/ => blogs.moved/
  blogs/skins_adm/login/_login_form.main.php => blogs.moved/skins_adm/login/_login_form.main.php.THIS

I'm also surprised about the "renamed" part. It should rather be removed?

This is the whole list of conflicts:
$ bzr conflicts
Conflict: can't delete blogs.moved because it is not empty. Not deleting.
Conflict adding file blogs. Moved existing file to blogs.moved.
Conflict because blogs.moved is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/conf because it is not empty. Not deleting.
Conflict because blogs.moved/conf is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/conf/_admin.php
Contents conflict in blogs.moved/conf/_advanced.php
Contents conflict in blogs.moved/conf/_formatting.php
Contents conflict in blogs.moved/favicon.ico
Conflict: can't delete blogs.moved/inc because it is not empty. Not deleting.
Conflict because blogs.moved/inc is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/inc/collections because it is not empty. Not deleting.
Conflict because blogs.moved/inc/collections is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/inc/collections/model because it is not empty. Not deleting.
Conflict because blogs.moved/inc/collections/model is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/inc/collections/model/_collsettings.class.php
Conflict: can't delete blogs.moved/inc/comments because it is not empty. Not deleting.
Conflict because blogs.moved/inc/comments is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/inc/comments/model because it is not empty. Not deleting.
Conflict because blogs.moved/inc/comments/model is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/inc/comments/model/_comment.class.php
Conflict: can't delete blogs.moved/inc/files because it is not empty. Not deleting.
Conflict because blogs.moved/inc/files is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/inc/files/model because it is not empty. Not deleting.
Conflict because blogs.moved/inc/files/model is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/inc/files/model/_image.funcs.php
Conflict: can't delete blogs.moved/inc/items because it is not empty. Not deleting.
Conflict because blogs.moved/inc/items is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/inc/items/model because it is not empty. Not deleting.
Conflict because blogs.moved/inc/items/model is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/inc/items/model/_item.class.php
Conflict: can't delete blogs.moved/inc/plugins because it is not empty. Not deleting.
Conflict because blogs.moved/inc/plugins is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/inc/plugins/_plugin.class.php
Conflict: can't delete blogs.moved/inc/users because it is not empty. Not deleting.
Conflict because blogs.moved/inc/users is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/inc/users/model because it is not empty. Not deleting.
Conflict because blogs.moved/inc/users/model is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/inc/users/model/_user.class.php
Conflict: can't delete blogs.moved/inc/widgets because it is not empty. Not deleting.
Conflict because blogs.moved/inc/widgets is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/inc/widgets/widgets because it is not empty. Not deleting.
Conflict because blogs.moved/inc/widgets/widgets is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/inc/widgets/widgets/_coll_tag_cloud.widget.php
Conflict: can't delete blogs.moved/plugins because it is not empty. Not deleting.
Conflict because blogs.moved/plugins is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/plugins/videoplug_plugin because it is not empty. Not deleting.
Conflict because blogs.moved/plugins/videoplug_plugin is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/plugins/videoplug_plugin/_videoplug.plugin.php
Conflict: can't delete blogs.moved/rsc because it is not empty. Not deleting.
Conflict because blogs.moved/rsc is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/rsc/css because it is not empty. Not deleting.
Conflict because blogs.moved/rsc/css is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/rsc/css/blog_base.css
Conflict: can't delete blogs.moved/skins because it is not empty. Not deleting.
Conflict because blogs.moved/skins is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/skins/_comments.disp.php
Contents conflict in blogs.moved/skins/_html_footer.inc.php
Conflict: can't delete blogs.moved/skins_adm because it is not empty. Not deleting.
Conflict because blogs.moved/skins_adm is not versioned, but has versioned children. Versioned directory.
Conflict: can't delete blogs.moved/skins_adm/login because it is not empty. Not deleting.
Conflict because blogs.moved/skins_adm/login is not versioned, but has versioned children. Versioned directory.
Contents conflict in blogs.moved/skins_adm/login/_login_form.main.php

Using bzr 2.0.2 on Ubuntu Karmic.

Question information

Language:
English Edit question
Status:
Solved
For:
Bazaar Edit question
Assignee:
No assignee Edit question
Solved by:
Daniel Hahler
Solved:
Last query:
Last reply:
Revision history for this message
Daniel Hahler (blueyed) said :
#1

Ok, I've solved this myself.

Starting from the bottom, we have blogs.moved/skins_adm/login/_login_form.main.php - this had been changed in the branch itself and now created a contents conflict (since the base file is completely new to this branch).
I've solved those using:

  for i in $(bzr conflicts|grep "^Contents conflict in" | cut -d' ' -f4-); do new=${i/.moved/}; diff $i.{BASE,THIS} | patch --dry-run $new && diff $i.{BASE,THIS} | patch $new && bzr resolve $i.THIS; done

(This creates a patch between BASE and THIS of the original file, applies it to the new file (which should be the same as BASE basically, then resolves the conflict)

Then, the directories containing those files could get resolved:

  for i in $(bzr conflicts|grep "Versioned directory."|awk '{print $3}'); do bzr resolve $i; done

And at the end, I've moved the files which were new to this branch (like my skin, in its own folder or blogs/conf/_basic_config.php), using "bzr mv".