Use git-config to set track the current Moonraker instance managing a
a git repo. If multiple instances are detected log and create a repo
warning.
Singed-off-by: Eric Callahan <arksine.code@gmail.com>
Submodules contain a .git file that includes the path to the
actual repository folder. Extract that path and use it for
lock file detection.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Use git-branch to determine current the current branch and
head state instead of git-status. The former is a porcelain
command with guaranteed output.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Streamline the rollback defaults so only one dict object
is explicitly defined in "capture_state_for_rollback()".
Validate the rollback branch on detached heads before
setting it.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Use the newly implemented versions utility for git version parsing.
This allows for simple access to version information and
version comparison.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
If a git repo not configured on the dev channel it is necessary
to move the HEAD to the commit for the correct tag.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Add a debug logging helper to the base class. Use unique
logging prefixes for subclasses of AppDeploy.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Move specific configuration out of __init__ into several methods
that may be called by subclasses. This allows child implementations
to define and share specific sets of configuration that they require
without forcing all implementations to do so.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Remove hardcoded beta binding between Moonraker and Klipper.
This could result in a user getting stuck on a commit that requires
a future patch.
The original purpose of binding versions was to avoid a scenario
where Klipper introduces a feature incompatible with the current
Moonraker beta. Rather than binding the better solution is to
fix the incompatibility and tag a new beta.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
This functionality was intended to allow for an automated
reinstallation between "git_repo" and "zip" types. The
"zip" type remains unused, and attempting to automate
this would likely be unreliable.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Do not report invalid if the remote or branch does not match
the configured values. In these conditions report them as
"repo_warnings" that frontends may display to the user.
Hard recovery now requires a recovery URL detected from the git
repo's "origin" remote. This closes a potential security issue where a
malicioius repo could be cloned over an installed repo.
Signed-off-by: Eric Callahan <arskine.code@gmail.com>
Allowing only a single part in the regex resulted in repos
without tags being assigned erronous version info. With
this change, the following tags can be parsed:
v1.0
v1.0.2
1.0
1.0.2
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
When converting a semantic version to a list for comparisons
guarantee that the base version has 3 parts.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Allow tags versions with one, two, or three parts. The following
examples are now valid:
v1
v1.3
v1.0,10
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Parse system packages and python requirements prior to and after each
updating, using the difference to determine if an update is necessary.
Only the new detected packages are installed unless the "force" variable
is set.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
It is possible that the user manually corrected a corrupt repo.
If a repo makes it past initialization reset the corrupt flag.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
It that "git status" will not detect some repo issues, these are only
found after a fetch. When this condition is detected save the repo
state and report that the repo is corrupt and invalid.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
I'm playing with using git submodules to track my entire printer config,
and moonraker only works with separate clones as is. Using `.exists()`
instead of `.is_dir()` allows moonraker to control the submodules.
Signed-off-by: Franklyn Tackitt <git@frank.af>
Query the detected url and make sure it redirects to the
expected url. This closes a security vulnerability
where a remote could be changed to an arbitrary repo's url.
The `moved_origin` option is no longer necessary, however it
is currently used as an additional check. In the future it will be
deprecated.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Close a security hole where an attacker could overwrite an existing repo
with any remote and run malicious code through an update.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Use git for-each-ref to retreive tags and their associated commit
hashes. This allows us to limit the amount of tags to 10 and
simplifies the code as the returned objects are already dereferenced.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Don't require the `app_params` argument, instead dynamically
generate the configuration from a dict. This simiplifies AppDeploy
initialization as the internally generated configurations can be
read in the same way as those supplied in moonraker.conf.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
Shallow clones don't report the tag in git describe, so use
git rev-list to extract the tag and prepend it to the version
string.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>
All calls to update now return a boolean value. When performing a full upate this return value is used to
check if Moonraker should wait for Klippy to reconnect.
Signed-off-by: Eric Callahan <arksine.code@gmail.com>