Thu 02 Oct 2003 12:07:33 AM UTC, comment #2:
I updated to tla--devo--1.1--patch-188, but the problem still exists:
Patch 182 introduces sorting of "has" and "needs" lists, but this has an
effect only on changesets from the other branch (that this branch
already `has' or still `needs'). Changesets from this branch that are
already present in the other branch and should be skipped, are not
handled at this step, but later, in filter_present_logs() -- that's
where my diff would apply.
|
Thu 18 Sep 2003 11:46:44 PM UTC, original submission:
Hi,
when there is a patch to be skipped, and there also are
missing patches with a lower number of digits in the patch
level, --skip-present will not work as expected.
> patch-168 (simple changeset)
> Wed Sep 17 15:47:53 PDT 2003 Tom Lord <lord@emf.net>
> --skip-present support (rbcollins)
I just wanted to try it out, and found, that it didn't seem
to work for my special case: patches-6..12 missing, but
patch-11 containing logs already in the local tree. So
patch-11 should be skipped.
In whats-missing.c/filter_present_logs, I could see that
`unfiltered' and `to_skip' had the values:
unfiltered to_skip
patch-6 patch-11
patch-7
patch-8
patch-9
patch-10
patch-11
patch-12
Rel_join then joins the lists, including only items from
`unfiltered' that are smaller than corresponding items in
`to_skip'. But rel_join is using str_cmp, so that "patch-6" is
already greater than "patch-11", so that `to_skip' gets
incremented, and the rest of `unfiltered' just printed.
If `unfiltered' and `to_skip' were sorted before joining,
the lists would look
unfiltered to_skip
patch-10 patch-11
patch-11
patch-12
patch-6
patch-7
patch-8
patch-9
and the result of rel_join would be as expected:
------------------------------------------------------------>8----------
--- orig/libarch/whats-missing.c
+++ mod/libarch/whats-missing.c
@@ -123,7 +123,14 @@
lim_free (0, revision);
}
rel_free_table (has);
+
+ rel_sort_table_by_field (0, to_skip, 0);
+ rel_sort_table_by_field (0, unfiltered, 0);
+
answer = rel_join (1, rel_join_output (1,0, -1), 0, 0, unfiltered, to_skip);
+
+ arch_sort_table_by_patch_level_field (0, answer, 0);
+
rel_free_table (unfiltered);
rel_free_table (to_skip);
return answer;
----------8<------------------------------------------------------------
--
Michael
|