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 (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).

 -- 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.

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

test (1.1-1+conflict1) experimental; urgency=low

  * 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

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.

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 17:50:58 +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-2) unstable; urgency=low

  * This entry is dropped in B only.
  * Since it's in O and A, it should not appear in the result.
  * Pi is 3.14.

 -- Raphaël Hertzog <hertzog@debian.org>  Sun, 18 Apr 2010 17:39:15 +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
