aboutsummaryrefslogtreecommitdiff
path: root/xtask/src
diff options
context:
space:
mode:
authorbors[bot] <26634292+bors[bot]@users.noreply.github.com>2020-02-14 18:04:32 +0000
committerGitHub <[email protected]>2020-02-14 18:04:32 +0000
commit53cee86666166c6a7316253317d5d40fc20f30f2 (patch)
tree5e4e50b502de134813b6d247b57f079f9c9fa71a /xtask/src
parent619b0e16513fe73054262463340c109028f0e11e (diff)
parent5acb467894053cb0342eb6ded4d162b4a6912483 (diff)
Merge #3140
3140: Start manual r=matklad a=matklad Co-authored-by: Aleksey Kladov <[email protected]>
Diffstat (limited to 'xtask/src')
-rw-r--r--xtask/src/lib.rs32
-rw-r--r--xtask/src/main.rs3
-rw-r--r--xtask/src/not_bash.rs46
3 files changed, 62 insertions, 19 deletions
diff --git a/xtask/src/lib.rs b/xtask/src/lib.rs
index d2ef2e95b..25b64301c 100644
--- a/xtask/src/lib.rs
+++ b/xtask/src/lib.rs
@@ -9,7 +9,7 @@ mod ast_src;
9 9
10use anyhow::Context; 10use anyhow::Context;
11use std::{ 11use std::{
12 env, fs, 12 env,
13 io::Write, 13 io::Write,
14 path::{Path, PathBuf}, 14 path::{Path, PathBuf},
15 process::{Command, Stdio}, 15 process::{Command, Stdio},
@@ -17,7 +17,7 @@ use std::{
17 17
18use crate::{ 18use crate::{
19 codegen::Mode, 19 codegen::Mode,
20 not_bash::{pushd, run}, 20 not_bash::{fs2, pushd, rm_rf, run},
21}; 21};
22 22
23pub use anyhow::Result; 23pub use anyhow::Result;
@@ -139,7 +139,7 @@ pub fn run_pre_cache() -> Result<()> {
139 } 139 }
140 } 140 }
141 141
142 fs::remove_file("./target/.rustc_info.json")?; 142 fs2::remove_file("./target/.rustc_info.json")?;
143 let to_delete = ["ra_", "heavy_test"]; 143 let to_delete = ["ra_", "heavy_test"];
144 for &dir in ["./target/debug/deps", "target/debug/.fingerprint"].iter() { 144 for &dir in ["./target/debug/deps", "target/debug/.fingerprint"].iter() {
145 for entry in Path::new(dir).read_dir()? { 145 for entry in Path::new(dir).read_dir()? {
@@ -153,22 +153,20 @@ pub fn run_pre_cache() -> Result<()> {
153 Ok(()) 153 Ok(())
154} 154}
155 155
156fn rm_rf(path: &Path) -> Result<()> { 156pub fn run_release(dry_run: bool) -> Result<()> {
157 if path.is_file() { fs::remove_file(path) } else { fs::remove_dir_all(path) } 157 if !dry_run {
158 .with_context(|| format!("failed to remove {:?}", path)) 158 run!("git switch release")?;
159} 159 run!("git fetch upstream")?;
160 160 run!("git reset --hard upstream/master")?;
161pub fn run_release() -> Result<()> { 161 run!("git push")?;
162 run!("git switch release")?; 162 }
163 run!("git fetch upstream")?;
164 run!("git reset --hard upstream/master")?;
165 run!("git push")?;
166 163
167 let changelog_dir = project_root().join("../rust-analyzer.github.io/thisweek/_posts"); 164 let website_root = project_root().join("../rust-analyzer.github.io");
165 let changelog_dir = website_root.join("./thisweek/_posts");
168 166
169 let today = run!("date --iso")?; 167 let today = run!("date --iso")?;
170 let commit = run!("git rev-parse HEAD")?; 168 let commit = run!("git rev-parse HEAD")?;
171 let changelog_n = fs::read_dir(changelog_dir.as_path())?.count(); 169 let changelog_n = fs2::read_dir(changelog_dir.as_path())?.count();
172 170
173 let contents = format!( 171 let contents = format!(
174 "\ 172 "\
@@ -191,7 +189,9 @@ Release: release:{}[]
191 ); 189 );
192 190
193 let path = changelog_dir.join(format!("{}-changelog-{}.adoc", today, changelog_n)); 191 let path = changelog_dir.join(format!("{}-changelog-{}.adoc", today, changelog_n));
194 fs::write(&path, &contents)?; 192 fs2::write(&path, &contents)?;
193
194 fs2::copy(project_root().join("./docs/user/readme.adoc"), website_root.join("manual.adoc"))?;
195 195
196 Ok(()) 196 Ok(())
197} 197}
diff --git a/xtask/src/main.rs b/xtask/src/main.rs
index 7ca727bde..a7dffe2cc 100644
--- a/xtask/src/main.rs
+++ b/xtask/src/main.rs
@@ -93,8 +93,9 @@ FLAGS:
93 run_pre_cache() 93 run_pre_cache()
94 } 94 }
95 "release" => { 95 "release" => {
96 let dry_run = args.contains("--dry-run");
96 args.finish()?; 97 args.finish()?;
97 run_release() 98 run_release(dry_run)
98 } 99 }
99 _ => { 100 _ => {
100 eprintln!( 101 eprintln!(
diff --git a/xtask/src/not_bash.rs b/xtask/src/not_bash.rs
index 56d6c6c2d..3e30e7279 100644
--- a/xtask/src/not_bash.rs
+++ b/xtask/src/not_bash.rs
@@ -4,12 +4,45 @@ use std::{
4 env, 4 env,
5 ffi::OsStr, 5 ffi::OsStr,
6 fs, 6 fs,
7 path::PathBuf, 7 path::{Path, PathBuf},
8 process::{Command, Stdio}, 8 process::{Command, Stdio},
9}; 9};
10 10
11use anyhow::{bail, Context, Result}; 11use anyhow::{bail, Context, Result};
12 12
13pub mod fs2 {
14 use std::{fs, path::Path};
15
16 use anyhow::{Context, Result};
17
18 pub fn read_dir<P: AsRef<Path>>(path: P) -> Result<fs::ReadDir> {
19 let path = path.as_ref();
20 fs::read_dir(path).with_context(|| format!("Failed to read {}", path.display()))
21 }
22
23 pub fn write<P: AsRef<Path>, C: AsRef<[u8]>>(path: P, contents: C) -> Result<()> {
24 let path = path.as_ref();
25 fs::write(path, contents).with_context(|| format!("Failed to write {}", path.display()))
26 }
27
28 pub fn copy<P: AsRef<Path>, Q: AsRef<Path>>(from: P, to: Q) -> Result<u64> {
29 let from = from.as_ref();
30 let to = to.as_ref();
31 fs::copy(from, to)
32 .with_context(|| format!("Failed to copy {} to {}", from.display(), to.display()))
33 }
34
35 pub fn remove_file<P: AsRef<Path>>(path: P) -> Result<()> {
36 let path = path.as_ref();
37 fs::remove_file(path).with_context(|| format!("Failed to remove file {}", path.display()))
38 }
39
40 pub fn remove_dir_all<P: AsRef<Path>>(path: P) -> Result<()> {
41 let path = path.as_ref();
42 fs::remove_dir_all(path).with_context(|| format!("Failed to remove dir {}", path.display()))
43 }
44}
45
13macro_rules! _run { 46macro_rules! _run {
14 ($($expr:expr),*) => { 47 ($($expr:expr),*) => {
15 run!($($expr),*; echo = true) 48 run!($($expr),*; echo = true)
@@ -41,6 +74,15 @@ pub fn rm(glob: &str) -> Result<()> {
41 Ok(()) 74 Ok(())
42} 75}
43 76
77pub fn rm_rf(path: impl AsRef<Path>) -> Result<()> {
78 let path = path.as_ref();
79 if path.is_file() {
80 fs2::remove_file(path)
81 } else {
82 fs2::remove_dir_all(path)
83 }
84}
85
44pub fn ls(glob: &str) -> Result<Vec<PathBuf>> { 86pub fn ls(glob: &str) -> Result<Vec<PathBuf>> {
45 let cwd = Env::with(|env| env.cwd()); 87 let cwd = Env::with(|env| env.cwd());
46 let mut res = Vec::new(); 88 let mut res = Vec::new();
@@ -90,7 +132,7 @@ fn run_process_inner(cmd: &str, echo: bool) -> Result<String> {
90 bail!("{}", output.status) 132 bail!("{}", output.status)
91 } 133 }
92 134
93 Ok(stdout) 135 Ok(stdout.trim().to_string())
94} 136}
95 137
96// FIXME: some real shell lexing here 138// FIXME: some real shell lexing here