<!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>[260747] trunk/Tools</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 { 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">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/260747">260747</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2020-04-27 03:00:24 -0700 (Mon, 27 Apr 2020)</dd>
</dl>

<h3>Log Message</h3>
<pre>[Flatpak SDK] Regenerate toolchains only if new updates were downloaded
https://bugs.webkit.org/show_bug.cgi?id=210804

Patch by Philippe Normand <pnormand@igalia.com> on 2020-04-27
Reviewed by Žan Doberšek.

The SDK toolchain archives are now regenerated only if an actual
update was downloaded from the Flatpak repository. Some redundant
flatpak calls were removed as well, such as the GL extension and
Debug reinstalls that were happening during webkit-flatpak
updates.

* flatpak/flatpakutils.py:
(FlatpakObject.flatpak):
(FlatpakRepo.__init__):
(WebkitFlatpak.main):
(WebkitFlatpak.setup_dev_env):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsflatpakflatpakutilspy">trunk/Tools/flatpak/flatpakutils.py</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (260746 => 260747)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog    2020-04-27 09:57:53 UTC (rev 260746)
+++ trunk/Tools/ChangeLog       2020-04-27 10:00:24 UTC (rev 260747)
</span><span class="lines">@@ -1,5 +1,24 @@
</span><span class="cx"> 2020-04-27  Philippe Normand  <pnormand@igalia.com>
</span><span class="cx"> 
</span><ins>+        [Flatpak SDK] Regenerate toolchains only if new updates were downloaded
+        https://bugs.webkit.org/show_bug.cgi?id=210804
+
+        Reviewed by Žan Doberšek.
+
+        The SDK toolchain archives are now regenerated only if an actual
+        update was downloaded from the Flatpak repository. Some redundant
+        flatpak calls were removed as well, such as the GL extension and
+        Debug reinstalls that were happening during webkit-flatpak
+        updates.
+
+        * flatpak/flatpakutils.py:
+        (FlatpakObject.flatpak):
+        (FlatpakRepo.__init__):
+        (WebkitFlatpak.main):
+        (WebkitFlatpak.setup_dev_env):
+
+2020-04-27  Philippe Normand  <pnormand@igalia.com>
+
</ins><span class="cx">         unable to build from tot - linux - flatpakutils.py - TypeError: not enough arguments for format string
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=210941
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkToolsflatpakflatpakutilspy"></a>
<div class="modfile"><h4>Modified: trunk/Tools/flatpak/flatpakutils.py (260746 => 260747)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/flatpak/flatpakutils.py      2020-04-27 09:57:53 UTC (rev 260746)
+++ trunk/Tools/flatpak/flatpakutils.py 2020-04-27 10:00:24 UTC (rev 260747)
</span><span class="lines">@@ -156,15 +156,19 @@
</span><span class="cx">     def flatpak(self, command, *args, **kwargs):
</span><span class="cx">         show_output = kwargs.pop("show_output", False)
</span><span class="cx">         comment = kwargs.pop("comment", None)
</span><ins>+        gather_output = kwargs.get("gather_output", False)
</ins><span class="cx">         if comment:
</span><span class="cx">             Console.message(comment)
</span><span class="cx"> 
</span><span class="cx">         command = ["flatpak", command]
</span><del>-        res = subprocess.check_output(command + ["--help"]).decode("utf-8")
-        if self.user and "--user" in res:
</del><ins>+        help_output = subprocess.check_output(command + ["--help"]).decode("utf-8")
+        if self.user and "--user" in help_output:
</ins><span class="cx">             command.append("--user")
</span><del>-        if "--assumeyes" in res:
</del><ins>+        if "--assumeyes" in help_output:
</ins><span class="cx">             command.append("--assumeyes")
</span><ins>+        if "--noninteractive" and gather_output:
+            command.append("--noninteractive")
+
</ins><span class="cx">         command.extend(args)
</span><span class="cx"> 
</span><span class="cx">         _log.debug("Executing %s" % ' '.join(command))
</span><span class="lines">@@ -171,7 +175,12 @@
</span><span class="cx">         if not show_output:
</span><span class="cx">             return subprocess.check_output(command).decode("utf-8")
</span><span class="cx"> 
</span><del>-        return subprocess.check_call(command)
</del><ins>+        if not gather_output:
+            return subprocess.check_call(command)
+        else:
+            p = subprocess.Popen(command, stdout=subprocess.PIPE)
+            output = p.communicate()
+            return output
</ins><span class="cx"> 
</span><span class="cx"> 
</span><span class="cx"> class FlatpakPackages(FlatpakObject):
</span><span class="lines">@@ -272,11 +281,9 @@
</span><span class="cx">             assert url
</span><span class="cx"> 
</span><span class="cx">         self._app_registry = {}
</span><del>-        output = self.flatpak("list", "--columns=application,branch,origin")
</del><ins>+        output = self.flatpak("list", "--columns=application,branch", "-a")
</ins><span class="cx">         for line in output.splitlines():
</span><del>-            name, branch, origin = line.split("\t")
-            if origin != self.name:
-                continue
</del><ins>+            name, branch = line.split("\t")
</ins><span class="cx">             self._app_registry[name] = branch
</span><span class="cx"> 
</span><span class="cx">     def is_app_installed(self, name, branch=None):
</span><span class="lines">@@ -761,7 +768,9 @@
</span><span class="cx"> 
</span><span class="cx">         if self.update:
</span><span class="cx">             repo = self.sdk_repo
</span><del>-            repo.flatpak("update", show_output=True, comment="Updating Flatpak %s environment" % self.build_type)
</del><ins>+            update_output = repo.flatpak("update", gather_output=True, comment="Updating Flatpak %s environment" % self.build_type)
+            regenerate_toolchains = update_output.find("Nothing to do") == -1
+
</ins><span class="cx">             for package in self._get_packages():
</span><span class="cx">                 if package.name.startswith("org.webkit") and repo.is_app_installed(package.name) \
</span><span class="cx">                    and not repo.is_app_installed(package.name, branch=self.sdk_branch):
</span><span class="lines">@@ -768,10 +777,20 @@
</span><span class="cx">                     Console.message("New SDK version available, removing local UserFlatpak directory before switching to new version")
</span><span class="cx">                     shutil.rmtree(self.flatpak_build_path)
</span><span class="cx">                     self._reset_repository()
</span><ins>+                    regenerate_toolchains = True
</ins><span class="cx">                     break
</span><span class="cx">                 elif not repo.is_app_installed(package.name):
</span><span class="cx">                     package.install()
</span><ins>+                    regenerate_toolchains = True
+        else:
+            regenerate_toolchains = self.regenerate_toolchains
</ins><span class="cx"> 
</span><ins>+        if regenerate_toolchains:
+            self.icc_version = {}
+            self.setup_icecc("gcc")
+            self.setup_icecc("clang")
+            self.save_config()
+
</ins><span class="cx">         return self.setup_dev_env()
</span><span class="cx"> 
</span><span class="cx">     def run(self):
</span><span class="lines">@@ -809,16 +828,7 @@
</span><span class="cx">     def setup_dev_env(self):
</span><span class="cx">         if not os.path.exists(os.path.join(self.flatpak_build_path, "runtime", "org.webkit.Sdk")) or self.update:
</span><span class="cx">             self.install_all()
</span><del>-            regenerate_toolchains = True
-        else:
-            regenerate_toolchains = self.regenerate_toolchains
</del><span class="cx"> 
</span><del>-        if regenerate_toolchains:
-            self.icc_version = {}
-            self.setup_icecc("gcc")
-            self.setup_icecc("clang")
-            self.save_config()
-
</del><span class="cx">         if not self.update:
</span><span class="cx">             for package in self._get_packages():
</span><span class="cx">                 if package.name.startswith("org.webkit") and not package.is_installed(self.sdk_branch):
</span><span class="lines">@@ -833,7 +843,7 @@
</span><span class="cx">                 self.user_command.append("--cmakeargs=%s" % self.cmakeargs)
</span><span class="cx"> 
</span><span class="cx">             return self.run_in_sandbox(*self.user_command)
</span><del>-        elif not self.update and not self.build_gst:
</del><ins>+        elif not self.update and not self.build_gst and not self.regenerate_toolchains:
</ins><span class="cx">             return self.run_in_sandbox()
</span><span class="cx"> 
</span><span class="cx">         return 0
</span></span></pre>
</div>
</div>

</body>
</html>