Conflicts: CHANGELOG.txt cms/admin/pageadmin.py cms/locale/zh_CN.GB2312/LC_MESSAGES/django.mo cms/locale/zh_CN.GB2312/LC_MESSAGES/django.po cms/locale/zh_CN.GB2312/LC_MESSAGES/djangojs.mo cms/locale/zh_CN.GB2312/LC_MESSAGES/djangojs.po docs/upgrade/index.rst
Conflicts: CHANGELOG.txt cms/admin/change_list.py cms/cms_toolbar.py cms/menu.py cms/templatetags/cms_tags.py cms/test_utils/project/sampleapp/menu.py cms/test_utils/project/sampleapp/urls.py cms/test_utils/project/sampleapp/views.py cms/tests/apphooks.py cms/tests/menu.py cms/tests/multilingual.py cms/tests/placeholder.py cms/tests/toolbar.py cms/utils/plugins.py menus/menu_pool.py menus/templatetags/menu_tags.py setup.py test_requirements/django-1.4.txt test_requirements/django-1.5.txt test_requirements/requirements_base.txt
This issue here was that *sometimes* when, we're unlucky, the wrong publisher version (draft, public) was getting marked as "selected", which then later was being pruned out of the set of nodes. The solution is to mark both versions as selected and let the "wrong" one be pruned, leaving the good one in.
To be honest, this work probably enables some features to work as they were expected to work in the first place, even without considering apphook_configs. For example, if previously, someone wanted to attach the same CMSAttachMenu to multiple apphooks, or directly to multiple pages, it would have not worked. It may now. Still need to write tests (and run existing).
MenuPool.get_menus_by_attribute(): The value parameter shouldn't be None so the hasattr() call was dropped.