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@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/%%7Bname%7D-%%7Bversion%7D.t... @@ -254,6 +254,9 @@ rm -rf $RPM_BUILD_ROOT
# $Id$ %changelog +* Mon Apr 23 2012 Miroslav Suchý msuchy@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@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' },
spacewalk-commits@lists.fedorahosted.org