cli: better errors for config.rs file in cli (#1603)

This commit is contained in:
Paul 2022-03-16 14:28:58 -04:00 committed by GitHub
parent 3b0006b3ce
commit acb4e7119b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 33 additions and 16 deletions

View File

@ -1,6 +1,6 @@
use anchor_client::Cluster; use anchor_client::Cluster;
use anchor_syn::idl::Idl; use anchor_syn::idl::Idl;
use anyhow::{anyhow, Error, Result}; use anyhow::{anyhow, Context, Error, Result};
use clap::{ArgEnum, Parser}; use clap::{ArgEnum, Parser};
use heck::SnakeCase; use heck::SnakeCase;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
@ -57,9 +57,10 @@ pub struct Manifest(cargo_toml::Manifest);
impl Manifest { impl Manifest {
pub fn from_path(p: impl AsRef<Path>) -> Result<Self> { pub fn from_path(p: impl AsRef<Path>) -> Result<Self> {
cargo_toml::Manifest::from_path(p) cargo_toml::Manifest::from_path(&p)
.map(Manifest) .map(Manifest)
.map_err(Into::into) .map_err(anyhow::Error::from)
.with_context(|| format!("Error reading manifest from path: {}", p.as_ref().display()))
} }
pub fn lib_name(&self) -> Result<String> { pub fn lib_name(&self) -> Result<String> {
@ -101,8 +102,14 @@ impl Manifest {
let mut cwd_opt = Some(start_from.as_path()); let mut cwd_opt = Some(start_from.as_path());
while let Some(cwd) = cwd_opt { while let Some(cwd) = cwd_opt {
for f in fs::read_dir(cwd)? { for f in fs::read_dir(cwd).with_context(|| {
let p = f?.path(); format!("Error reading the directory with path: {}", cwd.display())
})? {
let p = f
.with_context(|| {
format!("Error reading the directory with path: {}", cwd.display())
})?
.path();
if let Some(filename) = p.file_name() { if let Some(filename) = p.file_name() {
if filename.to_str() == Some("Cargo.toml") { if filename.to_str() == Some("Cargo.toml") {
let m = WithPath::new(Manifest::from_path(&p)?, p); let m = WithPath::new(Manifest::from_path(&p)?, p);
@ -341,8 +348,14 @@ impl Config {
let mut cwd_opt = Some(_cwd.as_path()); let mut cwd_opt = Some(_cwd.as_path());
while let Some(cwd) = cwd_opt { while let Some(cwd) = cwd_opt {
for f in fs::read_dir(cwd)? { for f in fs::read_dir(cwd).with_context(|| {
let p = f?.path(); format!("Error reading the directory with path: {}", cwd.display())
})? {
let p = f
.with_context(|| {
format!("Error reading the directory with path: {}", cwd.display())
})?
.path();
if let Some(filename) = p.file_name() { if let Some(filename) = p.file_name() {
if filename.to_str() == Some("Anchor.toml") { if filename.to_str() == Some("Anchor.toml") {
let cfg = Config::from_path(&p)?; let cfg = Config::from_path(&p)?;
@ -358,12 +371,9 @@ impl Config {
} }
fn from_path(p: impl AsRef<Path>) -> Result<Self> { fn from_path(p: impl AsRef<Path>) -> Result<Self> {
let mut cfg_file = File::open(&p)?; fs::read_to_string(&p)
let mut cfg_contents = String::new(); .with_context(|| format!("Error reading the file with path: {}", p.as_ref().display()))?
cfg_file.read_to_string(&mut cfg_contents)?; .parse()
let cfg = cfg_contents.parse()?;
Ok(cfg)
} }
pub fn wallet_kp(&self) -> Result<Keypair> { pub fn wallet_kp(&self) -> Result<Keypair> {
@ -625,15 +635,22 @@ impl Program {
// Lazily initializes the keypair file with a new key if it doesn't exist. // Lazily initializes the keypair file with a new key if it doesn't exist.
pub fn keypair_file(&self) -> Result<WithPath<File>> { pub fn keypair_file(&self) -> Result<WithPath<File>> {
fs::create_dir_all("target/deploy/")?; let deploy_dir_path = "target/deploy/";
fs::create_dir_all(deploy_dir_path)
.with_context(|| format!("Error creating directory with path: {}", deploy_dir_path))?;
let path = std::env::current_dir() let path = std::env::current_dir()
.expect("Must have current dir") .expect("Must have current dir")
.join(format!("target/deploy/{}-keypair.json", self.lib_name)); .join(format!("target/deploy/{}-keypair.json", self.lib_name));
if path.exists() { if path.exists() {
return Ok(WithPath::new(File::open(&path)?, path)); return Ok(WithPath::new(
File::open(&path)
.with_context(|| format!("Error opening file with path: {}", path.display()))?,
path,
));
} }
let program_kp = Keypair::generate(&mut rand::rngs::OsRng); let program_kp = Keypair::generate(&mut rand::rngs::OsRng);
let mut file = File::create(&path)?; let mut file = File::create(&path)
.with_context(|| format!("Error creating file with path: {}", path.display()))?;
file.write_all(format!("{:?}", &program_kp.to_bytes()).as_bytes())?; file.write_all(format!("{:?}", &program_kp.to_bytes()).as_bytes())?;
Ok(WithPath::new(file, path)) Ok(WithPath::new(file, path))
} }