|
1 | 1 | use perseus_cli::errors::*;
|
2 | 2 | use perseus_cli::{
|
3 |
| - build, check_env, delete_artifacts, delete_bad_dir, help, prepare, serve, PERSEUS_VERSION, |
| 3 | + build, check_env, delete_artifacts, delete_bad_dir, eject, has_ejected, help, prepare, serve, |
| 4 | + PERSEUS_VERSION, |
4 | 5 | };
|
5 | 6 | use std::env;
|
6 | 7 | use std::io::Write;
|
@@ -79,25 +80,43 @@ fn core(dir: PathBuf) -> Result<i32> {
|
79 | 80 | // Set up the '.perseus/' directory if needed
|
80 | 81 | prepare(dir.clone())?;
|
81 | 82 | // Delete old build artifacts
|
82 |
| - delete_artifacts(dir.clone())?; |
| 83 | + delete_artifacts(dir.clone(), "static")?; |
83 | 84 | let exit_code = build(dir, &prog_args)?;
|
84 | 85 | Ok(exit_code)
|
85 | 86 | } else if prog_args[0] == "serve" {
|
86 | 87 | // Set up the '.perseus/' directory if needed
|
87 | 88 | prepare(dir.clone())?;
|
88 | 89 | // Delete old build artifacts if `--no-build` wasn't specified
|
89 | 90 | if !prog_args.contains(&"--no-build".to_string()) {
|
90 |
| - delete_artifacts(dir.clone())?; |
| 91 | + delete_artifacts(dir.clone(), "static")?; |
91 | 92 | }
|
92 | 93 | let exit_code = serve(dir, &prog_args)?;
|
93 | 94 | Ok(exit_code)
|
94 | 95 | } else if prog_args[0] == "prep" {
|
| 96 | + // This command is deliberately undocumented, it's only used for testing |
95 | 97 | // Set up the '.perseus/' directory if needed
|
96 | 98 | prepare(dir.clone())?;
|
97 | 99 | Ok(0)
|
| 100 | + } else if prog_args[0] == "eject" { |
| 101 | + // Set up the '.perseus/' directory if needed |
| 102 | + prepare(dir.clone())?; |
| 103 | + eject(dir)?; |
| 104 | + Ok(0) |
98 | 105 | } else if prog_args[0] == "clean" {
|
99 |
| - // Just delete the '.perseus/' directory directly, as we'd do in a corruption |
100 |
| - delete_bad_dir(dir)?; |
| 106 | + if prog_args[1] == "--dist" { |
| 107 | + // The user only wants to remove distribution artifacts |
| 108 | + // We don't delete `render_conf.json` because it's literally impossible for that to be the source of a problem right now |
| 109 | + delete_artifacts(dir.clone(), "static")?; |
| 110 | + delete_artifacts(dir.clone(), "pkg")?; |
| 111 | + } else { |
| 112 | + // This command deletes the `.perseus/` directory completely, which musn't happen if the user has ejected |
| 113 | + if has_ejected(dir.clone()) && prog_args[1] != "--force" { |
| 114 | + bail!(ErrorKind::CleanAfterEjection) |
| 115 | + } |
| 116 | + // Just delete the '.perseus/' directory directly, as we'd do in a corruption |
| 117 | + delete_bad_dir(dir)?; |
| 118 | + } |
| 119 | + |
101 | 120 | Ok(0)
|
102 | 121 | } else {
|
103 | 122 | writeln!(
|
|
0 commit comments