Make updater an IPC module.
This commit is contained in:
parent
e528ac9217
commit
d8ad09b654
15
Cargo.lock
generated
15
Cargo.lock
generated
@ -594,7 +594,6 @@ dependencies = [
|
|||||||
"rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rust-crypto 0.2.36 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rustc-serialize 0.3.19 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
"rustc_version 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"semver 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
|
||||||
"sha3 0.1.0",
|
"sha3 0.1.0",
|
||||||
"table 0.1.0",
|
"table 0.1.0",
|
||||||
"target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
"target_info 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
@ -829,6 +828,17 @@ dependencies = [
|
|||||||
"xmltree 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"xmltree 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ipc-common-types"
|
||||||
|
version = "1.5.0"
|
||||||
|
dependencies = [
|
||||||
|
"ethcore-ipc 1.5.0",
|
||||||
|
"ethcore-ipc-codegen 1.5.0",
|
||||||
|
"ethcore-util 1.5.0",
|
||||||
|
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
"semver 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "isatty"
|
name = "isatty"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
@ -1305,7 +1315,10 @@ version = "1.5.0"
|
|||||||
dependencies = [
|
dependencies = [
|
||||||
"ethabi 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
"ethabi 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"ethcore 1.5.0",
|
"ethcore 1.5.0",
|
||||||
|
"ethcore-ipc 1.5.0",
|
||||||
|
"ethcore-ipc-codegen 1.5.0",
|
||||||
"ethcore-util 1.5.0",
|
"ethcore-util 1.5.0",
|
||||||
|
"ipc-common-types 1.5.0",
|
||||||
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
"log 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||||
"parity-hash-fetch 1.5.0",
|
"parity-hash-fetch 1.5.0",
|
||||||
]
|
]
|
||||||
|
20
ipc-common-types/Cargo.toml
Normal file
20
ipc-common-types/Cargo.toml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
[package]
|
||||||
|
description = "Types that implement IPC and are common to multiple modules."
|
||||||
|
name = "ipc-common-types"
|
||||||
|
version = "1.5.0"
|
||||||
|
license = "GPL-3.0"
|
||||||
|
authors = ["Parity Technologies <admin@parity.io>"]
|
||||||
|
build = "build.rs"
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
ethcore-ipc-codegen = { path = "../ipc/codegen" }
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
log = "0.3"
|
||||||
|
semver = "0.5"
|
||||||
|
ethcore-ipc = { path = "../ipc/rpc" }
|
||||||
|
ethcore-util = { path = "../util" }
|
||||||
|
|
||||||
|
[profile.release]
|
||||||
|
debug = true
|
||||||
|
lto = false
|
21
ipc-common-types/build.rs
Normal file
21
ipc-common-types/build.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
extern crate ethcore_ipc_codegen;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
ethcore_ipc_codegen::derive_binary("src/types/mod.rs.in").unwrap();
|
||||||
|
}
|
26
ipc-common-types/src/lib.rs
Normal file
26
ipc-common-types/src/lib.rs
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Updater for Parity executables
|
||||||
|
|
||||||
|
#[macro_use] extern crate log;
|
||||||
|
extern crate semver;
|
||||||
|
extern crate ethcore_util as util;
|
||||||
|
extern crate ethcore_ipc as ipc;
|
||||||
|
|
||||||
|
mod types;
|
||||||
|
|
||||||
|
pub use types::*;
|
21
ipc-common-types/src/types/mod.rs
Normal file
21
ipc-common-types/src/types/mod.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Types used in the public api
|
||||||
|
|
||||||
|
#![allow(dead_code, unused_assignments, unused_variables)] // codegen issues
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/mod.rs.in"));
|
||||||
|
|
21
ipc-common-types/src/types/mod.rs.in
Normal file
21
ipc-common-types/src/types/mod.rs.in
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
pub mod release_track;
|
||||||
|
pub mod version_info;
|
||||||
|
|
||||||
|
pub use release_track::{ReleaseTrack};
|
||||||
|
pub use version_info::{VersionInfo};
|
76
ipc-common-types/src/types/release_track.rs
Normal file
76
ipc-common-types/src/types/release_track.rs
Normal file
@ -0,0 +1,76 @@
|
|||||||
|
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Types used in the public API
|
||||||
|
|
||||||
|
use std::fmt;
|
||||||
|
|
||||||
|
/// A release's track.
|
||||||
|
#[derive(PartialEq, Eq, Clone, Copy, Debug, Binary)]
|
||||||
|
pub enum ReleaseTrack {
|
||||||
|
/// Stable track.
|
||||||
|
Stable,
|
||||||
|
/// Beta track.
|
||||||
|
Beta,
|
||||||
|
/// Nightly track.
|
||||||
|
Nightly,
|
||||||
|
/// No known track.
|
||||||
|
Unknown,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for ReleaseTrack {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
||||||
|
write!(f, "{}", match *self {
|
||||||
|
ReleaseTrack::Stable => "stable",
|
||||||
|
ReleaseTrack::Beta => "beta",
|
||||||
|
ReleaseTrack::Nightly => "nightly",
|
||||||
|
ReleaseTrack::Unknown => "unknown",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<'a> From<&'a str> for ReleaseTrack {
|
||||||
|
fn from(s: &'a str) -> Self {
|
||||||
|
match s {
|
||||||
|
"stable" => ReleaseTrack::Stable,
|
||||||
|
"beta" => ReleaseTrack::Beta,
|
||||||
|
"nightly" => ReleaseTrack::Nightly,
|
||||||
|
_ => ReleaseTrack::Unknown,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl From<u8> for ReleaseTrack {
|
||||||
|
fn from(i: u8) -> Self {
|
||||||
|
match i {
|
||||||
|
1 => ReleaseTrack::Stable,
|
||||||
|
2 => ReleaseTrack::Beta,
|
||||||
|
3 => ReleaseTrack::Nightly,
|
||||||
|
_ => ReleaseTrack::Unknown,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Into<u8> for ReleaseTrack {
|
||||||
|
fn into(self) -> u8 {
|
||||||
|
match self {
|
||||||
|
ReleaseTrack::Stable => 1,
|
||||||
|
ReleaseTrack::Beta => 2,
|
||||||
|
ReleaseTrack::Nightly => 3,
|
||||||
|
ReleaseTrack::Unknown => 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
68
ipc-common-types/src/types/version_info.rs
Normal file
68
ipc-common-types/src/types/version_info.rs
Normal file
@ -0,0 +1,68 @@
|
|||||||
|
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Types used in the public API
|
||||||
|
|
||||||
|
use std::fmt;
|
||||||
|
use semver::{Version};
|
||||||
|
use util::{H160};
|
||||||
|
use util::misc::raw_package_info;
|
||||||
|
use release_track::ReleaseTrack;
|
||||||
|
|
||||||
|
/// Version information of a particular release.
|
||||||
|
#[derive(Debug, Clone, PartialEq, Binary)]
|
||||||
|
pub struct VersionInfo {
|
||||||
|
/// The track on which it was released.
|
||||||
|
pub track: ReleaseTrack,
|
||||||
|
/// The version.
|
||||||
|
pub version: Version,
|
||||||
|
/// The (SHA1?) 160-bit hash of this build's code base.
|
||||||
|
pub hash: H160,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl fmt::Display for VersionInfo {
|
||||||
|
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
||||||
|
write!(f, "{}.{}.{}-{}-{}", self.version.major, self.version.minor, self.version.patch, self.track, self.hash)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl VersionInfo {
|
||||||
|
/// Get information for this (currently running) binary.
|
||||||
|
pub fn this() -> Self {
|
||||||
|
let raw = raw_package_info();
|
||||||
|
VersionInfo {
|
||||||
|
track: raw.0.into(),
|
||||||
|
version: { let mut v = Version::parse(raw.1).expect("Environment variables are known to be valid; qed"); v.build = vec![]; v.pre = vec![]; v },
|
||||||
|
hash: raw.2.into(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Compose the information from the provided raw fields.
|
||||||
|
pub fn from_raw(semver: u32, track: u8, hash: H160) -> Self {
|
||||||
|
let t = track.into();
|
||||||
|
VersionInfo {
|
||||||
|
version: Version {
|
||||||
|
major: (semver >> 16) as u64,
|
||||||
|
minor: ((semver >> 8) & 0xff) as u64,
|
||||||
|
patch: (semver & 0xff) as u64,
|
||||||
|
build: vec![],
|
||||||
|
pre: vec![],
|
||||||
|
},
|
||||||
|
track: t,
|
||||||
|
hash: hash,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -286,7 +286,6 @@ fn binary_expr_struct(
|
|||||||
post_write_stmts.push(quote_stmt!(cx,
|
post_write_stmts.push(quote_stmt!(cx,
|
||||||
if $range_ident.end - $range_ident.start > 0 {
|
if $range_ident.end - $range_ident.start > 0 {
|
||||||
if let Err(e) = $member_expr .to_bytes(&mut buffer[$range_ident], length_stack) {
|
if let Err(e) = $member_expr .to_bytes(&mut buffer[$range_ident], length_stack) {
|
||||||
warn!(target: "ipc", $error_message_literal);
|
|
||||||
return Err(e)
|
return Err(e)
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -804,6 +804,17 @@ binary_fixed_size!(H512);
|
|||||||
binary_fixed_size!(H2048);
|
binary_fixed_size!(H2048);
|
||||||
binary_fixed_size!(Address);
|
binary_fixed_size!(Address);
|
||||||
binary_fixed_size!(BinHandshake);
|
binary_fixed_size!(BinHandshake);
|
||||||
|
binary_fixed_size!(BinVersion);
|
||||||
|
|
||||||
|
impl BinaryConvertable for ::semver::Version {
|
||||||
|
fn from_bytes(bytes: &[u8], length_stack: &mut ::std::collections::VecDeque<usize>) -> Result<Self, BinaryConvertError> {
|
||||||
|
BinVersion::from_bytes(bytes, length_stack).map(BinVersion::to_semver)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn to_bytes(&self, buffer: &mut [u8], length_stack: &mut ::std::collections::VecDeque<usize>) -> Result<(), BinaryConvertError> {
|
||||||
|
BinVersion::from(self.clone()).to_bytes(buffer, length_stack)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn vec_serialize() {
|
fn vec_serialize() {
|
||||||
|
@ -24,4 +24,4 @@ extern crate ethcore_util as util;
|
|||||||
pub mod interface;
|
pub mod interface;
|
||||||
pub mod binary;
|
pub mod binary;
|
||||||
pub use interface::{IpcInterface, IpcSocket, invoke, IpcConfig, Handshake, Error, WithSocket};
|
pub use interface::{IpcInterface, IpcSocket, invoke, IpcConfig, Handshake, Error, WithSocket};
|
||||||
pub use binary::{BinaryConvertable, BinaryConvertError, BinHandshake};
|
pub use binary::{BinaryConvertable, BinaryConvertError, BinVersion, BinHandshake};
|
||||||
|
@ -4,6 +4,10 @@ name = "parity-updater"
|
|||||||
version = "1.5.0"
|
version = "1.5.0"
|
||||||
license = "GPL-3.0"
|
license = "GPL-3.0"
|
||||||
authors = ["Parity Technologies <admin@parity.io>"]
|
authors = ["Parity Technologies <admin@parity.io>"]
|
||||||
|
build = "build.rs"
|
||||||
|
|
||||||
|
[build-dependencies]
|
||||||
|
ethcore-ipc-codegen = { path = "../ipc/codegen" }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
log = "0.3"
|
log = "0.3"
|
||||||
@ -11,6 +15,8 @@ ethabi = "0.2.2"
|
|||||||
ethcore = { path = "../ethcore" }
|
ethcore = { path = "../ethcore" }
|
||||||
ethcore-util = { path = "../util" }
|
ethcore-util = { path = "../util" }
|
||||||
parity-hash-fetch = { path = "../hash-fetch" }
|
parity-hash-fetch = { path = "../hash-fetch" }
|
||||||
|
ipc-common-types = { path = "../ipc-common-types" }
|
||||||
|
ethcore-ipc = { path = "../ipc/rpc" }
|
||||||
|
|
||||||
[profile.release]
|
[profile.release]
|
||||||
debug = true
|
debug = true
|
||||||
|
22
updater/build.rs
Normal file
22
updater/build.rs
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
extern crate ethcore_ipc_codegen;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
ethcore_ipc_codegen::derive_binary("src/types/mod.rs.in").unwrap();
|
||||||
|
ethcore_ipc_codegen::derive_ipc_cond("src/service.rs", cfg!(feature="ipc")).unwrap();
|
||||||
|
}
|
@ -18,13 +18,21 @@
|
|||||||
|
|
||||||
#[macro_use] extern crate log;
|
#[macro_use] extern crate log;
|
||||||
extern crate ethcore_util as util;
|
extern crate ethcore_util as util;
|
||||||
|
extern crate ipc_common_types;
|
||||||
extern crate parity_hash_fetch as hash_fetch;
|
extern crate parity_hash_fetch as hash_fetch;
|
||||||
extern crate ethcore;
|
extern crate ethcore;
|
||||||
extern crate ethabi;
|
extern crate ethabi;
|
||||||
|
extern crate ethcore_ipc as ipc;
|
||||||
|
|
||||||
mod updater;
|
mod updater;
|
||||||
mod operations;
|
mod operations;
|
||||||
mod service;
|
mod types;
|
||||||
|
|
||||||
pub use service::{Service, ReleaseInfo, OperationsInfo, CapState};
|
mod service {
|
||||||
|
#![allow(dead_code, unused_assignments, unused_variables, missing_docs)] // codegen issues
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/service.rs"));
|
||||||
|
}
|
||||||
|
|
||||||
|
pub use service::{Service};
|
||||||
|
pub use types::all::{ReleaseInfo, OperationsInfo, CapState, VersionInfo, ReleaseTrack};
|
||||||
pub use updater::{Updater, UpdateFilter, UpdatePolicy};
|
pub use updater::{Updater, UpdateFilter, UpdatePolicy};
|
@ -14,54 +14,10 @@
|
|||||||
// You should have received a copy of the GNU General Public License
|
// You should have received a copy of the GNU General Public License
|
||||||
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
use util::{H256};
|
use types::all::{CapState, ReleaseInfo, OperationsInfo};
|
||||||
use util::misc::{VersionInfo};
|
use ipc_common_types::VersionInfo;
|
||||||
|
|
||||||
/// Information regarding a particular release of Parity
|
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
|
||||||
pub struct ReleaseInfo {
|
|
||||||
/// Information on the version.
|
|
||||||
pub version: VersionInfo,
|
|
||||||
/// Does this release contain critical security updates?
|
|
||||||
pub is_critical: bool,
|
|
||||||
/// The latest fork that this release can handle.
|
|
||||||
pub fork: u64,
|
|
||||||
/// Our platform's binary, if known.
|
|
||||||
pub binary: Option<H256>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Information on our operations environment.
|
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
|
||||||
pub struct OperationsInfo {
|
|
||||||
/// Our blockchain's latest fork.
|
|
||||||
pub fork: u64,
|
|
||||||
|
|
||||||
/// Last fork our client supports, if known.
|
|
||||||
pub this_fork: Option<u64>,
|
|
||||||
|
|
||||||
/// Information on our track's latest release.
|
|
||||||
pub track: ReleaseInfo,
|
|
||||||
/// Information on our minor version's latest release.
|
|
||||||
pub minor: Option<ReleaseInfo>,
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Information on the current version's consensus capabililty.
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq)]
|
|
||||||
pub enum CapState {
|
|
||||||
/// Unknown.
|
|
||||||
Unknown,
|
|
||||||
/// Capable of consensus indefinitely.
|
|
||||||
Capable,
|
|
||||||
/// Capable of consensus up until a definite block.
|
|
||||||
CapableUntil(u64),
|
|
||||||
/// Incapable of consensus since a particular block.
|
|
||||||
IncapableSince(u64),
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Default for CapState {
|
|
||||||
fn default() -> Self { CapState::Unknown }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
#[ipc(client_ident="RemoteUpdater")]
|
||||||
pub trait Service: Send + Sync {
|
pub trait Service: Send + Sync {
|
||||||
/// Is the currently running client capable of supporting the current chain?
|
/// Is the currently running client capable of supporting the current chain?
|
||||||
/// We default to true if there's no clear information.
|
/// We default to true if there's no clear information.
|
||||||
|
65
updater/src/types/all.rs
Normal file
65
updater/src/types/all.rs
Normal file
@ -0,0 +1,65 @@
|
|||||||
|
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Types used in the public API
|
||||||
|
|
||||||
|
use util::{H256};
|
||||||
|
pub use ipc_common_types::{VersionInfo, ReleaseTrack};
|
||||||
|
|
||||||
|
/// Information regarding a particular release of Parity
|
||||||
|
#[derive(Debug, Clone, PartialEq, Binary)]
|
||||||
|
pub struct ReleaseInfo {
|
||||||
|
/// Information on the version.
|
||||||
|
pub version: VersionInfo,
|
||||||
|
/// Does this release contain critical security updates?
|
||||||
|
pub is_critical: bool,
|
||||||
|
/// The latest fork that this release can handle.
|
||||||
|
pub fork: u64,
|
||||||
|
/// Our platform's binary, if known.
|
||||||
|
pub binary: Option<H256>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Information on our operations environment.
|
||||||
|
#[derive(Debug, Clone, PartialEq, Binary)]
|
||||||
|
pub struct OperationsInfo {
|
||||||
|
/// Our blockchain's latest fork.
|
||||||
|
pub fork: u64,
|
||||||
|
|
||||||
|
/// Last fork our client supports, if known.
|
||||||
|
pub this_fork: Option<u64>,
|
||||||
|
|
||||||
|
/// Information on our track's latest release.
|
||||||
|
pub track: ReleaseInfo,
|
||||||
|
/// Information on our minor version's latest release.
|
||||||
|
pub minor: Option<ReleaseInfo>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Information on the current version's consensus capabililty.
|
||||||
|
#[derive(Debug, Clone, Copy, PartialEq, Binary)]
|
||||||
|
pub enum CapState {
|
||||||
|
/// Unknown.
|
||||||
|
Unknown,
|
||||||
|
/// Capable of consensus indefinitely.
|
||||||
|
Capable,
|
||||||
|
/// Capable of consensus up until a definite block.
|
||||||
|
CapableUntil(u64),
|
||||||
|
/// Incapable of consensus since a particular block.
|
||||||
|
IncapableSince(u64),
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for CapState {
|
||||||
|
fn default() -> Self { CapState::Unknown }
|
||||||
|
}
|
21
updater/src/types/mod.rs
Normal file
21
updater/src/types/mod.rs
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
//! Types used in the public api
|
||||||
|
|
||||||
|
#![allow(dead_code, unused_assignments, unused_variables)] // codegen issues
|
||||||
|
include!(concat!(env!("OUT_DIR"), "/mod.rs.in"));
|
||||||
|
|
17
updater/src/types/mod.rs.in
Normal file
17
updater/src/types/mod.rs.in
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
// Copyright 2015, 2016 Parity Technologies (UK) Ltd.
|
||||||
|
// This file is part of Parity.
|
||||||
|
|
||||||
|
// Parity is free software: you can redistribute it and/or modify
|
||||||
|
// it under the terms of the GNU General Public License as published by
|
||||||
|
// the Free Software Foundation, either version 3 of the License, or
|
||||||
|
// (at your option) any later version.
|
||||||
|
|
||||||
|
// Parity is distributed in the hope that it will be useful,
|
||||||
|
// but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
// GNU General Public License for more details.
|
||||||
|
|
||||||
|
// You should have received a copy of the GNU General Public License
|
||||||
|
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
pub mod all;
|
@ -18,12 +18,14 @@ use std::sync::{Arc, Weak};
|
|||||||
use std::{fs, env};
|
use std::{fs, env};
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use std::path::{PathBuf};
|
use std::path::{PathBuf};
|
||||||
use util::misc::{VersionInfo, ReleaseTrack/*, platform*/};
|
//use util::misc::platform;
|
||||||
|
use ipc_common_types::{VersionInfo, ReleaseTrack};
|
||||||
use util::{Address, H160, H256, FixedHash, Mutex, Bytes};
|
use util::{Address, H160, H256, FixedHash, Mutex, Bytes};
|
||||||
use ethcore::client::{BlockId, BlockChainClient, ChainNotify};
|
use ethcore::client::{BlockId, BlockChainClient, ChainNotify};
|
||||||
use hash_fetch::{self as fetch, HashFetch};
|
use hash_fetch::{self as fetch, HashFetch};
|
||||||
use operations::Operations;
|
use operations::Operations;
|
||||||
use service::{Service, ReleaseInfo, OperationsInfo, CapState};
|
use service::{Service};
|
||||||
|
use types::all::{ReleaseInfo, OperationsInfo, CapState};
|
||||||
|
|
||||||
/// Filter for releases.
|
/// Filter for releases.
|
||||||
#[derive(Debug, Eq, PartialEq, Clone)]
|
#[derive(Debug, Eq, PartialEq, Clone)]
|
||||||
|
@ -37,7 +37,6 @@ tiny-keccak= "1.0"
|
|||||||
ethcore-bloom-journal = { path = "bloom" }
|
ethcore-bloom-journal = { path = "bloom" }
|
||||||
regex = "0.1"
|
regex = "0.1"
|
||||||
lru-cache = "0.1.0"
|
lru-cache = "0.1.0"
|
||||||
semver = "0.5"
|
|
||||||
|
|
||||||
[features]
|
[features]
|
||||||
default = []
|
default = []
|
||||||
|
@ -106,7 +106,6 @@ extern crate tiny_keccak;
|
|||||||
extern crate rlp;
|
extern crate rlp;
|
||||||
extern crate regex;
|
extern crate regex;
|
||||||
extern crate lru_cache;
|
extern crate lru_cache;
|
||||||
extern crate semver;
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate heapsize;
|
extern crate heapsize;
|
||||||
|
107
util/src/misc.rs
107
util/src/misc.rs
@ -17,7 +17,6 @@
|
|||||||
//! Diff misc.
|
//! Diff misc.
|
||||||
|
|
||||||
use common::*;
|
use common::*;
|
||||||
use semver::{Identifier, Version};
|
|
||||||
use rlp::{Stream, RlpStream};
|
use rlp::{Stream, RlpStream};
|
||||||
use target_info::Target;
|
use target_info::Target;
|
||||||
|
|
||||||
@ -33,107 +32,6 @@ pub enum Filth {
|
|||||||
Dirty,
|
Dirty,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// A release's track.
|
|
||||||
#[derive(PartialEq, Eq, Clone, Copy, Debug)]
|
|
||||||
pub enum ReleaseTrack {
|
|
||||||
/// Stable track.
|
|
||||||
Stable,
|
|
||||||
/// Beta track.
|
|
||||||
Beta,
|
|
||||||
/// Nightly track.
|
|
||||||
Nightly,
|
|
||||||
/// No known track.
|
|
||||||
Unknown,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Display for ReleaseTrack {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
|
||||||
write!(f, "{}", match *self {
|
|
||||||
ReleaseTrack::Stable => "stable",
|
|
||||||
ReleaseTrack::Beta => "beta",
|
|
||||||
ReleaseTrack::Nightly => "nightly",
|
|
||||||
ReleaseTrack::Unknown => "unknown",
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> From<&'a str> for ReleaseTrack {
|
|
||||||
fn from(s: &'a str) -> Self {
|
|
||||||
match s {
|
|
||||||
"stable" => ReleaseTrack::Stable,
|
|
||||||
"beta" => ReleaseTrack::Beta,
|
|
||||||
"nightly" => ReleaseTrack::Nightly,
|
|
||||||
_ => ReleaseTrack::Unknown,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<u8> for ReleaseTrack {
|
|
||||||
fn from(i: u8) -> Self {
|
|
||||||
match i {
|
|
||||||
1 => ReleaseTrack::Stable,
|
|
||||||
2 => ReleaseTrack::Beta,
|
|
||||||
3 => ReleaseTrack::Nightly,
|
|
||||||
_ => ReleaseTrack::Unknown,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Into<u8> for ReleaseTrack {
|
|
||||||
fn into(self) -> u8 {
|
|
||||||
match self {
|
|
||||||
ReleaseTrack::Stable => 1,
|
|
||||||
ReleaseTrack::Beta => 2,
|
|
||||||
ReleaseTrack::Nightly => 3,
|
|
||||||
ReleaseTrack::Unknown => 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Version information of a particular release.
|
|
||||||
#[derive(Debug, Clone, PartialEq)]
|
|
||||||
pub struct VersionInfo {
|
|
||||||
/// The track on which it was released.
|
|
||||||
pub track: ReleaseTrack,
|
|
||||||
/// The version.
|
|
||||||
pub version: Version,
|
|
||||||
/// The (SHA1?) 160-bit hash of this build's code base.
|
|
||||||
pub hash: H160,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl fmt::Display for VersionInfo {
|
|
||||||
fn fmt(&self, f: &mut fmt::Formatter) -> Result<(), fmt::Error> {
|
|
||||||
write!(f, "{}-{}", self.version, self.hash)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl VersionInfo {
|
|
||||||
/// Get information for this (currently running) binary.
|
|
||||||
pub fn this() -> Self {
|
|
||||||
VersionInfo {
|
|
||||||
track: env!["CARGO_PKG_VERSION_PRE"].into(),
|
|
||||||
version: Version::parse(env!["CARGO_PKG_VERSION"]).expect("Environment variables are known to be valid; qed"),
|
|
||||||
hash: sha().into(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Compose the information from the provided raw fields.
|
|
||||||
pub fn from_raw(semver: u32, track: u8, hash: H160) -> Self {
|
|
||||||
let t = track.into();
|
|
||||||
VersionInfo {
|
|
||||||
version: Version {
|
|
||||||
major: (semver >> 16) as u64,
|
|
||||||
minor: ((semver >> 8) & 0xff) as u64,
|
|
||||||
patch: (semver & 0xff) as u64,
|
|
||||||
build: vec![],
|
|
||||||
pre: vec![Identifier::AlphaNumeric(format!("{}", t))]
|
|
||||||
},
|
|
||||||
track: t,
|
|
||||||
hash: hash,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Get the platform identifier.
|
/// Get the platform identifier.
|
||||||
pub fn platform() -> String {
|
pub fn platform() -> String {
|
||||||
let env = Target::env();
|
let env = Target::env();
|
||||||
@ -163,3 +61,8 @@ pub fn version_data() -> Bytes {
|
|||||||
s.append(&&Target::os()[0..2]);
|
s.append(&&Target::os()[0..2]);
|
||||||
s.out()
|
s.out()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Provide raw information on the package.
|
||||||
|
pub fn raw_package_info() -> (&'static str, &'static str, &'static str) {
|
||||||
|
(env!["CARGO_PKG_VERSION_PRE"], env!["CARGO_PKG_VERSION"], sha())
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user