Allow custom config files.
- Needed to switch from a timestamp to a checksum. - Added a --config command line option.
This commit is contained in:
parent
f8177ef58d
commit
2c3043c633
3 changed files with 45 additions and 14 deletions
|
|
@ -18,6 +18,7 @@ import asyncio
|
||||||
import contextlib
|
import contextlib
|
||||||
import functools
|
import functools
|
||||||
import gzip
|
import gzip
|
||||||
|
import hashlib
|
||||||
import importlib
|
import importlib
|
||||||
import importlib.resources
|
import importlib.resources
|
||||||
import itertools
|
import itertools
|
||||||
|
|
@ -39,7 +40,6 @@ import pyinotify
|
||||||
import termstr
|
import termstr
|
||||||
|
|
||||||
import eris
|
import eris
|
||||||
import eris.tools as tools
|
|
||||||
import eris.worker as worker
|
import eris.worker as worker
|
||||||
import eris.paged_list as paged_list
|
import eris.paged_list as paged_list
|
||||||
import sorted_collection
|
import sorted_collection
|
||||||
|
|
@ -65,6 +65,7 @@ Options:
|
||||||
highlighting. Defaults to "native".
|
highlighting. Defaults to "native".
|
||||||
-c TYPE, --compression=TYPE The type of compression used in the cache:
|
-c TYPE, --compression=TYPE The type of compression used in the cache:
|
||||||
gzip, lzma, bz2, or none. Defaults to gzip.
|
gzip, lzma, bz2, or none. Defaults to gzip.
|
||||||
|
--config=FILE_NAME Use a custom config file instead of tools.toml.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1068,21 +1069,36 @@ def chdir(path):
|
||||||
os.chdir(old_cwd)
|
os.chdir(old_cwd)
|
||||||
|
|
||||||
|
|
||||||
|
def source_checksum():
|
||||||
|
resources = ["__main__.py", "tools.py"]
|
||||||
|
if "config" not in os.environ:
|
||||||
|
resources.append("tools.toml")
|
||||||
|
checksum_paths = []
|
||||||
|
for resource in resources:
|
||||||
|
with importlib.resources.path(eris, resource) as resource_path:
|
||||||
|
checksum_paths.append(resource_path)
|
||||||
|
if "config" in os.environ:
|
||||||
|
checksum_paths.append(os.environ["config"])
|
||||||
|
sha256 = hashlib.sha256()
|
||||||
|
for path in checksum_paths:
|
||||||
|
with open(path, "rb") as source_file:
|
||||||
|
sha256.update(source_file.read())
|
||||||
|
return sha256.hexdigest()
|
||||||
|
|
||||||
|
|
||||||
def manage_cache(root_path):
|
def manage_cache(root_path):
|
||||||
cache_path = os.path.join(root_path, tools.CACHE_PATH)
|
cache_path = os.path.join(root_path, tools.CACHE_PATH)
|
||||||
timestamp_path = os.path.join(cache_path, "creation_time")
|
checksum_path = os.path.join(cache_path, "source_checksum")
|
||||||
if os.path.exists(cache_path):
|
if os.path.exists(cache_path):
|
||||||
timestamp = os.stat(timestamp_path).st_mtime
|
with open(checksum_path, "r") as checksum_file:
|
||||||
for resource_path in ["__main__.py", "tools.py", "tools.toml"]:
|
cache_checksum = checksum_file.read()
|
||||||
with importlib.resources.path(eris, resource_path) as resource:
|
if source_checksum() != cache_checksum:
|
||||||
if resource.stat().st_mtime > timestamp:
|
print("Eris has been changed, so clearing the cache and recalculating all results…")
|
||||||
print("Eris has been updated, so clearing the cache and"
|
shutil.rmtree(cache_path)
|
||||||
" recalculating all results…")
|
|
||||||
shutil.rmtree(cache_path)
|
|
||||||
break
|
|
||||||
if not os.path.exists(cache_path):
|
if not os.path.exists(cache_path):
|
||||||
os.mkdir(cache_path)
|
os.mkdir(cache_path)
|
||||||
open(timestamp_path, "w").close()
|
with open(checksum_path, "w") as checksum_file:
|
||||||
|
checksum_file.write(source_checksum())
|
||||||
|
|
||||||
|
|
||||||
def print_tool_info():
|
def print_tool_info():
|
||||||
|
|
@ -1105,11 +1121,19 @@ def print_tool_info():
|
||||||
|
|
||||||
|
|
||||||
def check_arguments():
|
def check_arguments():
|
||||||
|
global tools
|
||||||
cmdline_help = __doc__ + USAGE.replace("*", "")
|
cmdline_help = __doc__ + USAGE.replace("*", "")
|
||||||
arguments = docopt.docopt(cmdline_help, help=False)
|
arguments = docopt.docopt(cmdline_help, help=False)
|
||||||
if arguments["--help"]:
|
if arguments["--help"]:
|
||||||
print(cmdline_help)
|
print(cmdline_help)
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
if arguments["--config"] is not None:
|
||||||
|
config_path = arguments["--config"]
|
||||||
|
if not os.path.exists(config_path):
|
||||||
|
print("File does not exist:", config_path)
|
||||||
|
sys.exit(1)
|
||||||
|
os.environ["ERIS_CONFIG"] = config_path
|
||||||
|
import eris.tools as tools
|
||||||
if arguments["--info"]:
|
if arguments["--info"]:
|
||||||
print_tool_info()
|
print_tool_info()
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
|
||||||
|
|
@ -460,8 +460,13 @@ def make_tool_function(dependencies, command, url=None, error_status=None,
|
||||||
|
|
||||||
|
|
||||||
elinks, git_diff, git_blame = None, None, None # For linters.
|
elinks, git_diff, git_blame = None, None, None # For linters.
|
||||||
with importlib.resources.open_text(eris, "tools.toml") as tools_toml_file:
|
|
||||||
tools_toml = toml.load(tools_toml_file)
|
|
||||||
|
if "ERIS_CONFIG" in os.environ:
|
||||||
|
tools_toml = toml.load(os.environ["ERIS_CONFIG"])
|
||||||
|
else:
|
||||||
|
with importlib.resources.open_text(eris, "tools.toml") as tools_toml_file:
|
||||||
|
tools_toml = toml.load(tools_toml_file)
|
||||||
tools_for_extensions = tools_toml["tools_for_extensions"]
|
tools_for_extensions = tools_toml["tools_for_extensions"]
|
||||||
del tools_toml["tools_for_extensions"]
|
del tools_toml["tools_for_extensions"]
|
||||||
for tool_name, tool_toml in tools_toml.items():
|
for tool_name, tool_toml in tools_toml.items():
|
||||||
|
|
|
||||||
|
|
@ -13,6 +13,8 @@ import fill3
|
||||||
|
|
||||||
import golden
|
import golden
|
||||||
import eris.__main__ as __main__
|
import eris.__main__ as __main__
|
||||||
|
import eris.tools as tools
|
||||||
|
__main__.tools = tools
|
||||||
|
|
||||||
|
|
||||||
os.environ["TERM"] = "xterm-256color"
|
os.environ["TERM"] = "xterm-256color"
|
||||||
|
|
@ -204,7 +206,7 @@ class MainTestCase(unittest.TestCase):
|
||||||
with contextlib.redirect_stdout(io.StringIO()):
|
with contextlib.redirect_stdout(io.StringIO()):
|
||||||
loop.run_until_complete(__main__.main("test",
|
loop.run_until_complete(__main__.main("test",
|
||||||
root_path, worker_count=2, is_being_tested=True))
|
root_path, worker_count=2, is_being_tested=True))
|
||||||
for file_name in ["summary.pickle", "creation_time",
|
for file_name in ["summary.pickle", "source_checksum",
|
||||||
"foo-metadata", "foo-contents"]:
|
"foo-metadata", "foo-contents"]:
|
||||||
self.assertTrue(os.path.exists(".eris/" + file_name))
|
self.assertTrue(os.path.exists(".eris/" + file_name))
|
||||||
self.assertEqual(_mount_total(), mount_total)
|
self.assertEqual(_mount_total(), mount_total)
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue