mirror of https://github.com/pypa/pip
Merge pull request #5419 from tomfbiz/3905_Pip_version_check_cache_dir
Keep only one selfcheck.json file
This commit is contained in:
commit
21b97e49ab
|
@ -0,0 +1 @@
|
|||
Adjust path to selfcheck.json - remove virtualenv specific path and honor cache-dir in pip.conf
|
|
@ -11,7 +11,6 @@ from pip._vendor.packaging import version as packaging_version
|
|||
|
||||
from pip._internal.compat import WINDOWS
|
||||
from pip._internal.index import PackageFinder
|
||||
from pip._internal.locations import USER_CACHE_DIR, running_under_virtualenv
|
||||
from pip._internal.utils.filesystem import check_path_owner
|
||||
from pip._internal.utils.misc import ensure_dir, get_installed_version
|
||||
|
||||
|
@ -21,34 +20,9 @@ SELFCHECK_DATE_FMT = "%Y-%m-%dT%H:%M:%SZ"
|
|||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class VirtualenvSelfCheckState(object):
|
||||
def __init__(self):
|
||||
self.statefile_path = os.path.join(sys.prefix, "pip-selfcheck.json")
|
||||
|
||||
# Load the existing state
|
||||
try:
|
||||
with open(self.statefile_path) as statefile:
|
||||
self.state = json.load(statefile)
|
||||
except (IOError, ValueError):
|
||||
self.state = {}
|
||||
|
||||
def save(self, pypi_version, current_time):
|
||||
# Attempt to write out our version check file
|
||||
with open(self.statefile_path, "w") as statefile:
|
||||
json.dump(
|
||||
{
|
||||
"last_check": current_time.strftime(SELFCHECK_DATE_FMT),
|
||||
"pypi_version": pypi_version,
|
||||
},
|
||||
statefile,
|
||||
sort_keys=True,
|
||||
separators=(",", ":")
|
||||
)
|
||||
|
||||
|
||||
class GlobalSelfCheckState(object):
|
||||
def __init__(self):
|
||||
self.statefile_path = os.path.join(USER_CACHE_DIR, "selfcheck.json")
|
||||
class SelfCheckState(object):
|
||||
def __init__(self, cache_dir):
|
||||
self.statefile_path = os.path.join(cache_dir, "selfcheck.json")
|
||||
|
||||
# Load the existing state
|
||||
try:
|
||||
|
@ -84,13 +58,6 @@ class GlobalSelfCheckState(object):
|
|||
separators=(",", ":"))
|
||||
|
||||
|
||||
def load_selfcheck_statefile():
|
||||
if running_under_virtualenv():
|
||||
return VirtualenvSelfCheckState()
|
||||
else:
|
||||
return GlobalSelfCheckState()
|
||||
|
||||
|
||||
def pip_version_check(session, options):
|
||||
"""Check for an update for pip.
|
||||
|
||||
|
@ -106,7 +73,7 @@ def pip_version_check(session, options):
|
|||
pypi_version = None
|
||||
|
||||
try:
|
||||
state = load_selfcheck_statefile()
|
||||
state = SelfCheckState(cache_dir=options.cache_dir)
|
||||
|
||||
current_time = datetime.datetime.utcnow()
|
||||
# Determine if we need to refresh the state
|
||||
|
|
|
@ -3,6 +3,7 @@ import os
|
|||
import sys
|
||||
from contextlib import contextmanager
|
||||
|
||||
|
||||
import freezegun
|
||||
import pretend
|
||||
import pytest
|
||||
|
@ -37,6 +38,7 @@ def _options():
|
|||
return pretend.stub(
|
||||
find_links=False, extra_index_urls=[], index_url='default_url',
|
||||
pre=False, trusted_hosts=False, process_dependency_links=False,
|
||||
cache_dir='',
|
||||
)
|
||||
|
||||
|
||||
|
@ -72,16 +74,17 @@ def test_pip_version_check(monkeypatch, stored_time, installed_ver, new_ver,
|
|||
save=pretend.call_recorder(lambda v, t: None),
|
||||
)
|
||||
monkeypatch.setattr(
|
||||
outdated, 'load_selfcheck_statefile', lambda: fake_state
|
||||
outdated, 'SelfCheckState', lambda **kw: fake_state
|
||||
)
|
||||
|
||||
with freezegun.freeze_time(
|
||||
"1970-01-09 10:00:00",
|
||||
ignore=[
|
||||
"six.moves",
|
||||
"pip._vendor.six.moves",
|
||||
"pip._vendor.requests.packages.urllib3.packages.six.moves",
|
||||
]):
|
||||
"1970-01-09 10:00:00",
|
||||
ignore=[
|
||||
"six.moves",
|
||||
"pip._vendor.six.moves",
|
||||
"pip._vendor.requests.packages.urllib3.packages.six.moves",
|
||||
]
|
||||
):
|
||||
latest_pypi_version = outdated.pip_version_check(None, _options())
|
||||
|
||||
# See we return None if not installed_version
|
||||
|
@ -105,41 +108,7 @@ def test_pip_version_check(monkeypatch, stored_time, installed_ver, new_ver,
|
|||
assert len(outdated.logger.warning.calls) == 0
|
||||
|
||||
|
||||
def test_virtualenv_state(monkeypatch):
|
||||
CONTENT = '{"last_check": "1970-01-02T11:00:00Z", "pypi_version": "1.0"}'
|
||||
fake_file = pretend.stub(
|
||||
read=pretend.call_recorder(lambda: CONTENT),
|
||||
write=pretend.call_recorder(lambda s: None),
|
||||
)
|
||||
|
||||
@pretend.call_recorder
|
||||
@contextmanager
|
||||
def fake_open(filename, mode='r'):
|
||||
yield fake_file
|
||||
|
||||
monkeypatch.setattr(outdated, 'open', fake_open, raising=False)
|
||||
|
||||
monkeypatch.setattr(outdated, 'running_under_virtualenv',
|
||||
pretend.call_recorder(lambda: True))
|
||||
|
||||
monkeypatch.setattr(sys, 'prefix', 'virtually_env')
|
||||
|
||||
state = outdated.load_selfcheck_statefile()
|
||||
state.save('2.0', datetime.datetime.utcnow())
|
||||
|
||||
assert len(outdated.running_under_virtualenv.calls) == 1
|
||||
|
||||
expected_path = os.path.join('virtually_env', 'pip-selfcheck.json')
|
||||
assert fake_open.calls == [
|
||||
pretend.call(expected_path),
|
||||
pretend.call(expected_path, 'w'),
|
||||
]
|
||||
|
||||
# json.dumps will call this a number of times
|
||||
assert len(fake_file.write.calls)
|
||||
|
||||
|
||||
def test_global_state(monkeypatch, tmpdir):
|
||||
def test_self_check_state(monkeypatch, tmpdir):
|
||||
CONTENT = '''{"pip_prefix": {"last_check": "1970-01-02T11:00:00Z",
|
||||
"pypi_version": "1.0"}}'''
|
||||
fake_file = pretend.stub(
|
||||
|
@ -164,18 +133,12 @@ def test_global_state(monkeypatch, tmpdir):
|
|||
monkeypatch.setattr(lockfile, 'LockFile', fake_lock)
|
||||
monkeypatch.setattr(os.path, "exists", lambda p: True)
|
||||
|
||||
monkeypatch.setattr(outdated, 'running_under_virtualenv',
|
||||
pretend.call_recorder(lambda: False))
|
||||
|
||||
cache_dir = tmpdir / 'cache_dir'
|
||||
monkeypatch.setattr(outdated, 'USER_CACHE_DIR', cache_dir)
|
||||
monkeypatch.setattr(sys, 'prefix', tmpdir / 'pip_prefix')
|
||||
|
||||
state = outdated.load_selfcheck_statefile()
|
||||
state = outdated.SelfCheckState(cache_dir=cache_dir)
|
||||
state.save('2.0', datetime.datetime.utcnow())
|
||||
|
||||
assert len(outdated.running_under_virtualenv.calls) == 1
|
||||
|
||||
expected_path = cache_dir / 'selfcheck.json'
|
||||
assert fake_lock.calls == [pretend.call(expected_path)]
|
||||
|
||||
|
|
Loading…
Reference in New Issue