diff --git a/rustfmt-bin/Cargo.toml b/rustfmt-bin/Cargo.toml new file mode 100644 index 00000000000..c07146dcb01 --- /dev/null +++ b/rustfmt-bin/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "rustfmt-bin" +version = "0.4.0" +authors = ["Nicholas Cameron ", "The Rustfmt developers"] +description = "Tool to find and fix Rust formatting issues" +repository = "https://github.com/rust-lang-nursery/rustfmt" +readme = "README.md" +license = "Apache-2.0/MIT" +build = "build.rs" +categories = ["development-tools"] + +[[bin]] +name = "rustfmt" +path = "src/main.rs" + +[dependencies] +env_logger = "0.4" +getopts = "0.2" +rustfmt-config = { path = "../rustfmt-config" } +rustfmt-core = { path = "../rustfmt-core" } \ No newline at end of file diff --git a/rustfmt-bin/build.rs b/rustfmt-bin/build.rs new file mode 100644 index 00000000000..2643946236d --- /dev/null +++ b/rustfmt-bin/build.rs @@ -0,0 +1,49 @@ +// Copyright 2017 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 or the MIT license +// , at your +// option. This file may not be copied, modified, or distributed +// except according to those terms. + +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 { + Command::new("git") + .args(&["rev-parse", "--short", "HEAD"]) + .output() + .ok() + .and_then(|r| String::from_utf8(r.stdout).ok()) +} + +fn commit_date() -> Option { + Command::new("git") + .args(&["log", "-1", "--date=short", "--pretty=format:%cd"]) + .output() + .ok() + .and_then(|r| String::from_utf8(r.stdout).ok()) +} diff --git a/src/bin/rustfmt.rs b/rustfmt-bin/src/main.rs similarity index 98% rename from src/bin/rustfmt.rs rename to rustfmt-bin/src/main.rs index 214c02f95a5..fbaacc69bdf 100644 --- a/src/bin/rustfmt.rs +++ b/rustfmt-bin/src/main.rs @@ -8,24 +8,25 @@ // option. This file may not be copied, modified, or distributed // except according to those terms. -#![feature(rustc_private)] #![cfg(not(test))] extern crate env_logger; extern crate getopts; -extern crate rustfmt_nightly as rustfmt; +extern crate rustfmt_config as config; +extern crate rustfmt_core as rustfmt; use std::{env, error}; use std::fs::File; use std::io::{self, Read, Write}; use std::path::{Path, PathBuf}; -use std::str::FromStr; use getopts::{Matches, Options}; +use config::{get_toml_path, Color, Config, WriteMode}; +use config::file_lines::FileLines; use rustfmt::{run, FileName, Input, Summary}; -use rustfmt::config::{get_toml_path, Color, Config, WriteMode}; -use rustfmt::file_lines::FileLines; + +use std::str::FromStr; type FmtError = Box; type FmtResult = std::result::Result;