@@ -4,11 +4,14 @@ use std::{env, path::PathBuf, process::Command};
4
4
5
5
fn main ( ) {
6
6
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
+ }
8
11
}
9
12
10
13
fn set_rerun ( ) {
11
- println ! ( "cargo:rerun-if-env-changed=RUST_ANALYZER_REV " ) ;
14
+ println ! ( "cargo:rerun-if-env-changed=CFG_RELEASE " ) ;
12
15
13
16
let mut manifest_dir = PathBuf :: from (
14
17
env:: var ( "CARGO_MANIFEST_DIR" ) . expect ( "`CARGO_MANIFEST_DIR` is always set by cargo." ) ,
@@ -27,47 +30,21 @@ fn set_rerun() {
27
30
println ! ( "cargo:warning=Could not find `.git/HEAD` from manifest dir!" ) ;
28
31
}
29
32
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( ) )
73
50
}
0 commit comments