<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[13959] sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php: Plugin Directory: Release Confirmation: Remove releases for deleted tags earlier.</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { white-space: pre-line; overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="http://meta.trac.wordpress.org/changeset/13959">13959</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"http://meta.trac.wordpress.org/changeset/13959","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>dd32</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2024-08-09 07:12:35 +0000 (Fri, 09 Aug 2024)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>Plugin Directory: Release Confirmation: Remove releases for deleted tags earlier.

When a SVN tag is removed the relevant release is deleted <a href="http://meta.trac.wordpress.org/changeset/13711">[13711]</a>, but that only applied when release confirmation was enabled.

As of the changes in <a href="http://meta.trac.wordpress.org/ticket/7696">#7696</a> releases now exist even if release confiramtion isn't enabled, as such as should always remove any release meta for any non-explicitely-confirmed releases.

This also has the effect of resolving an edge-case where the deleted tag is present within trunk/readme.txt as the `Stable Tag` but the release was discarded/not-confirmed, in that case `$stable_tag` would be set to the fallback value of 'trunk' for the SVN import and ultimately release confirmation would reject the import (as trunk is not currently valid for that scenario).
That would cause the release NOT to be deleted, although the tag was. Replacing the tag with the corrected data would not re-trigger the confirmation process if the release was previously discarded.

See <a href="http://meta.trac.wordpress.org/ticket/7696">#7696</a>, <a href="http://meta.trac.wordpress.org/ticket/5900">#5900</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectorycliclassimportphp">sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="sitestrunkwordpressorgpublic_htmlwpcontentpluginsplugindirectorycliclassimportphp"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php    2024-08-09 01:41:45 UTC (rev 13958)
+++ sites/trunk/wordpress.org/public_html/wp-content/plugins/plugin-directory/cli/class-import.php      2024-08-09 07:12:35 UTC (rev 13959)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -153,8 +153,23 @@
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="cx" style="display: block; padding: 0 10px">                unset( $_requires_plugins, $unmet_dependencies );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                /*
+                * If a tag has been deleted, we should also remove any unconfirmed releases.
+                * NOTE: remove_release() will not remove a confirmed release, but will remove a discarded release.
+                *
+                * Additionally; this must occur before the below release confirmation checks,
+                * if the trunk readme has it's stable_tag set to one of these deleted (now non-existent) tags,
+                * then $stable_tag will be set to the fallback 'trunk', causing the RC checks to fail.
+                */
+               foreach ( $svn_tags_deleted as $svn_deleted_tag ) {
+                       if ( Plugin_Directory::remove_release( $plugin, $svn_deleted_tag ) ) {
+                               echo "Plugin tag {$svn_deleted_tag} deleted; release removed.\n";
+                       }
+               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                 // Release confirmation
</span><span class="cx" style="display: block; padding: 0 10px">                if ( $plugin->release_confirmation ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        // If the stable tag is trunk, we shouldn't continue, as we don't support that for RC.
</ins><span class="cx" style="display: block; padding: 0 10px">                         if ( 'trunk' === $stable_tag ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                throw new Exception( 'Plugin cannot be released from trunk due to release confirmation being enabled.' );
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -208,14 +223,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        // Check to see if any of the releases were deleted.
-                       foreach ( $svn_tags_deleted as $svn_deleted_tag ) {
-                               // Note: Confirmed releases will not be deleted, only unconfirmed ones.
-                               if ( Plugin_Directory::remove_release( $plugin, $svn_deleted_tag ) ) {
-                                       echo "Plugin tag {$svn_deleted_tag} deleted; release removed.\n";
-                               }
-                       }
-
</del><span class="cx" style="display: block; padding: 0 10px">                         // Now check to see if the stable has been confirmed.
</span><span class="cx" style="display: block; padding: 0 10px">                        $release = Plugin_Directory::get_release( $plugin, $stable_tag );
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( ! $release ) {
</span></span></pre>
</div>
</div>

</body>
</html>