aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/servo/main.rs6
-rw-r--r--components/util/opts.rs8
-rw-r--r--python/servo/command_base.py16
3 files changed, 30 insertions, 0 deletions
diff --git a/components/servo/main.rs b/components/servo/main.rs
index bf4c0b14f4c..ca0eec17955 100644
--- a/components/servo/main.rs
+++ b/components/servo/main.rs
@@ -40,6 +40,7 @@ use servo::Browser;
use servo::compositing::windowing::WindowEvent;
use servo::util::opts::{self, ArgumentParsingResult};
use servo::util::panicking::initiate_panic_hook;
+use std::process;
use std::rc::Rc;
pub mod platform {
@@ -102,6 +103,11 @@ fn main() {
return servo::run_content_process(token)
}
+ if opts::get().is_printing_version {
+ println!("Servo {}{}", env!("CARGO_PKG_VERSION"), env!("GIT_INFO"));
+ process::exit(0);
+ }
+
let window = app::create_window(None);
// Our wrapper around `Browser` that also implements some
diff --git a/components/util/opts.rs b/components/util/opts.rs
index 711782ab3ea..1fe76f96d26 100644
--- a/components/util/opts.rs
+++ b/components/util/opts.rs
@@ -202,6 +202,9 @@ pub struct Opts {
// don't skip any backtraces on panic
pub full_backtraces: bool,
+
+ /// Print the version and exit.
+ pub is_printing_version: bool,
}
fn print_usage(app: &str, opts: &Options) {
@@ -507,6 +510,7 @@ pub fn default_opts() -> Opts {
render_api: DEFAULT_RENDER_API,
config_dir: None,
full_backtraces: false,
+ is_printing_version: false,
}
}
@@ -564,6 +568,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult {
opts.optopt("G", "graphics", "Select graphics backend (gl or es2)", "gl");
opts.optopt("", "config-dir",
"config directory following xdg spec on linux platform", "");
+ opts.optflag("v", "version", "Display servo version information");
let opt_match = match opts.parse(args) {
@@ -753,6 +758,8 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult {
_ => args_fail(&format!("error: graphics option must be gl or es2:")),
};
+ let is_printing_version = opt_match.opt_present("v") || opt_match.opt_present("version");
+
let opts = Opts {
is_running_problem_test: is_running_problem_test,
url: Some(url),
@@ -807,6 +814,7 @@ pub fn from_cmdline_args(args: &[String]) -> ArgumentParsingResult {
use_msaa: debug_options.use_msaa,
config_dir: opt_match.opt_str("config-dir"),
full_backtraces: debug_options.full_backtraces,
+ is_printing_version: is_printing_version,
};
set_defaults(opts);
diff --git a/python/servo/command_base.py b/python/servo/command_base.py
index e90245f43ec..990bc9a586c 100644
--- a/python/servo/command_base.py
+++ b/python/servo/command_base.py
@@ -374,6 +374,22 @@ class CommandBase(object):
env['RUSTFLAGS'] = env.get('RUSTFLAGS', "") + " -W unused-extern-crates"
+ git_info = []
+ if os.path.isdir('.git'):
+ git_sha = subprocess.check_output([
+ 'git', 'rev-parse', '--short', 'HEAD'
+ ]).strip()
+ git_is_dirty = bool(subprocess.check_output([
+ 'git', 'status', '--porcelain'
+ ]).strip())
+
+ git_info.append('')
+ git_info.append(git_sha)
+ if git_is_dirty:
+ git_info.append('dirty')
+
+ env['GIT_INFO'] = '-'.join(git_info)
+
return env
def servo_crate(self):