Hi,
Sorry, my patch was completely broken. Here is a revised one.
I confirmed it works as expected with satellite-5.2.0 at least. I'm not
sure about spacewalk but it should be the same, I guess.
Could you anyone please look at it?
- satoru
On Wed, Dec 17, 2008 at 06:45:04PM +0900, Satoru SATOH wrote:
> I and my associate came across an inconsistency in advisory name
> generation rule while trying to cloning errata in rhn-satellite. And I
> found that spacewalk also has this inconsistency between the following
> codes.
>
> a. ErrataFactory.createClone in
> java/code/src/com/redhat/rhn/domain/errata/ErrataFactory.java
>
> b. PublishErrataHelper.cloneErrataFast in
>
> java/code/src/com/redhat/rhn/frontend/action/channel/manage/PublishErrataHelper.java
>
> c. find_next_advisory in web/modules/rhn/RHN/DB/ErrataEditor.pm
>
> The rule in a and b (both are in java) looks the same but c (perl) is
> completely different from them.
>
> a and b: CLSA-2008:0580 -> CLSA-2008:0580-1, CLSA-2008:0580-2, ...
>
> c: CLSA-2008:0580 -> CMSA-2008:0580, CNSA-2008:0580, ...,
> RISA-2008:0580, ... ZZSA-2008:0580, AAASA-2008:0580, ...
>
> Here is an experimental fix for this issue to change c's rule, not
> tested in actual. (i'm not a perl monger so that it even might have
> errors and not work).
web/modules/rhn/RHN/DB/ErrataEditor.pm | 17 ++++++++++++-----
1 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/web/modules/rhn/RHN/DB/ErrataEditor.pm
b/web/modules/rhn/RHN/DB/ErrataEditor.pm
index d19d2b0..75dc1d0 100644
--- a/web/modules/rhn/RHN/DB/ErrataEditor.pm
+++ b/web/modules/rhn/RHN/DB/ErrataEditor.pm
@@ -303,17 +303,24 @@ EOQ
sub find_next_advisory {
my $adv = shift || '';
my $adv_name = shift || '';
+ my $suffix = '';
+ my $i = 1;
substr($adv, 0, 2) = 'CL';
substr($adv_name, 0, 2) = 'CL';
- while (advisory_exists($adv)) {
- substr($adv, 0, 2)++;
- }
+ if (advisory_exists($adv) || advisory_name_exists($adv_name)) {
+ $suffix = sprintf("-%u", $i++);
+ $adv = $adv . $suffix;
+ $adv_name = $adv_name . $suffix;
- while (advisory_name_exists($adv_name)) {
- substr($adv_name, 0, 2)++;
+ while (advisory_exists($adv) || advisory_name_exists($adv_name)) {
+ substr($adv, -1, 1) = $i;
+ substr($adv_name, -1, 1) = $i;
+ $i++;
+ }
}
+
return ($adv, $adv_name);
}
_______________________________________________
Spacewalk-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/spacewalk-devel