summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <matthias.beyer@atos.net>2021-06-16 09:31:22 +0200
committerMatthias Beyer <matthias.beyer@atos.net>2021-06-16 09:31:22 +0200
commit2ebb3a00aca2eaaea5f182b1f72e21c09fcba6ee (patch)
tree556937d0b71a9e0ecf3289b06aacdc51596c3097
parent33ad5925209330f5bf292e8f8f8ac9c29d47ce5d (diff)
parentb21b4cff7c88c5c297b6a84386909c0cd95db009 (diff)
Merge branch 'try-update-handlebars'
-rw-r--r--Cargo.toml2
-rw-r--r--src/package/package.rs66
-rw-r--r--src/package/script.rs6
3 files changed, 73 insertions, 1 deletions
diff --git a/Cargo.toml b/Cargo.toml
index e9adeb6..b982d11 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -41,7 +41,7 @@ filters = "0.4.0"
futures = "0.3"
getset = "0.1"
git2 = "0.13"
-handlebars = { version = "3", features = ["no_logging"] }
+handlebars = { version = ">=4.0.1", features = ["no_logging"] }
human-panic = "1"
humantime = "2.1"
indicatif = ">= 0.16.1"
diff --git a/src/package/package.rs b/src/package/package.rs
index 5343d21..883ac1f 100644
--- a/src/package/package.rs
+++ b/src/package/package.rs
@@ -128,6 +128,13 @@ impl Package {
.chain(runtime_iter)
.unique_by(|res| res.as_ref().ok().cloned())
}
+
+ /// Get a wrapper object around self which implements a debug interface with all details about
+ /// the Package object
+ #[cfg(debug_assertions)]
+ pub fn debug_details(&self) -> DebugPackage<'_> {
+ DebugPackage(self)
+ }
}
impl std::fmt::Debug for Package {
@@ -145,6 +152,65 @@ impl std::fmt::Debug for Package {
}
}
+/// Helper type for printing debug information about a package with much more details than the
+/// Debug impl for Package provides.
+#[cfg(debug_assertions)]
+pub struct DebugPackage<'a>(&'a Package);
+
+#[cfg(debug_assertions)]
+impl<'a> std::fmt::Debug for DebugPackage<'a> {
+ fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::result::Result<(), std::fmt::Error> {
+ writeln!(f, "Package({name} {version} ({semver}))",
+ name = self.0.name,
+ version = self.0.version,
+ semver = if self.0.version_is_semver { "is semver" } else { "not semver" })?;
+
+ writeln!(f, "\tSources = ")?;
+ self.0.sources.iter().try_for_each(|(k, v)| writeln!(f, "\t\t{name} = (Url = {url}, Hash = {hash} ({hasht}), {dl})",
+ name = k,
+ url = v.url(),
+ hash = v.hash().value(),
+ hasht = v.hash().hashtype(),
+ dl = if *v.download_manually() { "manual download" } else { "automatic download" },
+ ))?;
+
+ writeln!(f, "\tBuild Dependencies = ")?;
+ self.0.dependencies.build.iter().try_for_each(|d| writeln!(f, "\t\t{:?}", d))?;
+
+ writeln!(f, "\tRuntime Dependencies = ")?;
+ self.0.dependencies.runtime.iter().try_for_each(|r| writeln!(f, "\t\t{:?}", r))?;
+
+ writeln!(f, "\tPatches = ")?;
+ self.0.patches.iter().try_for_each(|p| writeln!(f, "\t\t{}", p.display()))?;
+
+ writeln!(f, "\tEnvironment = ")?;
+ self.0.environment
+ .as_ref()
+ .map(|hm| hm.iter().try_for_each(|(k, v)| writeln!(f, "\t\t{:?} = {}", k, v)))
+ .transpose()?;
+
+ writeln!(f, "\tAllowed Images = ")?;
+
+ self.0.allowed_images
+ .as_ref()
+ .map(|v| v.iter().try_for_each(|i| writeln!(f, "\t\t{:?}", i)))
+ .transpose()?;
+
+ writeln!(f, "\tDenied Images = ")?;
+ self.0.denied_images
+ .as_ref()
+ .map(|v| v.iter().try_for_each(|i| writeln!(f, "\t\t{:?}", i)))
+ .transpose()?;
+
+ writeln!(f, "\tPhases = ")?;
+ self.0.phases
+ .iter()
+ .try_for_each(|(k, _)| writeln!(f, "\t\t{:?} = ...", k))?;
+
+ Ok(())
+ }
+}
+
impl PartialEq for Package {
fn eq(&self, other: &Package) -> bool {
(self.name(), self.version()).eq(&(other.name(), other.version()))
diff --git a/src/package/script.rs b/src/package/script.rs
index 30b198f..a0f1527 100644
--- a/src/package/script.rs
+++ b/src/package/script.rs
@@ -232,6 +232,12 @@ impl<'a> ScriptBuilder<'a> {
hb.register_helper("join", Box::new(JoinHelper));
hb.register_helper("joinwith", Box::new(JoinWithHelper));
hb.set_strict_mode(strict_mode);
+
+ #[cfg(debug_assertions)]
+ {
+ trace!("Rendering Package: {:?}", package.debug_details());
+ }
+
hb.render("script", package)
.with_context(|| anyhow!("Rendering script for package {} {} failed", package.name(), package.version()))
.map_err(Error::from)