<h2>The Main Road<aclass="headerlink"href="#the-main-road"title="Permalink to this headline">¶</a></h2>
<p>Hi, have you met <codeclass="docutils literal notranslate"><spanclass="pre">fast-deps</span></code>? It’s (going to be) the name of <codeclass="docutils literal notranslate"><spanclass="pre">pip</span></code>’s
experimental feature that may improve the speed of dependency resolution
of the new resolver. By avoid downloading whole wheels to just
obtain metadata, it is especially helpful when <codeclass="docutils literal notranslate"><spanclass="pre">pip</span></code> has to do
heavy backtracking to resolve conflicts.</p>
<p>Thanks to <aclass="reference external"href="https://github.com/pypa/pip/pull/8532#discussion_r453990728">Chris Hunt’s review on GH-8537</a>,
my mentor Pradyun Gedam and I worked out a less hacky approach to inteject
the call to lazy wheel during the resolution process. A new PR <aclass="reference external"href="https://github.com/pypa/pip/pull/8588">GH-8588</a>
was filed to implement it—I could have <em>just</em> worked on top of the old PR
and rebased, but my <codeclass="docutils literal notranslate"><spanclass="pre">git</span></code> skill is far from gud enough to confidently do it.</p>
<p>Testing this one has been a lot of fun though. At first, integration tests
were added as a rerun of the tests for the new resolver, with an additional flag
to use feature <codeclass="docutils literal notranslate"><spanclass="pre">fast-deps</span></code>. It indeed made me feel guilty towards <aclass="reference external"href="https://travis-ci.com/">Travis</a>,
who has to work around 30 minutes more every run. Per Chris Hunt’s suggestion,
in the new PR, I instead write a few functional tests for the area relating
the most to the feature, namely <codeclass="docutils literal notranslate"><spanclass="pre">pip</span></code>’s subcommands <codeclass="docutils literal notranslate"><spanclass="pre">wheel</span></code>,
<codeclass="docutils literal notranslate"><spanclass="pre">download</span></code> and <codeclass="docutils literal notranslate"><spanclass="pre">install</span></code>.</p>
<p>It was also suggested that a mock server with HTTP range requests support
might be better (in term of performance and reliablilty) than for testing.
However, <aclass="reference external"href="https://github.com/pypa/pip/pull/8584#issuecomment-659227702">I have yet to be able to make Werkzeug do it</a>.</p>
<p>Why did I say I’m half way there? With the parallel utilities merged and a way
to quickly get the list of distribution to be downloaded being really close,
what left is <em>only</em> to figure out a way to properly download them in parallel.
With no distribution to be added during the download progress, the model of this
A batch downloader can be implemented to track the progress of each download
and thus report them cleanly as e.g. progress bar or percentage. This is
the part I am second-most excited about of my GSoC project this summer
(after the synchronization of downloads written in my proposal, which was then
superseded by <codeclass="docutils literal notranslate"><spanclass="pre">fast-deps</span></code>) and I can’t wait to do it!</p>
</div>
<divclass="section"id="the-side-quests">
<h2>The Side Quests<aclass="headerlink"href="#the-side-quests"title="Permalink to this headline">¶</a></h2>
<p>As usual, I make sure that I complete every side quest I see during the journey:</p>
<ulclass="simple">
<li><p><aclass="reference external"href="https://github.com/pypa/pip/pull/8568">GH-8568</a>: Declare constants in <codeclass="docutils literal notranslate"><spanclass="pre">configuration.py</span></code> as such</p></li>
<li><p><aclass="reference external"href="https://github.com/pypa/pip/pull/8571">GH-8571</a>: Clean up <codeclass="docutils literal notranslate"><spanclass="pre">Configuration.unset_value</span></code>
and nit the class’<codeclass="docutils literal notranslate"><spanclass="pre">__init__</span></code></p></li>
to be specified via config file and env var</p></li>
<li><p><aclass="reference external"href="https://github.com/pypa/pip/pull/8599">GH-8599</a>: Replace tabs by spaces for consistency</p></li>
</ul>
</div>
<divclass="section"id="snap-back-to-reality">
<h2>Snap Back to Reality<aclass="headerlink"href="#snap-back-to-reality"title="Permalink to this headline">¶</a></h2>
<p>A bit about me, I actually walked 500 meters earlier today to a bank
and walked 500 more to another to prepare my Visa card for purchasing
the upcoming Pinephone prototype. It’s one of the first smartphones
to fully support a GNU/Linux distribution, where one can run desktop apps
(including proper terminals) as well as traditional services like SSH,
HTTP server and IPFS node because why not? Just a few hours ago,
I pre-ordered the <aclass="reference external"href="https://postmarketos.org/blog/2020/07/15/pinephone-ce-preorder/">postmarketOS community edition</a> with additional hardware
for convergence.</p>
<p>If you did not come here for a Pinephone ad, please take my apologies though d-;
and to ones reading this, I hope you all can become the person who walks
a thousand miles to fall down at the door opening to all