test (2.0-1) unstable; urgency=low

  * Version B with 2.0-1~exp3 contains only up to line 3 while version A
    with 2.0-1 contains the 5 lines. The resulting version should have the
    5 lines without conflict with Algorithm::Merge and a conflict without.
  * Line 1.
  * Line 2.
  * Line 3.
  * Line 4.
  * Line 5.

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 18:23:09 +0200

test (2.0-1~exp3) unstable; urgency=low

  * Version B with 2.0-1~exp3 contains only up to line 3 while version A
    with 2.0-1 contains the 5 lines. The resulting version should have the
    5 lines without conflict with Algorithm::Merge and a conflict without.
  * Line 1.
  * Line 2.
  * Line 3.

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 18:23:09 +0200

test (1.2-2) unstable; urgency=low

  * This is the last entry in changelog O.

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 18:18:50 +0200

test (1.2-1) unstable; urgency=low

<<<<<<<
  * This entry should not have conflicts with Algorithm::Merge installed.
  * Changelog B should a have supplementary line above this one.
  * Pi is 3.14 is true for all changelogs.
  * Changelog A should have a supplementary line
    somewhere in this sub-list
    - The weather is nice
    - Really no clouds in the sky
    - Yet I'm hacking on dpkg
    - What does that mean about me?
  * This line should be shared but the next one is dropped in B only.
  * If I'm here it's because the changelog is not B (I should not appear
    in the resulting changelog).
=======
  * This entry should not have conflicts with Algorithm::Merge installed.
  * I'm the added line mentionned below (B-only).
  * Changelog B should a have supplementary line above this one.
  * Pi is 3.14 is true for all changelogs.
  * Changelog A should have a supplementary line
    somewhere in this sub-list
    - The weather is nice
    - Yet I'm hacking on dpkg
    - What does that mean about me?
  * This line should be shared but the next one is dropped in B only.
>>>>>>>

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 18:09:07 +0200

test (1.1-1+conflict2) unstable; urgency=low

<<<<<<<
  * This entry has a conflict on the next line.
  * I'm in changelog A.
  * This line is the same in all 3 versions.
=======
  * This entry has a conflict on the next line.
  * I'm in changelog B.
  * This line is the same in all 3 versions.
>>>>>>>

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 18:07:40 +0200

<<<<<<<
test (1.1-1+conflict1) experimental; urgency=low
=======
test (1.1-1+conflict1) unstable; urgency=high
>>>>>>>

  * This entry has conflicts on the header line: A wants distribution
    experimental (instead of unstable) and B wants urgency=high (instead
    of low).
  * But it also has a conflict on the trailer line. A changed the
    timestamp to 18:05:00 and B to 18:06:00.

<<<<<<<
 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 18:05:00 +0200
=======
 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 18:06:00 +0200
>>>>>>>

test (1.1-1+change2) unstable; urgency=low

  * This entry is everywhere but the last line is different in A. The
    merged version should have what's in A. Furthermore the timestamp in
    B is set to 17:55:00, it should also be picked up.
  * I'm definitely in changelog A.

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 17:54:52 +0200

test (1.1-1+change1) unstable; urgency=high

<<<<<<<
  * This entry is everywhere but the last line is different in B. The
    merged version should have what's in B. Furthermore the urgency in
    A is set to high, it should also be picked up.
  * I'm not in changelog B.
=======
  * This entry is everywhere but the last line is different in B. The
    merged version should have what's in B. Furthermore the urgency in
    A is set to high, it should also be picked up.
  * I'm definitely in changelog B.
>>>>>>>

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 17:50:58 +0200

test (1.0-3+b) experimental; urgency=low

  * This entry is present in B only. It's considered new and should thus
    be in the merged changelog.

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 17:47:38 +0200

test (1.0-3+a) experimental; urgency=low

  * This entry is present in A only. It's considered new and should thus
    be in the merged changelog.

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 17:44:39 +0200

test (1.0-1) unstable; urgency=low

  * Initial release. (Closes: #XXXXXX)

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 17:37:46 +0200
