cli: Move `init` errors up so it fails sooner
This commit is contained in:
parent
f2e74fdad2
commit
befc76e030
|
|
@ -5,3 +5,18 @@ it will fail:
|
||||||
$ rad init
|
$ rad init
|
||||||
✗ Error: a Git repository was not found at the current path
|
✗ Error: a Git repository was not found at the current path
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Ok so let's initialize one.
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git init -q
|
||||||
|
```
|
||||||
|
|
||||||
|
Now we try again.
|
||||||
|
|
||||||
|
``` (fail)
|
||||||
|
$ rad init
|
||||||
|
✗ Error: repository head must point to a commit
|
||||||
|
```
|
||||||
|
|
||||||
|
Looks like we need a commit.
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,13 @@ You can start your node with `rad node start`.
|
||||||
To push changes, run `git push`.
|
To push changes, run `git push`.
|
||||||
```
|
```
|
||||||
|
|
||||||
|
If we try to initialize it again, we get an error:
|
||||||
|
|
||||||
|
``` (fail)
|
||||||
|
$ rad init
|
||||||
|
✗ Error: repository is already initialized with remote rad://z42hL2jL4XNk6K8oHQaSWfMgCL7ji
|
||||||
|
```
|
||||||
|
|
||||||
Projects can be listed with the `ls` command:
|
Projects can be listed with the `ls` command:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
|
||||||
|
|
@ -188,6 +188,18 @@ pub fn init(options: Options, profile: &profile::Profile) -> anyhow::Result<()>
|
||||||
Err(e) => return Err(e.into()),
|
Err(e) => return Err(e.into()),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if let Ok((remote, _)) = git::rad_remote(&repo) {
|
||||||
|
if let Some(remote) = remote.url() {
|
||||||
|
bail!("repository is already initialized with remote {remote}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let head: String = repo
|
||||||
|
.head()
|
||||||
|
.ok()
|
||||||
|
.and_then(|head| head.shorthand().map(|h| h.to_owned()))
|
||||||
|
.ok_or_else(|| anyhow!("repository head must point to a commit"))?;
|
||||||
|
|
||||||
term::headline(format!(
|
term::headline(format!(
|
||||||
"Initializing{}radicle 👾 project in {}",
|
"Initializing{}radicle 👾 project in {}",
|
||||||
if let Some(visibility) = &options.visibility {
|
if let Some(visibility) = &options.visibility {
|
||||||
|
|
@ -206,21 +218,6 @@ pub fn init(options: Options, profile: &profile::Profile) -> anyhow::Result<()>
|
||||||
}
|
}
|
||||||
));
|
));
|
||||||
|
|
||||||
// TODO: Move up.
|
|
||||||
if let Ok((remote, _)) = git::rad_remote(&repo) {
|
|
||||||
if let Some(remote) = remote.url() {
|
|
||||||
bail!("repository is already initialized with remote {remote}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: Move up.
|
|
||||||
let signer = term::signer(profile)?;
|
|
||||||
let head: String = repo
|
|
||||||
.head()
|
|
||||||
.ok()
|
|
||||||
.and_then(|head| head.shorthand().map(|h| h.to_owned()))
|
|
||||||
.ok_or_else(|| anyhow!("error: repository head must point to a commit"))?;
|
|
||||||
|
|
||||||
let name = options.name.unwrap_or_else(|| {
|
let name = options.name.unwrap_or_else(|| {
|
||||||
let default = path.file_name().map(|f| f.to_string_lossy().to_string());
|
let default = path.file_name().map(|f| f.to_string_lossy().to_string());
|
||||||
term::input(
|
term::input(
|
||||||
|
|
@ -258,6 +255,7 @@ pub fn init(options: Options, profile: &profile::Profile) -> anyhow::Result<()>
|
||||||
Visibility::from_str(selected)?
|
Visibility::from_str(selected)?
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let signer = term::signer(profile)?;
|
||||||
let mut node = radicle::Node::new(profile.socket());
|
let mut node = radicle::Node::new(profile.socket());
|
||||||
let mut spinner = term::spinner("Initializing...");
|
let mut spinner = term::spinner("Initializing...");
|
||||||
let mut push_cmd = String::from("git push");
|
let mut push_cmd = String::from("git push");
|
||||||
|
|
@ -333,9 +331,6 @@ pub fn init(options: Options, profile: &profile::Profile) -> anyhow::Result<()>
|
||||||
Err(err) => {
|
Err(err) => {
|
||||||
spinner.failed();
|
spinner.failed();
|
||||||
anyhow::bail!(err);
|
anyhow::bail!(err);
|
||||||
|
|
||||||
// TODO: Handle error: "this repository is already initialized with remote {}"
|
|
||||||
// TODO: Handle error: "the `{}` branch was either not found, or has no commits"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue