Skip to content
Snippets Groups Projects
Commit 981b3c79 authored by Sergey Pepyakin's avatar Sergey Pepyakin Committed by Gavin Wood
Browse files

Print version when panic (#3608)

* Print version when panic

* Fix tests.
parent 634ca73e
No related merge requests found
...@@ -77,7 +77,7 @@ const NODE_KEY_ED25519_FILE: &str = "secret_ed25519"; ...@@ -77,7 +77,7 @@ const NODE_KEY_ED25519_FILE: &str = "secret_ed25519";
/// Executable version. Used to pass version information from the root crate. /// Executable version. Used to pass version information from the root crate.
pub struct VersionInfo { pub struct VersionInfo {
/// Implemtation name. /// Implementaiton name.
pub name: &'static str, pub name: &'static str,
/// Implementation version. /// Implementation version.
pub version: &'static str, pub version: &'static str,
...@@ -191,13 +191,13 @@ where ...@@ -191,13 +191,13 @@ where
I: IntoIterator, I: IntoIterator,
<I as IntoIterator>::Item: Into<std::ffi::OsString> + Clone, <I as IntoIterator>::Item: Into<std::ffi::OsString> + Clone,
{ {
panic_handler::set(version.support_url);
let full_version = service::config::full_version_from_strs( let full_version = service::config::full_version_from_strs(
version.version, version.version,
version.commit version.commit
); );
panic_handler::set(version.support_url, &full_version);
let matches = CoreParams::<CC, RP>::clap() let matches = CoreParams::<CC, RP>::clap()
.name(version.executable_name) .name(version.executable_name)
.author(version.author) .author(version.author)
......
...@@ -494,7 +494,7 @@ mod tests { ...@@ -494,7 +494,7 @@ mod tests {
execute_with_proof_failure(&remote_client, 2, "Core_version"); execute_with_proof_failure(&remote_client, 2, "Core_version");
// check that proof check doesn't panic even if proof is incorrect AND panic handler is set // check that proof check doesn't panic even if proof is incorrect AND panic handler is set
panic_handler::set("TEST"); panic_handler::set("TEST", "1.2.3");
execute_with_proof_failure(&remote_client, 2, "Core_version"); execute_with_proof_failure(&remote_client, 2, "Core_version");
} }
......
...@@ -51,8 +51,13 @@ enum OnPanic { ...@@ -51,8 +51,13 @@ enum OnPanic {
/// ///
/// The `bug_url` parameter is an invitation for users to visit that URL to submit a bug report /// The `bug_url` parameter is an invitation for users to visit that URL to submit a bug report
/// in the case where a panic happens. /// in the case where a panic happens.
pub fn set(bug_url: &'static str) { pub fn set(bug_url: &'static str, version: &str) {
panic::set_hook(Box::new(move |c| panic_hook(c, bug_url))); panic::set_hook(Box::new({
let version = version.to_string();
move |c| {
panic_hook(c, bug_url, &version)
}
}));
} }
macro_rules! ABOUT_PANIC { macro_rules! ABOUT_PANIC {
...@@ -124,7 +129,7 @@ impl Drop for AbortGuard { ...@@ -124,7 +129,7 @@ impl Drop for AbortGuard {
} }
/// Function being called when a panic happens. /// Function being called when a panic happens.
fn panic_hook(info: &PanicInfo, report_url: &'static str) { fn panic_hook(info: &PanicInfo, report_url: &'static str, version: &str) {
let location = info.location(); let location = info.location();
let file = location.as_ref().map(|l| l.file()).unwrap_or("<unknown>"); let file = location.as_ref().map(|l| l.file()).unwrap_or("<unknown>");
let line = location.as_ref().map(|l| l.line()).unwrap_or(0); let line = location.as_ref().map(|l| l.line()).unwrap_or(0);
...@@ -147,6 +152,8 @@ fn panic_hook(info: &PanicInfo, report_url: &'static str) { ...@@ -147,6 +152,8 @@ fn panic_hook(info: &PanicInfo, report_url: &'static str) {
let _ = writeln!(stderr, ""); let _ = writeln!(stderr, "");
let _ = writeln!(stderr, "===================="); let _ = writeln!(stderr, "====================");
let _ = writeln!(stderr, ""); let _ = writeln!(stderr, "");
let _ = writeln!(stderr, "Version: {}", version);
let _ = writeln!(stderr, "");
let _ = writeln!(stderr, "{:?}", backtrace); let _ = writeln!(stderr, "{:?}", backtrace);
let _ = writeln!(stderr, ""); let _ = writeln!(stderr, "");
let _ = writeln!( let _ = writeln!(
...@@ -169,14 +176,14 @@ mod tests { ...@@ -169,14 +176,14 @@ mod tests {
#[test] #[test]
fn does_not_abort() { fn does_not_abort() {
set("test"); set("test", "1.2.3");
let _guard = AbortGuard::force_unwind(); let _guard = AbortGuard::force_unwind();
::std::panic::catch_unwind(|| panic!()).ok(); ::std::panic::catch_unwind(|| panic!()).ok();
} }
#[test] #[test]
fn does_not_abort_after_never_abort() { fn does_not_abort_after_never_abort() {
set("test"); set("test", "1.2.3");
let _guard = AbortGuard::never_abort(); let _guard = AbortGuard::never_abort();
let _guard = AbortGuard::force_abort(); let _guard = AbortGuard::force_abort();
std::panic::catch_unwind(|| panic!()).ok(); std::panic::catch_unwind(|| panic!()).ok();
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment