Why does Launchpad think my merge request has conflicts?

Asked by Richard Hansen

My request to merge lp:~a7x/lightdm/multiseat into lp:lightdm [1] is currently showing lots of conflicts. As described in a comment [2], the commit history graph is (currently) purely linear; there are no forks or merges. It looks like this:

    * <- lp:~a7x/lightdm/multiseat
    |
    *
    |
  (etc)
    |
    * <- lp:~a7x/lightdm/multiseat-logging
    |
    *
    |
  (etc)
    |
    * <- lp:~a7x/lightdm/seatunity-call-parent
    |
    * <- lp:lightdm (1.7.9)
    |
  (etc)

Since the tip commit of lp:~a7x/lightdm/multiseat is a descendant of the tip commit of lp:lightdm (as of this writing), it's impossible for there to be a merge conflict. So why does Launchpad think there is a conflict?

Note that lp:~a7x/lightdm/multiseat started out branched off of an older lp:lightdm commit. Based on feedback, I decided to rebase (NOT merge) my commits onto the latest lp:lightdm tip commit. I used 'bzr push --overwrite' (actually 'git bzr push --overwrite' since I'm much more comfortable using git with git-bzr-ng) to force the rebased commits into lp:~a7x/lightdm/multiseat. Might this rebasing have confused Launchpad?

[1] https://code.launchpad.net/~a7x/lightdm/multiseat/+merge/178477
[2] https://code.launchpad.net/~a7x/lightdm/multiseat/+merge/178477/comments/402340

Question information

Language:
English Edit question
Status:
Solved
For:
Launchpad itself Edit question
Assignee:
No assignee Edit question
Solved by:
Steve Kowalik
Solved:
Last query:
Last reply:
Revision history for this message
Best Steve Kowalik (stevenk) said :
#1

Trying the merge locally:

steven@undermined:~% bzr branch lp:lightdm
Branched 1749 revisions.
steven@undermined:~% cd lightdm
steven@undermined:~/lightdm% bzr merge lp:~a7x/lightdm/multiseat
+N src/logger.c
+N src/logger.h
+N src/mir-server.c
+N src/mir-server.h
+N src/session-config.c
+N src/session-config.h
+N src/x-authority.h
+N src/x-server-local.h
+N src/x-server-xvnc.h
+N src/x-server.h
+N tests/data/greeters/test-mir-greeter.desktop
+N tests/data/sessions/mir.desktop
+N tests/scripts/greeter-allow-guest.conf
+N tests/scripts/greeter-default-session.conf
+N tests/scripts/greeter-hide-users.conf
+N tests/scripts/greeter-show-manual-login.conf
+N tests/scripts/greeter-show-remote-login.conf
+N tests/scripts/language-env.conf
+N tests/scripts/mir-autologin.conf
+N tests/scripts/mir-greeter.conf
+N tests/scripts/mir-session.conf
+N tests/scripts/unity-mir-autologin.conf
+N tests/scripts/unity-mir-greeter-mir-session.conf
+N tests/scripts/unity-mir-greeter-x-session.conf
+N tests/scripts/unity-mir-session-x-greeter.conf
+N tests/scripts/upstart-autologin.conf
+N tests/scripts/upstart-login.conf
+N tests/scripts/xdmcp-client.conf
+N tests/src/test-mir-greeter.c
+N tests/test-greeter-allow-guest
+N tests/test-greeter-default-session
+N tests/test-greeter-hide-users
+N tests/test-greeter-show-manual-login
+N tests/test-greeter-show-remote-login
+N tests/test-language-env
+N tests/test-mir-autologin
+N tests/test-mir-greeter
+N tests/test-mir-session
+N tests/test-unity-mir-autologin
+N tests/test-unity-mir-greeter-mir-session
+N tests/test-unity-mir-greeter-x-session
+N tests/test-unity-mir-session-x-greeter
+N tests/test-upstart-autologin
+N tests/test-upstart-login
+N tests/test-xdmcp-client
+N tests/test-xdmcp-server-login
+N tests/test-xdmcp-server-open-file-descriptors
 M data/lightdm.conf
 M src/Makefile.am
 M src/display-server.c
 M src/display-server.h
 M src/greeter.c
 M src/lightdm.c
R src/mir-server.c => src/mir-server.c.moved
R src/mir-server.h => src/mir-server.h.moved
 M src/seat-unity.c
 M src/seat-xlocal.c
 M src/seat-xremote.c
 M src/seat.c
 M src/seat.h
R src/session-config.c => src/session-config.c.moved
R src/session-config.h => src/session-config.h.moved
 M src/session.c
 M src/session.h
R src/x-authority.h => src/x-authority.h.moved
 M src/x-server-local.c
R src/x-server-local.h => src/x-server-local.h.moved
 M src/x-server-xvnc.c
R src/x-server-xvnc.h => src/x-server-xvnc.h.moved
 M src/x-server.c
R src/x-server.h => src/x-server.h.moved
R tests/data/greeters/test-mir-greeter.desktop => tests/data/greeters/test-mir-greeter.desktop.moved
R tests/data/sessions/mir.desktop => tests/data/sessions/mir.desktop.moved
R tests/scripts/greeter-allow-guest.conf => tests/scripts/greeter-allow-guest.conf.moved
R tests/scripts/greeter-default-session.conf => tests/scripts/greeter-default-session.conf.moved
R tests/scripts/greeter-hide-users.conf => tests/scripts/greeter-hide-users.conf.moved
R tests/scripts/greeter-show-manual-login.conf => tests/scripts/greeter-show-manual-login.conf.moved
R tests/scripts/greeter-show-remote-login.conf => tests/scripts/greeter-show-remote-login.conf.moved
R tests/scripts/language-env.conf => tests/scripts/language-env.conf.moved
R tests/scripts/mir-autologin.conf => tests/scripts/mir-autologin.conf.moved
R tests/scripts/mir-greeter.conf => tests/scripts/mir-greeter.conf.moved
R tests/scripts/mir-session.conf => tests/scripts/mir-session.conf.moved
R tests/scripts/unity-mir-autologin.conf => tests/scripts/unity-mir-autologin.conf.moved
R tests/scripts/unity-mir-greeter-mir-session.conf => tests/scripts/unity-mir-greeter-mir-session.conf.moved
R tests/scripts/unity-mir-greeter-x-session.conf => tests/scripts/unity-mir-greeter-x-session.conf.moved
R tests/scripts/unity-mir-session-x-greeter.conf => tests/scripts/unity-mir-session-x-greeter.conf.moved
R tests/scripts/upstart-autologin.conf => tests/scripts/upstart-autologin.conf.moved
R tests/scripts/upstart-login.conf => tests/scripts/upstart-login.conf.moved
R tests/scripts/xdmcp-client.conf => tests/scripts/xdmcp-client.conf.moved
R tests/src/test-mir-greeter.c => tests/src/test-mir-greeter.c.moved
R tests/test-greeter-allow-guest => tests/test-greeter-allow-guest.moved
R tests/test-greeter-default-session => tests/test-greeter-default-session.moved
R tests/test-greeter-hide-users => tests/test-greeter-hide-users.moved
R tests/test-greeter-show-manual-login => tests/test-greeter-show-manual-login.moved
R tests/test-greeter-show-remote-login => tests/test-greeter-show-remote-login.moved
R tests/test-language-env => tests/test-language-env.moved
R tests/test-mir-autologin => tests/test-mir-autologin.moved
R tests/test-mir-greeter => tests/test-mir-greeter.moved
R tests/test-mir-session => tests/test-mir-session.moved
R tests/test-unity-mir-autologin => tests/test-unity-mir-autologin.moved
R tests/test-unity-mir-greeter-mir-session => tests/test-unity-mir-greeter-mir-session.moved
R tests/test-unity-mir-greeter-x-session => tests/test-unity-mir-greeter-x-session.moved
R tests/test-unity-mir-session-x-greeter => tests/test-unity-mir-session-x-greeter.moved
R tests/test-upstart-autologin => tests/test-upstart-autologin.moved
R tests/test-upstart-login => tests/test-upstart-login.moved
R tests/test-xdmcp-client => tests/test-xdmcp-client.moved
R tests/test-xdmcp-server-login => tests/test-xdmcp-server-login.moved
R tests/test-xdmcp-server-open-file-descriptors => tests/test-xdmcp-server-open-file-descriptors.moved
Text conflict in src/display-server.h
Conflict adding file src/mir-server.c. Moved existing file to src/mir-server.c.moved.
Conflict adding file src/mir-server.h. Moved existing file to src/mir-server.h.moved.
Text conflict in src/seat-unity.c
Text conflict in src/seat-xlocal.c
Text conflict in src/seat-xremote.c
Text conflict in src/seat.c
Conflict adding file src/session-config.c. Moved existing file to src/session-config.c.moved.
Conflict adding file src/session-config.h. Moved existing file to src/session-config.h.moved.
Text conflict in src/session.c
Text conflict in src/session.h
Path conflict: src/x-authority.h / <deleted>
Conflict adding file src/x-authority.h. Moved existing file to src/x-authority.h.moved.
Text conflict in src/x-server-local.c
Path conflict: src/x-server-local.h / <deleted>
Conflict adding file src/x-server-local.h. Moved existing file to src/x-server-local.h.moved.
Text conflict in src/x-server-xvnc.c
Path conflict: src/x-server-xvnc.h / <deleted>
Conflict adding file src/x-server-xvnc.h. Moved existing file to src/x-server-xvnc.h.moved.
Text conflict in src/x-server.c
Path conflict: src/x-server.h / <deleted>
Conflict adding file src/x-server.h. Moved existing file to src/x-server.h.moved.
Conflict adding file tests/data/greeters/test-mir-greeter.desktop. Moved existing file to tests/data/greeters/test-mir-greeter.desktop.moved.
Conflict adding file tests/data/sessions/mir.desktop. Moved existing file to tests/data/sessions/mir.desktop.moved.
Conflict adding file tests/scripts/greeter-allow-guest.conf. Moved existing file to tests/scripts/greeter-allow-guest.conf.moved.
Conflict adding file tests/scripts/greeter-default-session.conf. Moved existing file to tests/scripts/greeter-default-session.conf.moved.
Conflict adding file tests/scripts/greeter-hide-users.conf. Moved existing file to tests/scripts/greeter-hide-users.conf.moved.
Conflict adding file tests/scripts/greeter-show-manual-login.conf. Moved existing file to tests/scripts/greeter-show-manual-login.conf.moved.
Conflict adding file tests/scripts/greeter-show-remote-login.conf. Moved existing file to tests/scripts/greeter-show-remote-login.conf.moved.
Conflict adding file tests/scripts/language-env.conf. Moved existing file to tests/scripts/language-env.conf.moved.
Conflict adding file tests/scripts/mir-autologin.conf. Moved existing file to tests/scripts/mir-autologin.conf.moved.
Conflict adding file tests/scripts/mir-greeter.conf. Moved existing file to tests/scripts/mir-greeter.conf.moved.
Conflict adding file tests/scripts/mir-session.conf. Moved existing file to tests/scripts/mir-session.conf.moved.
Conflict adding file tests/scripts/unity-mir-autologin.conf. Moved existing file to tests/scripts/unity-mir-autologin.conf.moved.
Conflict adding file tests/scripts/unity-mir-greeter-mir-session.conf. Moved existing file to tests/scripts/unity-mir-greeter-mir-session.conf.moved.
Conflict adding file tests/scripts/unity-mir-greeter-x-session.conf. Moved existing file to tests/scripts/unity-mir-greeter-x-session.conf.moved.
Conflict adding file tests/scripts/unity-mir-session-x-greeter.conf. Moved existing file to tests/scripts/unity-mir-session-x-greeter.conf.moved.
Conflict adding file tests/scripts/upstart-autologin.conf. Moved existing file to tests/scripts/upstart-autologin.conf.moved.
Conflict adding file tests/scripts/upstart-login.conf. Moved existing file to tests/scripts/upstart-login.conf.moved.
Conflict adding file tests/scripts/xdmcp-client.conf. Moved existing file to tests/scripts/xdmcp-client.conf.moved.
Conflict adding file tests/src/test-mir-greeter.c. Moved existing file to tests/src/test-mir-greeter.c.moved.
Conflict adding file tests/test-greeter-allow-guest. Moved existing file to tests/test-greeter-allow-guest.moved.
Conflict adding file tests/test-greeter-default-session. Moved existing file to tests/test-greeter-default-session.moved.
Conflict adding file tests/test-greeter-hide-users. Moved existing file to tests/test-greeter-hide-users.moved.
Conflict adding file tests/test-greeter-show-manual-login. Moved existing file to tests/test-greeter-show-manual-login.moved.
Conflict adding file tests/test-greeter-show-remote-login. Moved existing file to tests/test-greeter-show-remote-login.moved.
Conflict adding file tests/test-language-env. Moved existing file to tests/test-language-env.moved.
Conflict adding file tests/test-mir-autologin. Moved existing file to tests/test-mir-autologin.moved.
Conflict adding file tests/test-mir-greeter. Moved existing file to tests/test-mir-greeter.moved.
Conflict adding file tests/test-mir-session. Moved existing file to tests/test-mir-session.moved.
Conflict adding file tests/test-unity-mir-autologin. Moved existing file to tests/test-unity-mir-autologin.moved.
Conflict adding file tests/test-unity-mir-greeter-mir-session. Moved existing file to tests/test-unity-mir-greeter-mir-session.moved.
Conflict adding file tests/test-unity-mir-greeter-x-session. Moved existing file to tests/test-unity-mir-greeter-x-session.moved.
Conflict adding file tests/test-unity-mir-session-x-greeter. Moved existing file to tests/test-unity-mir-session-x-greeter.moved.
Conflict adding file tests/test-upstart-autologin. Moved existing file to tests/test-upstart-autologin.moved.
Conflict adding file tests/test-upstart-login. Moved existing file to tests/test-upstart-login.moved.
Conflict adding file tests/test-xdmcp-client. Moved existing file to tests/test-xdmcp-client.moved.
Path conflict: tests/test-xdmcp-server-login / <deleted>
Conflict adding file tests/test-xdmcp-server-login. Moved existing file to tests/test-xdmcp-server-login.moved.
Path conflict: tests/test-xdmcp-server-open-file-descriptors / <deleted>
Conflict adding file tests/test-xdmcp-server-open-file-descriptors. Moved existing file to tests/test-xdmcp-server-open-file-descriptors.moved.
61 conflicts encountered.
zsh: exit 1 bzr merge lp:~a7x/lightdm/multiseat

I suspect you've hit the nail on the head, and that your rebase has changed your branch sufficiently enough that bzr can't work out the common ancestor.

Revision history for this message
Richard Hansen (rhansen) said :
#2

> Trying the merge locally

Ah yes, I should have done that. That did reveal that something is horribly wrong with the bzr branch, and that Launchpad itself is not to blame.

Everything looks just fine when I run 'bzr qlog' in the bad branch, so it seems like something in the repository metadata became corrupt, and this corruption spread when I pushed to Launchpad.

I started over from scratch and ended up with a branch that merges OK.

I wish Launchpad would switch to (or at least add support for) Git.

Revision history for this message
Richard Hansen (rhansen) said :
#3

Thanks Steve Kowalik, that solved my question.