update_manager: automate git repo dependency checks

Moonraker now checks the modified time of both the install script and requirements file for git repos.  If either is out of date their associated dependencies will be installed.

Signed-off-by:  Eric Callahan <arksine.code@gmail.com>
This commit is contained in:
Arksine 2021-03-13 15:04:01 -05:00
parent 978fcffab5
commit ec3bb22c63
1 changed files with 17 additions and 4 deletions

View File

@ -573,6 +573,8 @@ class GitUpdater:
if self.repo.is_current():
# No need to update
return
package_mtime = self._get_file_mtime(self.install_script)
pyreqs_mtime = self._get_file_mtime(self.python_reqs)
self._notify_status("Updating Repo...")
try:
if self.repo.is_detached():
@ -588,13 +590,13 @@ class GitUpdater:
# Check Semantic Versions
vinfo = self._get_version_info()
cur_version = vinfo.get('version', ())
update_deps |= cur_version < vinfo.get('deps_version', ())
need_env_rebuild = cur_version < vinfo.get('env_version', ())
if update_deps:
if update_deps or self._check_need_update(
package_mtime, self.install_script):
await self._install_packages()
if update_deps or self._check_need_update(
pyreqs_mtime, self.python_reqs):
await self._update_virtualenv(need_env_rebuild)
elif need_env_rebuild:
await self._update_virtualenv(True)
# Refresh local repo state
await self._update_repo_state(need_fetch=False)
if self.name == "moonraker":
@ -607,6 +609,17 @@ class GitUpdater:
await self.restart_service()
self._notify_status("Update Finished...", is_complete=True)
def _get_file_mtime(self, filename):
if filename is None or not os.path.isfile(filename):
return None
return os.path.getmtime(filename)
def _check_need_update(self, prev_mtime, filename):
cur_mtime = self._get_file_mtime(filename)
if prev_mtime is None or cur_mtime is None:
return False
return cur_mtime != prev_mtime
async def _install_packages(self):
if self.install_script is None:
return