@ -19,10 +19,10 @@ use failure::{Error, ResultExt};
use serde ::{ self , Deserialize } ;
use serde_json ;
use std ::collections ::BTreeSet ;
use std ::env ;
use std ::io ::Write ;
use strsim ::levenshtein ;
use toml ;
use which ;
use PBAR ;
const WASM_PACK_METADATA_KEY : & str = "package.metadata.wasm-pack" ;
@ -143,55 +143,57 @@ impl Crate {
/// Returns latest wasm-pack version
pub fn return_wasm_pack_latest_version ( ) -> Option < String > {
let current_time = chrono ::offset ::Local ::now ( ) ;
Crate ::return_wasm_pack_file ( ) . and_then ( | contents | {
let last_updated = Crate ::return_stamp_file_value ( & contents , "created" )
. and_then ( | t | Some ( DateTime ::parse_from_str ( t . as_str ( ) , "%+" ) . unwrap ( ) ) ) ;
let version = Crate ::return_stamp_file_value ( & contents , "version" ) . and_then ( | v | {
if current_time
. signed_duration_since ( last_updated . unwrap ( ) )
. num_hours ( )
> 24
{
return Crate ::return_api_call_result ( current_time ) ;
} else {
return Some ( v ) ;
}
} ) ;
version
} ) ;
return Crate ::return_api_call_result ( current_time ) ;
Self ::return_wasm_pack_file ( )
. and_then ( | contents | {
let last_updated = Self ::return_stamp_file_value ( & contents , "created" )
. and_then ( | t | DateTime ::parse_from_str ( t . as_str ( ) , "%+" ) . ok ( ) ) ;
Self ::return_stamp_file_value ( & contents , "version" ) . and_then ( | v | {
last_updated . and_then ( | last_updated | {
if current_time . signed_duration_since ( last_updated ) . num_hours ( ) > 24 {
Self ::return_api_call_result ( current_time )
} else {
Some ( v )
}
} )
} )
} )
. map_or ( Self ::return_api_call_result ( current_time ) , | value | {
Some ( value )
} )
}
fn return_api_call_result ( current_time : DateTime < offset ::Local > ) -> Option < String > {
Crate ::return_latest_wasm_pack_version ( ) . and_then ( | v | {
Crate ::override_stamp_file ( current_time , & v ) ;
Self ::return_latest_wasm_pack_version ( ) . and_then ( | v | {
Self ::override_stamp_file ( current_time , & v ) . ok ( ) ;
Some ( v )
} )
}
fn override_stamp_file ( current_time : DateTime < offset ::Local > , version : & String ) {
if let Ok ( path ) = which ::which ( "wasm-pack" ) {
let file = fs ::OpenOptions ::new ( )
. read ( true )
. write ( true )
. append ( true )
. create ( true )
. open ( path . with_extension ( "stamp" ) ) ;
if let Ok ( ( ) ) = file . as_ref ( ) . unwrap ( ) . set_len ( 0 ) {
if let Err ( _ ) = write! (
file . unwrap ( ) ,
"created {:?}\nversion {}" ,
current_time ,
version
) { }
}
}
fn override_stamp_file (
current_time : DateTime < offset ::Local > ,
version : & String ,
) -> Result < ( ) , failure ::Error > {
let path = env ::current_exe ( ) ? ;
let mut file = fs ::OpenOptions ::new ( )
. read ( true )
. write ( true )
. append ( true )
. create ( true )
. open ( path . with_extension ( "stamp" ) ) ? ;
file . set_len ( 0 ) ? ;
write! ( file , "created {:?}\nversion {}" , current_time , version ) ? ;
Ok ( ( ) )
}
/// Return stamp file where metadata is stored.
fn return_wasm_pack_file ( ) -> Option < String > {
if let Ok ( path ) = which ::which ( "wasm-pack" ) {
if let Ok ( path ) = env ::current_exe ( ) {
if let Ok ( file ) = fs ::read_to_string ( path . with_extension ( "stamp" ) ) {
return Some ( file ) ;
}
@ -201,7 +203,7 @@ impl Crate {
/// Returns wasm-pack latest version (if it's received) by executing check_wasm_pack_latest_version function.
fn return_latest_wasm_pack_version ( ) -> Option < String > {
if let Ok ( crt ) = Crate ::check_wasm_pack_latest_version ( ) {
if let Ok ( crt ) = Self ::check_wasm_pack_latest_version ( ) {
return Some ( crt . crt . max_version ) ;
}
None