@@ -4,11 +4,14 @@ use std::{env, path::PathBuf, process::Command};
44
55fn main ( ) {
66 set_rerun ( ) ;
7- println ! ( "cargo:rustc-env=REV={}" , rev( ) ) ;
7+ set_commit_info ( ) ;
8+ if option_env ! ( "CFG_RELEASE" ) . is_none ( ) {
9+ println ! ( "cargo:rustc-env=POKE_RA_DEVS=1" ) ;
10+ }
811}
912
1013fn set_rerun ( ) {
11- println ! ( "cargo:rerun-if-env-changed=RUST_ANALYZER_REV " ) ;
14+ println ! ( "cargo:rerun-if-env-changed=CFG_RELEASE " ) ;
1215
1316 let mut manifest_dir = PathBuf :: from (
1417 env:: var ( "CARGO_MANIFEST_DIR" ) . expect ( "`CARGO_MANIFEST_DIR` is always set by cargo." ) ,
@@ -27,47 +30,21 @@ fn set_rerun() {
2730 println ! ( "cargo:warning=Could not find `.git/HEAD` from manifest dir!" ) ;
2831}
2932
30- fn rev ( ) -> String {
31- if let Ok ( rev) = env:: var ( "RUST_ANALYZER_REV" ) {
32- return rev;
33- }
34-
35- if let Some ( commit_hash) = commit_hash ( ) {
36- let mut buf = commit_hash;
37-
38- if let Some ( date) = build_date ( ) {
39- buf. push ( ' ' ) ;
40- buf. push_str ( & date) ;
41- }
42-
43- let channel = env:: var ( "RUST_ANALYZER_CHANNEL" ) . unwrap_or_else ( |_| "dev" . to_string ( ) ) ;
44- buf. push ( ' ' ) ;
45- buf. push_str ( & channel) ;
46-
47- return buf;
48- }
49-
50- "???????" . to_string ( )
51- }
52-
53- fn commit_hash ( ) -> Option < String > {
54- exec ( "git rev-parse --short HEAD" ) . ok ( )
55- }
56-
57- fn build_date ( ) -> Option < String > {
58- exec ( "date -u +%Y-%m-%d" ) . ok ( )
59- }
60-
61- fn exec ( command : & str ) -> std:: io:: Result < String > {
62- let args = command. split_ascii_whitespace ( ) . collect :: < Vec < _ > > ( ) ;
63- let output = Command :: new ( args[ 0 ] ) . args ( & args[ 1 ..] ) . output ( ) ?;
64- if !output. status . success ( ) {
65- return Err ( std:: io:: Error :: new (
66- std:: io:: ErrorKind :: InvalidData ,
67- format ! ( "command {:?} returned non-zero code" , command, ) ,
68- ) ) ;
69- }
70- let stdout = String :: from_utf8 ( output. stdout )
71- . map_err ( |err| std:: io:: Error :: new ( std:: io:: ErrorKind :: InvalidData , err) ) ?;
72- Ok ( stdout. trim ( ) . to_string ( ) )
33+ fn set_commit_info ( ) {
34+ let output = match Command :: new ( "git" )
35+ . arg ( "log" )
36+ . arg ( "-1" )
37+ . arg ( "--date=short" )
38+ . arg ( "--format=%H %h %cd" )
39+ . output ( )
40+ {
41+ Ok ( output) if output. status . success ( ) => output,
42+ _ => return ,
43+ } ;
44+ let stdout = String :: from_utf8 ( output. stdout ) . unwrap ( ) ;
45+ let mut parts = stdout. split_whitespace ( ) ;
46+ let mut next = || parts. next ( ) . unwrap ( ) ;
47+ println ! ( "cargo:rustc-env=RA_COMMIT_HASH={}" , next( ) ) ;
48+ println ! ( "cargo:rustc-env=RA_COMMIT_SHORT_HASH={}" , next( ) ) ;
49+ println ! ( "cargo:rustc-env=RA_COMMIT_DATE={}" , next( ) )
7350}
0 commit comments