diff options
author | Aleksey Kladov <[email protected]> | 2020-03-18 12:23:44 +0000 |
---|---|---|
committer | Aleksey Kladov <[email protected]> | 2020-03-18 12:23:44 +0000 |
commit | e511b3280f9640c47bfc0e37494bc11806bdba9f (patch) | |
tree | 1f6fbf906ec4404ab8bb0e4011d54c781ba26a64 /xtask | |
parent | 2a3543d1953daeb240c214ececd273f1040b0516 (diff) |
Make xtask dist more reliable
Diffstat (limited to 'xtask')
-rw-r--r-- | xtask/src/dist.rs | 41 |
1 files changed, 29 insertions, 12 deletions
diff --git a/xtask/src/dist.rs b/xtask/src/dist.rs index b5dc2354f..e3dddd9b1 100644 --- a/xtask/src/dist.rs +++ b/xtask/src/dist.rs | |||
@@ -23,27 +23,26 @@ fn dist_client(nightly: bool) -> Result<()> { | |||
23 | let _d = pushd("./editors/code"); | 23 | let _d = pushd("./editors/code"); |
24 | 24 | ||
25 | let package_json_path = PathBuf::from("./package.json"); | 25 | let package_json_path = PathBuf::from("./package.json"); |
26 | let original_package_json = fs2::read_to_string(&package_json_path)?; | 26 | let mut patch = Patch::new(package_json_path.clone())?; |
27 | let _restore = | ||
28 | Restore { path: package_json_path.clone(), contents: original_package_json.clone() }; | ||
29 | 27 | ||
30 | let date = run!("date --utc +%Y%m%d")?; | 28 | let date = run!("date --utc +%Y%m%d")?; |
31 | let version_suffix = if nightly { "-nightly" } else { "" }; | 29 | let version_suffix = if nightly { "-nightly" } else { "" }; |
32 | 30 | ||
33 | let mut package_json = original_package_json.replace( | 31 | patch.replace( |
34 | r#""version": "0.2.20200309-nightly""#, | 32 | r#""version": "0.2.20200309-nightly""#, |
35 | &format!(r#""version": "0.1.{}{}""#, date, version_suffix), | 33 | &format!(r#""version": "0.1.{}{}""#, date, version_suffix), |
36 | ); | 34 | ); |
37 | 35 | ||
38 | if nightly { | 36 | if nightly { |
39 | package_json = package_json.replace( | 37 | patch.replace( |
40 | r#""displayName": "rust-analyzer""#, | 38 | r#""displayName": "rust-analyzer""#, |
41 | r#""displayName": "rust-analyzer nightly""#, | 39 | r#""displayName": "rust-analyzer (nightly)""#, |
42 | ); | 40 | ); |
43 | } else { | ||
44 | package_json = package_json.replace(r#""enableProposedApi": true,"#, r#""#); | ||
45 | } | 41 | } |
46 | fs2::write(package_json_path, package_json)?; | 42 | if !nightly { |
43 | patch.replace(r#""enableProposedApi": true,"#, r#""#); | ||
44 | } | ||
45 | patch.commit()?; | ||
47 | 46 | ||
48 | run!("npm ci")?; | 47 | run!("npm ci")?; |
49 | run!("npx vsce package -o ../../dist/rust-analyzer.vsix")?; | 48 | run!("npx vsce package -o ../../dist/rust-analyzer.vsix")?; |
@@ -80,13 +79,31 @@ fn dist_server() -> Result<()> { | |||
80 | Ok(()) | 79 | Ok(()) |
81 | } | 80 | } |
82 | 81 | ||
83 | struct Restore { | 82 | struct Patch { |
84 | path: PathBuf, | 83 | path: PathBuf, |
84 | original_contents: String, | ||
85 | contents: String, | 85 | contents: String, |
86 | } | 86 | } |
87 | 87 | ||
88 | impl Drop for Restore { | 88 | impl Patch { |
89 | fn new(path: PathBuf) -> Result<Patch> { | ||
90 | let contents = fs2::read_to_string(&path)?; | ||
91 | Ok(Patch { path, original_contents: contents.clone(), contents }) | ||
92 | } | ||
93 | |||
94 | fn replace(&mut self, from: &str, to: &str) -> &mut Patch { | ||
95 | assert!(self.contents.contains(from)); | ||
96 | self.contents = self.contents.replace(from, to); | ||
97 | self | ||
98 | } | ||
99 | |||
100 | fn commit(&self) -> Result<()> { | ||
101 | fs2::write(&self.path, &self.contents) | ||
102 | } | ||
103 | } | ||
104 | |||
105 | impl Drop for Patch { | ||
89 | fn drop(&mut self) { | 106 | fn drop(&mut self) { |
90 | fs2::write(&self.path, &self.contents).unwrap(); | 107 | fs2::write(&self.path, &self.original_contents).unwrap(); |
91 | } | 108 | } |
92 | } | 109 | } |