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

Reply via email to