Skip to content
This repository has been archived by the owner on Dec 29, 2022. It is now read-only.

Dump pkg version & build date & commit hash if run with --version flag #308

Merged
merged 4 commits into from
May 11, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ name = "rls"
version = "0.1.0"
authors = ["Jonathan Turner <[email protected]>"]

build = "build.rs"

[dependencies]
cargo = { git = "https://github.com/rust-lang/cargo" }
derive-new = "0.3"
Expand Down
55 changes: 55 additions & 0 deletions build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
// Copyright 2016 The Rust Project Developers. See the COPYRIGHT
// file at the top-level directory of this distribution and at
// http://rust-lang.org/COPYRIGHT.
//
// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. This file may not be copied, modified, or distributed
// except according to those terms.

// The original code is [rustup.rs][rustup]
// [rustup]: https://github.com/rust-lang-nursery/rustup.rs/tree/a1c6be19add9c99f8d8868ec384aa76057fe7f70

use std::env;
use std::fs::File;
use std::io::Write;
use std::path::PathBuf;
use std::process::Command;

fn main() {
let out_dir = PathBuf::from(env::var_os("OUT_DIR").unwrap());

File::create(out_dir.join("commit-info.txt"))
.unwrap()
.write_all(commit_info().as_bytes())
.unwrap();
}

// Try to get hash and date of the last commit on a best effort basis. If anything goes wrong
// (git not installed or if this is not a git repository) just return an empty string.
fn commit_info() -> String {
match (commit_hash(), commit_date()) {
(Some(hash), Some(date)) => format!(" ({} {})", hash.trim_right(), date),
_ => String::new(),
}
}

fn commit_hash() -> Option<String> {
Command::new("git")
.args(&["rev-parse", "--short", "HEAD"])
.output()
.ok()
.and_then(|r| String::from_utf8(r.stdout).ok())
}

fn commit_date() -> Option<String> {
Command::new("git")
.args(&["log",
"-1",
"--date=short",
"--pretty=format:%cd"])
.output()
.ok()
.and_then(|r| String::from_utf8(r.stdout).ok())
}
25 changes: 16 additions & 9 deletions src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,14 +51,21 @@ type Span = span::Span<span::ZeroIndexed>;
pub fn main() {
env_logger::init().unwrap();

let arg_count = ::std::env::args().count();
if arg_count > 1 {
cmd::run();
} else {
let analysis = Arc::new(analysis::AnalysisHost::new(analysis::Target::Debug));
let vfs = Arc::new(vfs::Vfs::new());
let build_queue = Arc::new(build::BuildQueue::new(vfs.clone()));

server::run_server(analysis, vfs, build_queue);
if let Some(first_arg) = ::std::env::args().skip(1).next() {
match first_arg.as_str() {
"--version" | "-V" => println!("rls {}", version()),
_ => cmd::run(),
}
return;
}

let analysis = Arc::new(analysis::AnalysisHost::new(analysis::Target::Debug));
let vfs = Arc::new(vfs::Vfs::new());
let build_queue = Arc::new(build::BuildQueue::new(vfs.clone()));

server::run_server(analysis, vfs, build_queue);
}

fn version() -> &'static str {
concat!(env!("CARGO_PKG_VERSION"), include_str!(concat!(env!("OUT_DIR"), "/commit-info.txt")))
}