1
1
use moon_config:: { ProjectsAliasesMap , ProjectsSourcesMap } ;
2
- use moon_hasher:: { hash_btree, Hasher , Sha256 } ;
2
+ use moon_hasher:: { hash_btree, Digest , Hasher , Sha256 } ;
3
3
use serde:: { Deserialize , Serialize } ;
4
- use std:: collections:: BTreeMap ;
4
+ use std:: { collections:: BTreeMap , env } ;
5
5
6
- #[ derive( Default , Deserialize , Serialize ) ]
6
+ #[ derive( Deserialize , Serialize ) ]
7
7
#[ serde( rename_all = "camelCase" ) ]
8
8
pub struct GraphHasher {
9
9
aliases : BTreeMap < String , String > ,
10
10
11
11
configs : BTreeMap < String , String > ,
12
12
13
13
sources : BTreeMap < String , String > ,
14
+
15
+ // Version of the moon CLI. We need to include this so that the graph
16
+ // cache is invalidated between each release, otherwise internal Rust
17
+ // changes (in project or task crates) are not reflected until the cache
18
+ // is invalidated, which puts the program in a weird state.
19
+ version : String ,
14
20
}
15
21
16
22
impl GraphHasher {
23
+ pub fn new ( ) -> Self {
24
+ GraphHasher {
25
+ aliases : BTreeMap :: default ( ) ,
26
+ configs : BTreeMap :: default ( ) ,
27
+ sources : BTreeMap :: default ( ) ,
28
+ version : env:: var ( "MOON_VERSION" ) . unwrap_or_default ( ) ,
29
+ }
30
+ }
31
+
17
32
pub fn hash_aliases ( & mut self , aliases : & ProjectsAliasesMap ) {
18
33
self . aliases . extend ( aliases. to_owned ( ) ) ;
19
34
}
@@ -32,6 +47,7 @@ impl Hasher for GraphHasher {
32
47
hash_btree ( & self . aliases , sha) ;
33
48
hash_btree ( & self . configs , sha) ;
34
49
hash_btree ( & self . sources , sha) ;
50
+ sha. update ( self . version . as_bytes ( ) ) ;
35
51
}
36
52
37
53
fn serialize ( & self ) -> serde_json:: Value {
0 commit comments