From 5da3a7d3cf7735b4c7989fe9d571d72e0a60af5d Mon Sep 17 00:00:00 2001
From: Paul Moore
Date: Mon, 17 Feb 2020 13:55:57 +0000
Subject: [PATCH] Add documentation to internals on upgrade options
---
docs/html/development/architecture/index.rst | 1 +
.../architecture/upgrade-options.rst | 115 ++++++++++++++++++
2 files changed, 116 insertions(+)
create mode 100644 docs/html/development/architecture/upgrade-options.rst
diff --git a/docs/html/development/architecture/index.rst b/docs/html/development/architecture/index.rst
index bb6ff56dd4b..782cc02a7d7 100644
--- a/docs/html/development/architecture/index.rst
+++ b/docs/html/development/architecture/index.rst
@@ -19,6 +19,7 @@ Architecture of pip's internals
overview
anatomy
package-finding
+ upgrade-options
.. _`tracking issue`: https://github.com/pypa/pip/issues/6831
diff --git a/docs/html/development/architecture/upgrade-options.rst b/docs/html/development/architecture/upgrade-options.rst
new file mode 100644
index 00000000000..e6653947688
--- /dev/null
+++ b/docs/html/development/architecture/upgrade-options.rst
@@ -0,0 +1,115 @@
+Options that control the installation process
+---------------------------------------------
+
+When installing packages, pip chooses a distribution file, and installs it in
+the user's environment. There are many choices involved in deciding which file
+to install, and these are controlled by a variety of options.
+
+Controlling what gets installed
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+These options directly affect how the resolver uses the list of available
+distribution files to decide which one to install. So these modify the
+resolution algorithm itself, rather than the input to that algorithm.
+
+``--upgrade``
+
+Allow installing a newer version of an installed package. In principle, this
+option actually affects "what gets considered", in the sense that it allows
+the resolver to see other versions of installed packages. Without
+``--upgrade``, the resolver will only see the installed version as a
+candidate.
+
+``--upgrade-strategy``
+
+This option affects which packages are allowed to be installed. It is only
+relevant if ``--upgrade`` is specified. The base behaviour is to allow
+packages specified on pip's command line to be upgraded. This option controls
+what *other* packages can be upgraded:
+
+ * ``eager`` - all packages will be upgraded to the latest possible version.
+ It should be noted here that pip's current resolution algorithm isn't even
+ aware of packages other than those specified on the command line, and
+ those identified as dependencies. This may or may not be true of the new
+ resolver.
+ * ``only-if-needed`` - packages are only upgraded if they are named in the
+ pip command or a requirement file (i.e, they are direct requirements), or
+ an upgraded parent needs a later version of the dependency than is
+ currently installed.
+ * ``to-satisfy-only`` (**undocumented**) - packages are not upgraded (not
+ even direct requirements) unless the currently installed version fails to
+ satisfy a requirement (either explicitly specified or a dependency).
+
+``--force-reinstall``
+
+Doesn't affect resolution, but if the resolved result is the same as what is
+currently installed, uninstall and reinstall it rather than leaving the
+current version in place. This occurs even if ``--upgrade`` is not set.
+
+``--ignore-installed``
+
+Act as if the currently installed version isn't there - so don't care about
+``--upgrade``, and don't uninstall before (re-)installing.
+
+Controlling what gets considered
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+These options affect the list of distribution files that the resolver will
+consider as candidates for installation. As such, they affect the data that
+the resolver has to work with, rather than influencing what pip does with the
+resolution result.
+
+Prereleases
+
+``--pre``
+
+Source vs Binary
+
+``--no-binary``
+
+``--only-binary``
+
+``--prefer-binary``
+
+Wheel tag specification
+
+``--platform``
+
+``--implementation``
+
+``--abi``
+
+Index options
+
+``--index-url``
+
+``--extra-index-url``
+
+``--no-index``
+
+``--find-links``
+
+Controlling dependency data
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+These options control what dependency data the resolver sees for any given
+package (or, in the case of ``--python-version``, the environment information
+the resolver uses to *check* the dependency).
+
+``--no-deps``
+
+``--python-version``
+
+``--ignore-requires-python``
+
+Special cases
+~~~~~~~~~~~~~
+
+These need further investigation. They affect the install process, but not
+necessarily resolution or what gets installed.
+
+``--require-hashes``
+
+``--constraint``
+
+``--editable ``