Browse Source

Cli: Don't regenerate idl in read_all_programs() (#2332)

Christian Kamm 2 years ago
parent
commit
a97d04ab06
2 changed files with 9 additions and 9 deletions
  1. 2 0
      CHANGELOG.md
  2. 7 9
      cli/src/config.rs

+ 2 - 0
CHANGELOG.md

@@ -16,6 +16,8 @@ The minor version will be incremented upon a breaking change and the patch versi
 
 ### Fixes
 
+- cli: Don't regenerate idl in read_all_programs(). ([#2332](https://github.com/coral-xyz/anchor/pull/2332))
+
 ### Breaking
 
 - lang: Remove `state` and `interface` attributes ([#2285](https://github.com/coral-xyz/anchor/pull/2285)).

+ 7 - 9
cli/src/config.rs

@@ -174,20 +174,18 @@ impl WithPath<Config> {
             .collect())
     }
 
-    // TODO: this should read idl dir instead of parsing source.
     pub fn read_all_programs(&self) -> Result<Vec<Program>> {
         let mut r = vec![];
         for path in self.get_program_list()? {
             let cargo = Manifest::from_path(&path.join("Cargo.toml"))?;
             let lib_name = cargo.lib_name()?;
-            let version = cargo.version();
-            let idl = anchor_syn::idl::file::parse(
-                path.join("src/lib.rs"),
-                version,
-                self.features.seeds,
-                false,
-                false,
-            )?;
+
+            let idl_filepath = format!("target/idl/{}.json", lib_name);
+            let idl = fs::read(idl_filepath)
+                .ok()
+                .map(|bytes| serde_json::from_reader(&*bytes))
+                .transpose()?;
+
             r.push(Program {
                 lib_name,
                 path,