diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2019-02-12 15:20:54 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-12 15:20:54 -0500 |
commit | 677a48781d566cd6645ef0df8207fc8e4d888688 (patch) | |
tree | 6bc73e046db69e32510c876650d6cc0cd85ac6d0 /src | |
parent | 0b0d962eb9cf6e41f840a65d3718c4d0a12eeb54 (diff) |
Include deno version in source_code_hash (#1751)
Fixes #472
Diffstat (limited to 'src')
-rw-r--r-- | src/deno_dir.rs | 51 |
1 files changed, 28 insertions, 23 deletions
diff --git a/src/deno_dir.rs b/src/deno_dir.rs index b074c0458..9d175077a 100644 --- a/src/deno_dir.rs +++ b/src/deno_dir.rs @@ -8,6 +8,7 @@ use crate::fs as deno_fs; use crate::http_util; use crate::js_errors::SourceMapGetter; use crate::msg; +use crate::version; use dirs; use ring; @@ -101,7 +102,7 @@ impl DenoDir { filename: &str, source_code: &str, ) -> (PathBuf, PathBuf) { - let cache_key = source_code_hash(filename, source_code); + let cache_key = source_code_hash(filename, source_code, version::DENO); ( self.gen.join(cache_key.to_string() + ".js"), self.gen.join(cache_key.to_string() + ".js.map"), @@ -478,9 +479,13 @@ fn get_cache_filename(basedir: &Path, url: &Url) -> PathBuf { out } -// https://github.com/denoland/deno/blob/golang/deno_dir.go#L25-L30 -fn source_code_hash(filename: &str, source_code: &str) -> String { +fn source_code_hash( + filename: &str, + source_code: &str, + version: &str, +) -> String { let mut ctx = ring::digest::Context::new(&ring::digest::SHA1); + ctx.update(version.as_bytes()); ctx.update(filename.as_bytes()); ctx.update(source_code.as_bytes()); let digest = ctx.finish(); @@ -601,16 +606,15 @@ mod tests { #[test] fn test_cache_path() { let (temp_dir, deno_dir) = test_setup(false, false); + let filename = "hello.js"; + let source_code = "1+2"; + let hash = source_code_hash(filename, source_code, version::DENO); assert_eq!( ( - temp_dir - .path() - .join("gen/a3e29aece8d35a19bf9da2bb1c086af71fb36ed5.js"), - temp_dir - .path() - .join("gen/a3e29aece8d35a19bf9da2bb1c086af71fb36ed5.js.map") + temp_dir.path().join(format!("gen/{}.js", hash)), + temp_dir.path().join(format!("gen/{}.js.map", hash)) ), - deno_dir.cache_path("hello.ts", "1+2") + deno_dir.cache_path(filename, source_code) ); } @@ -622,15 +626,11 @@ mod tests { let source_code = "1+2"; let output_code = "1+2 // output code"; let source_map = "{}"; + let hash = source_code_hash(filename, source_code, version::DENO); let (cache_path, source_map_path) = deno_dir.cache_path(filename, source_code); - assert!( - cache_path.ends_with("gen/e8e3ee6bee4aef2ec63f6ec3db7fc5fdfae910ae.js") - ); - assert!( - source_map_path - .ends_with("gen/e8e3ee6bee4aef2ec63f6ec3db7fc5fdfae910ae.js.map") - ); + assert!(cache_path.ends_with(format!("gen/{}.js", hash))); + assert!(source_map_path.ends_with(format!("gen/{}.js.map", hash))); let r = deno_dir.code_cache(filename, source_code, output_code, source_map); r.expect("code_cache error"); @@ -641,18 +641,23 @@ mod tests { #[test] fn test_source_code_hash() { assert_eq!( - "a3e29aece8d35a19bf9da2bb1c086af71fb36ed5", - source_code_hash("hello.ts", "1+2") + "7e44de2ed9e0065da09d835b76b8d70be503d276", + source_code_hash("hello.ts", "1+2", "0.2.11") ); // Different source_code should result in different hash. assert_eq!( - "914352911fc9c85170908ede3df1128d690dda41", - source_code_hash("hello.ts", "1") + "57033366cf9db1ef93deca258cdbcd9ef5f4bde1", + source_code_hash("hello.ts", "1", "0.2.11") ); // Different filename should result in different hash. assert_eq!( - "2e396bc66101ecc642db27507048376d972b1b70", - source_code_hash("hi.ts", "1+2") + "19657f90b5b0540f87679e2fb362e7bd62b644b0", + source_code_hash("hi.ts", "1+2", "0.2.11") + ); + // Different version should result in different hash. + assert_eq!( + "e2b4b7162975a02bf2770f16836eb21d5bcb8be1", + source_code_hash("hi.ts", "1+2", "0.2.0") ); } |