summaryrefslogtreecommitdiff
path: root/lib/git-merge-changelog.c
diff options
context:
space:
mode:
authorBruno Haible <bruno@clisp.org>2009-07-04 11:25:49 +0200
committerBruno Haible <bruno@clisp.org>2009-07-04 11:25:49 +0200
commit2d46d4a09fb157b3272729f4687dc08899076c67 (patch)
tree11a0b17965def06961d5cfd06b43afbe448c5d57 /lib/git-merge-changelog.c
parentaf26ae76eac3e090743d3effefb50dad4c19c1b4 (diff)
downloadgnulib-2d46d4a09fb157b3272729f4687dc08899076c67.tar.gz
Fix an assertion failure.
Diffstat (limited to 'lib/git-merge-changelog.c')
-rw-r--r--lib/git-merge-changelog.c65
1 files changed, 36 insertions, 29 deletions
diff --git a/lib/git-merge-changelog.c b/lib/git-merge-changelog.c
index d90a345b2e..a199f32d59 100644
--- a/lib/git-merge-changelog.c
+++ b/lib/git-merge-changelog.c
@@ -510,37 +510,44 @@ compute_mapping (struct changelog_file *file1, struct changelog_file *file2,
{
j = n2 - 1 - j;
/* Found an exact correspondence. */
- ASSERT (index_mapping_reverse[j] < 0);
- index_mapping[i] = j;
- index_mapping_reverse[j] = i;
- /* Look for more occurrences of the same entry. */
- {
- ssize_t curr_i = i;
- ssize_t curr_j = j;
-
- for (;;)
+ /* If index_mapping_reverse[j] >= 0, we have already seen other
+ copies of this entry, and there were more occurrences of it in
+ file1 than in file2. In this case, do nothing. */
+ if (index_mapping_reverse[j] < 0)
+ {
+ index_mapping[i] = j;
+ index_mapping_reverse[j] = i;
+ /* Look for more occurrences of the same entry. Match them
+ as long as they pair up. Unpaired occurrences of the same
+ entry are left without mapping. */
{
- ssize_t next_i;
- ssize_t next_j;
-
- next_i =
- gl_list_indexof_from (file1->entries_reversed, n1 - curr_i,
- entry);
- if (next_i < 0)
- break;
- next_j =
- gl_list_indexof_from (file2->entries_reversed, n2 - curr_j,
- entry);
- if (next_j < 0)
- break;
- curr_i = n1 - 1 - next_i;
- curr_j = n2 - 1 - next_j;
- ASSERT (index_mapping[curr_i] < 0);
- ASSERT (index_mapping_reverse[curr_j] < 0);
- index_mapping[curr_i] = curr_j;
- index_mapping_reverse[curr_j] = curr_i;
+ ssize_t curr_i = i;
+ ssize_t curr_j = j;
+
+ for (;;)
+ {
+ ssize_t next_i;
+ ssize_t next_j;
+
+ next_i =
+ gl_list_indexof_from (file1->entries_reversed,
+ n1 - curr_i, entry);
+ if (next_i < 0)
+ break;
+ next_j =
+ gl_list_indexof_from (file2->entries_reversed,
+ n2 - curr_j, entry);
+ if (next_j < 0)
+ break;
+ curr_i = n1 - 1 - next_i;
+ curr_j = n2 - 1 - next_j;
+ ASSERT (index_mapping[curr_i] < 0);
+ ASSERT (index_mapping_reverse[curr_j] < 0);
+ index_mapping[curr_i] = curr_j;
+ index_mapping_reverse[curr_j] = curr_i;
+ }
}
- }
+ }
}
}