Skip to content

Commit

Permalink
Add --backtracking flag
Browse files Browse the repository at this point in the history
  • Loading branch information
peterdemin committed Nov 23, 2022
1 parent d758947 commit 853ccf6
Show file tree
Hide file tree
Showing 6 changed files with 94 additions and 40 deletions.
13 changes: 12 additions & 1 deletion HISTORY.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
History
=======

2.6.1 (2022-11-23)
------------------

* Add ``--backtracking/--no-backtracking`` flag
(`backtracking docs <https://pip-compile-multi.readthedocs.io/en/latest/features.html#backtracking-resolver>`_).
(Issue `#345`_, PR `#360`_)
* Bumped ``pip-tools`` minimum version constraint to ``6.8.0`` to support ``--resolver`` option.

.. _#345: https://github.com/peterdemin/pip-compile-multi/issues/345
.. _#360: https://github.com/peterdemin/pip-compile-multi/pull/360

2.6.0 (2022-11-23)
------------------

Expand All @@ -10,7 +21,7 @@ History
------------------

* Add ``--emit_trusted_host/--no-emit_trusted_host`` flag
(`docs <https://pip-compile-multi.readthedocs.io/en/latest/features.html#add-trusted-host-annotation>`_).
(`trusted host annotation docs <https://pip-compile-multi.readthedocs.io/en/latest/features.html#add-trusted-host-annotation>`_).
Thanks to `Phil Blackwood`_
(Issue `#351`_, PR `#353`_).

Expand Down
2 changes: 2 additions & 0 deletions docs/features.rst
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,8 @@ Features

.. automodule:: pipcompilemulti.features.autoresolve

.. automodule:: pipcompilemulti.features.backtracking

.. automodule:: pipcompilemulti.features.skip_constraint_comments

.. automodule:: pipcompilemulti.features.live_output
Expand Down
37 changes: 37 additions & 0 deletions pipcompilemulti/features/backtracking.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
"""
Backtracking resolver
=====================
Pip has an option to enable `backtracking`_ conflict resolution logic,
which can automatically downgrade some dependencies to meet constraints
from other packages.
See also the `a note on resolvers`_ in ``pip-compile`` project.
.. code-block:: text
--backtracking / --no-backtracking
Enable backtracking resolver. Translates to
pip-compile --resolver=backtracking option.
.. _backtracking: https://pip.pypa.io/en/latest/user_guide/\
#changes-to-the-pip-dependency-resolver-in-20-3-2020
.. _a note on resolvers: https://github.com/jazzband/pip-tools#a-note-on-resolvers
"""

from .base import ClickOption
from .forward import ForwardOption


class Backtracking(ForwardOption):
"""Enable backtracking resolver."""

OPTION_NAME = 'backtracking'
CLICK_OPTION = ClickOption(
long_option='--backtracking/--no-backtracking',
is_flag=True,
default=False,
help_text='Enable backtracking resolver. Translates to '
'pip-compile --resolver=backtracking option.'
)
enabled_pin_options = ['--resolver=backtracking']
disabled_pin_options = ['--resolver=legacy']
78 changes: 41 additions & 37 deletions pipcompilemulti/features/controller.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,70 +5,73 @@

from .add_hashes import AddHashes
from .annotate_index import AnnotateIndex
from .autoresolve import Autoresolve
from .backtracking import Backtracking
from .base_dir import BaseDir
from .build_isolation import BuildIsolation
from .compatible import Compatible
from .emit_trusted_host import EmitTrustedHost
from .extra_index_url import ExtraIndexUrl
from .file_extensions import InputExtension, OutputExtension
from .forbid_post import ForbidPost
from .header import CustomHeader
from .limit_envs import LimitEnvs
from .limit_in_paths import LimitInPaths
from .live_output import LiveOutput
from .skip_constraint_comments import SkipConstraintComments
from .unsafe import AllowUnsafe
from .upgrade import UpgradeAll, UpgradeSelected
from .use_cache import UseCache
from .autoresolve import Autoresolve
from .skip_constraint_comments import SkipConstraintComments
from .live_output import LiveOutput
from .extra_index_url import ExtraIndexUrl
from .build_isolation import BuildIsolation
from .emit_trusted_host import EmitTrustedHost


class FeaturesController:
"""Gateway to a list of features."""
# pylint: disable=too-many-instance-attributes

def __init__(self):
self.add_hashes = AddHashes(self)
self.allow_unsafe = AllowUnsafe()
self.annotate_index = AnnotateIndex()
self.use_cache = UseCache()
self.input_extension = InputExtension()
self.output_extension = OutputExtension()
self.autoresolve = Autoresolve()
self.backtracking = Backtracking()
self.base_dir = BaseDir()
self.build_isolation = BuildIsolation()
self.compatible = Compatible()
self.emit_trusted_host = EmitTrustedHost()
self.extra_index_url = ExtraIndexUrl()
self.forbid_post = ForbidPost()
self.add_hashes = AddHashes(self)
self.upgrade_all = UpgradeAll(self)
self.upgrade_selected = UpgradeSelected(self)
self.header = CustomHeader()
self.input_extension = InputExtension()
self.limit_envs = LimitEnvs(self)
self.limit_in_paths = LimitInPaths()
self.header = CustomHeader()
self.allow_unsafe = AllowUnsafe()
self.autoresolve = Autoresolve()
self.skip_constraint_comments = SkipConstraintComments()
self.live_output = LiveOutput()
self.extra_index_url = ExtraIndexUrl()
self.build_isolation = BuildIsolation()
self.emit_trusted_host = EmitTrustedHost()
self.output_extension = OutputExtension()
self.skip_constraint_comments = SkipConstraintComments()
self.upgrade_all = UpgradeAll(self)
self.upgrade_selected = UpgradeSelected(self)
self.use_cache = UseCache()
self._features = [
self.add_hashes,
self.allow_unsafe,
self.annotate_index,
self.use_cache,
self.input_extension,
self.output_extension,
self.autoresolve,
self.backtracking,
self.base_dir,
self.build_isolation,
self.compatible,
self.emit_trusted_host,
self.extra_index_url,
self.forbid_post,
self.add_hashes,
self.upgrade_all,
self.upgrade_selected,
self.limit_in_paths,
self.limit_envs,
self.header,
self.allow_unsafe,
self.autoresolve,
self.skip_constraint_comments,
self.input_extension,
self.limit_envs,
self.limit_in_paths,
self.live_output,
self.extra_index_url,
self.build_isolation,
self.emit_trusted_host
self.output_extension,
self.skip_constraint_comments,
self.upgrade_all,
self.upgrade_selected,
self.use_cache,
]

def bind(self, command):
Expand All @@ -87,15 +90,16 @@ def save_command_options(*args, **kwargs):
def pin_options(self, in_path):
"""Return list of options to pin command."""
options = []
options.extend(self.use_cache.pin_options())
options.extend(self.add_hashes.pin_options(in_path))
options.extend(self.allow_unsafe.pin_options())
options.extend(self.upgrade_all.pin_options())
options.extend(self.upgrade_selected.pin_options())
options.extend(self.annotate_index.pin_options())
options.extend(self.extra_index_url.pin_options())
options.extend(self.backtracking.pin_options())
options.extend(self.build_isolation.pin_options())
options.extend(self.emit_trusted_host.pin_options())
options.extend(self.extra_index_url.pin_options())
options.extend(self.upgrade_all.pin_options())
options.extend(self.upgrade_selected.pin_options())
options.extend(self.use_cache.pin_options())
return options

def compose_input_file_path(self, basename):
Expand Down
2 changes: 1 addition & 1 deletion requirements/base.in
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
click
pip-tools>=5.2
pip-tools>=6.8.0
toposort
2 changes: 1 addition & 1 deletion requirements/base.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# SHA1:bf4337d28508b6c39305ca82c70a1c5d34330f8f
# SHA1:32737333f763ceffd22b7fcb76fbe62a538296fa
#
# This file is autogenerated by pip-compile-multi
# To update, run:
Expand Down

0 comments on commit 853ccf6

Please sign in to comment.