rel-eng/packages/spacewalk-web | 2
web/modules/rhn/RHN/DB/ErrataEditor.pm | 68 +++++++++++++++----
web/modules/sniglets/Sniglets/ListView/ErrataList.pm | 2
web/spacewalk-web.spec | 5 +
4 files changed, 61 insertions(+), 16 deletions(-)
New commits:
commit 392790f1d88df96f4f17bfa1b294ca752c60924e
Author: Miroslav Suchý <msuchy(a)redhat.com>
Date: Mon Apr 23 17:25:17 2012 +0200
Automatic commit of package [spacewalk-web] release [1.8.12-1].
diff --git a/rel-eng/packages/spacewalk-web b/rel-eng/packages/spacewalk-web
index 4d20a7f..881ce8a 100644
--- a/rel-eng/packages/spacewalk-web
+++ b/rel-eng/packages/spacewalk-web
@@ -1 +1 @@
-1.8.11-1 web/
+1.8.12-1 web/
diff --git a/web/spacewalk-web.spec b/web/spacewalk-web.spec
index 685d78a..2f62926 100644
--- a/web/spacewalk-web.spec
+++ b/web/spacewalk-web.spec
@@ -2,7 +2,7 @@ Name: spacewalk-web
Summary: Spacewalk Web site - Perl modules
Group: Applications/Internet
License: GPLv2
-Version: 1.8.11
+Version: 1.8.12
Release: 1%{?dist}
URL:
https://fedorahosted.org/spacewalk/
Source0:
https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -254,6 +254,9 @@ rm -rf $RPM_BUILD_ROOT
# $Id$
%changelog
+* Mon Apr 23 2012 Miroslav Suchý <msuchy(a)redhat.com> 1.8.12-1
+- Fix errata clone name generation in perl code
+
* Thu Apr 19 2012 Jan Pazdziora 1.8.11-1
- Removed double-dash from copyright notice on error pages.
commit 41ee9a76ec59496c120a4dfae08a87e93f752633
Author: Johannes Renner <jrenner(a)suse.de>
Date: Mon Apr 23 14:15:01 2012 +0200
Fix errata clone name generation in perl code
diff --git a/web/modules/rhn/RHN/DB/ErrataEditor.pm
b/web/modules/rhn/RHN/DB/ErrataEditor.pm
index b295563..d175a75 100644
--- a/web/modules/rhn/RHN/DB/ErrataEditor.pm
+++ b/web/modules/rhn/RHN/DB/ErrataEditor.pm
@@ -153,24 +153,47 @@ EOQ
return ($new_eid);
}
+# This duplicates the algorithm in PublishErrataHelper.java
sub find_next_advisory {
my $adv = shift || '';
my $adv_name = shift || '';
- my $suffix = '';
- my $i = 1;
+ my $eid = shift;
- $adv = 'CL' . substr($adv, 2);
- $adv_name = 'CL' . substr($adv_name, 2);
+ # Set adv equal to adv_name if unset
+ unless ($adv) {
+ $adv = $adv_name;
+ }
- if (advisory_exists($adv) || advisory_name_exists($adv_name)) {
- $suffix = sprintf("-%u", $i++);
- $adv = $adv . $suffix;
- $adv_name = $adv_name . $suffix;
+ if (not erratum_is_clone($eid)) {
+ # For RH errata, replace 'RH' with 'CL-', else prepend
+ if ('RH' eq substr($adv_name, 0, 2)) {
+ $adv = 'CL-' . substr($adv, 2);
+ $adv_name = 'CL-' . substr($adv_name, 2);
+ } else {
+ $adv = 'CL-' . $adv;
+ $adv_name = 'CL-' . $adv_name;
+ }
+ } else {
+ # Erratum is a clone, prepend 'CL-', if there is no prefix yet
+ if ('-' ne substr($adv, 2, 1) || '-' ne substr($adv_name, 2, 1)) {
+ $adv = 'CL-' . $adv;
+ $adv_name = 'CL-' . $adv_name;
+ }
+ }
- while (advisory_exists($adv) || advisory_name_exists($adv_name)) {
- substr($adv, -1, 1) = $i;
- substr($adv_name, -1, 1) = $i;
- $i++;
+ # Find the next valid advisory name that doesn't exist yet
+ while (advisory_exists($adv) || advisory_name_exists($adv_name)) {
+ my $c1 = substr($adv, 1, 1);
+ if ('Z' eq $c1) {
+ # Get the next c0
+ my $c0next = ++substr($adv, 0, 1);
+ $adv = $c0next . 'A' . substr($adv, 2);
+ $adv_name = $c0next . 'A' . substr($adv_name, 2);
+ } else {
+ # Get the next c1
+ my $c1next = ++$c1;
+ $adv = substr($adv, 0, 1) . $c1next . substr($adv, 2);
+ $adv_name = substr($adv_name, 0, 1) . $c1next . substr($adv_name, 2);
}
}
@@ -200,7 +223,7 @@ sub clone_into_org {
my $adv = $new->advisory;
my $adv_name = $new->advisory_name;
- ($adv, $adv_name) = find_next_advisory($adv, $adv_name);
+ ($adv, $adv_name) = find_next_advisory($adv, $adv_name, $old_eid);
$new->advisory($adv);
$new->advisory_name($adv_name);
@@ -272,6 +295,25 @@ EOQ
return ($new_eid);
}
+sub erratum_is_clone {
+ my $eid = shift;
+ my $dbh = RHN::DB->connect;
+
+ my $query =<<EOQ;
+SELECT 1
+ FROM dual
+ WHERE EXISTS (SELECT 1 FROM rhnErrataCloned E WHERE E.id = :eid)
+ OR EXISTS (SELECT 1 FROM rhnErrataClonedTmp ET WHERE ET.id = :eid)
+EOQ
+
+ my $sth = $dbh->prepare($query);
+ $sth->execute_h(eid => $eid);
+ my ($exists) = $sth->fetchrow;
+ $sth->finish;
+
+ return ($exists ? 1 : 0);
+}
+
sub advisory_exists {
my $adv = shift;
diff --git a/web/modules/sniglets/Sniglets/ListView/ErrataList.pm
b/web/modules/sniglets/Sniglets/ListView/ErrataList.pm
index 98642fb..c9d45f3 100644
--- a/web/modules/sniglets/Sniglets/ListView/ErrataList.pm
+++ b/web/modules/sniglets/Sniglets/ListView/ErrataList.pm
@@ -361,7 +361,7 @@ sub potential_for_cloned_channel_provider {
$row->{OWNED_ERRATA_LIST} = '(none)';
}
- my ($adv, $adv_name) = RHN::DB::ErrataEditor::find_next_advisory($row->{ADVISORY},
$row->{ADVISORY_NAME});
+ my ($adv, $adv_name) = RHN::DB::ErrataEditor::find_next_advisory($row->{ADVISORY},
$row->{ADVISORY_NAME}, $row->{ID});
push(@options, ( { label => "Clone as ${adv_name}",
value => 'clone_new' },