Skip to content

Commit d449259

Browse files
committed
fix: continue when not able to get green cfg, eg when cargo-install.ing
Signed-off-by: Pierre Fenoll <[email protected]>
1 parent 06edfa4 commit d449259

File tree

2 files changed

+48
-36
lines changed

2 files changed

+48
-36
lines changed

cargo-green/src/green.rs

Lines changed: 41 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -123,18 +123,26 @@ impl Green {
123123
// TODO: handle worskpace cfg + merging fields
124124
// TODO: find a way to read cfg on `cargo install <non-local code>` cc https://github.com/rust-lang/cargo/issues/9700#issuecomment-2748617896
125125
pub(crate) fn new_from_env_then_manifest() -> Result<Self> {
126-
let manifest_path =
127-
find_manifest_path().map_err(|e| anyhow!("Can't find package manifest: {e}"))?;
128-
129-
let manifest = Manifest::from_path(&manifest_path)
130-
.map_err(|e| anyhow!("Can't read package manifest {manifest_path}: {e}"))?;
126+
let manifest = if let Some(manifest_path) =
127+
find_manifest_path().map_err(|e| anyhow!("Can't find package manifest: {e}"))?
128+
{
129+
let manifest = Manifest::from_path(&manifest_path)
130+
.map_err(|e| anyhow!("Can't read package manifest {manifest_path}: {e}"))?;
131+
Some(manifest)
132+
} else {
133+
None
134+
};
131135

132136
Self::try_new(manifest).map_err(|e| anyhow!("Failed reading {PKG} configuration: {e}"))
133137
}
134138

135-
fn try_new(manifest: Manifest) -> Result<Self> {
139+
fn try_new(manifest: Option<Manifest>) -> Result<Self> {
136140
let mut green = Self::default();
137-
if let Some(metadata) = manifest.package.and_then(|x| x.metadata) {
141+
if let Some(Manifest {
142+
package: Some(cargo_toml::Package { metadata: Some(metadata), .. }),
143+
..
144+
}) = manifest
145+
{
138146
#[derive(Deserialize, Default)]
139147
struct GreenMetadata {
140148
green: Option<Green>,
@@ -265,7 +273,7 @@ name = "test-package"
265273
"#
266274
))
267275
.unwrap();
268-
let mut green = Green::try_new(manifest).unwrap();
276+
let mut green = Green::try_new(Some(manifest)).unwrap();
269277
assert!(!green.image.base_image.is_empty());
270278
green.image.base_image = ImageUri::default();
271279
assert!(green.image.base_image.is_empty());
@@ -288,7 +296,7 @@ add.apk = [ "libpq-dev", "pkgconf" ]
288296
"#,
289297
)
290298
.unwrap();
291-
let green = Green::try_new(manifest).unwrap();
299+
let green = Green::try_new(Some(manifest)).unwrap();
292300
assert_eq!(green.add.apt, vec!["libpq-dev".to_owned(), "pkg-config".to_owned()]);
293301
assert_eq!(green.add.apt_get, vec!["libpq-dev".to_owned(), "pkg-config".to_owned()]);
294302
assert_eq!(green.add.apk, vec!["libpq-dev".to_owned(), "pkgconf".to_owned()]);
@@ -307,7 +315,7 @@ add.{setting} = [ "" ]
307315
"#
308316
))
309317
.unwrap();
310-
let err = Green::try_new(manifest).err().unwrap().to_string();
318+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
311319
assert!(err.contains("empty"), "In: {err}");
312320
}
313321

@@ -324,7 +332,7 @@ add.{setting} = [ "'a'" ]
324332
"#
325333
))
326334
.unwrap();
327-
let err = Green::try_new(manifest).err().unwrap().to_string();
335+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
328336
assert!(err.contains("quotes"), "In: {err}");
329337
}
330338

@@ -341,7 +349,7 @@ add.{setting} = [ "a b" ]
341349
"#
342350
))
343351
.unwrap();
344-
let err = Green::try_new(manifest).err().unwrap().to_string();
352+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
345353
assert!(err.contains("space"), "In: {err}");
346354
}
347355

@@ -358,7 +366,7 @@ add.{setting} = [ "a", "b", "a" ]
358366
"#
359367
))
360368
.unwrap();
361-
let err = Green::try_new(manifest).err().unwrap().to_string();
369+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
362370
assert!(err.contains("duplicates"), "In: {err}");
363371
}
364372

@@ -376,7 +384,7 @@ set-envs = [ "GIT_AUTH_TOKEN", "TYPENUM_BUILD_CONSTS", "TYPENUM_BUILD_OP" ]
376384
"#,
377385
)
378386
.unwrap();
379-
let green = Green::try_new(manifest).unwrap();
387+
let green = Green::try_new(Some(manifest)).unwrap();
380388
assert_eq!(
381389
green.set_envs,
382390
vec![
@@ -399,7 +407,7 @@ set-envs = [ "" ]
399407
"#,
400408
)
401409
.unwrap();
402-
let err = Green::try_new(manifest).err().unwrap().to_string();
410+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
403411
assert!(err.contains("empty name"), "In: {err}");
404412
}
405413

@@ -415,7 +423,7 @@ set-envs = [ "'a'" ]
415423
"#,
416424
)
417425
.unwrap();
418-
let err = Green::try_new(manifest).err().unwrap().to_string();
426+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
419427
assert!(err.contains("quotes"), "In: {err}");
420428
}
421429

@@ -431,7 +439,7 @@ set-envs = [ "A B" ]
431439
"#,
432440
)
433441
.unwrap();
434-
let err = Green::try_new(manifest).err().unwrap().to_string();
442+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
435443
assert!(err.contains("space"), "In: {err}");
436444
}
437445

@@ -447,7 +455,7 @@ set-envs = [ "CARGOGREEN_LOG" ]
447455
"#,
448456
)
449457
.unwrap();
450-
let err = Green::try_new(manifest).err().unwrap().to_string();
458+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
451459
assert!(err.contains(crate::rustc_wrapper::ENV), "In: {err}");
452460
}
453461

@@ -463,7 +471,7 @@ set-envs = [ "A", "B", "A" ]
463471
"#,
464472
)
465473
.unwrap();
466-
let err = Green::try_new(manifest).err().unwrap().to_string();
474+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
467475
assert!(err.contains("duplicates"), "In: {err}");
468476
}
469477

@@ -481,7 +489,7 @@ base-image = "docker-image://docker.io/library/rust:1"
481489
"#,
482490
)
483491
.unwrap();
484-
let green = Green::try_new(manifest).unwrap();
492+
let green = Green::try_new(Some(manifest)).unwrap();
485493
assert_eq!(
486494
green.image,
487495
BaseImage {
@@ -504,7 +512,7 @@ base-image = "docker.io/library/rust:1"
504512
"#,
505513
)
506514
.unwrap();
507-
let err = Green::try_new(manifest).err().unwrap().to_string();
515+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
508516
assert!(err.contains("scheme"), "In: {err}");
509517
}
510518

@@ -520,7 +528,7 @@ base-image = " docker-image://docker.io/library/rust:1 "
520528
"#,
521529
)
522530
.unwrap();
523-
let err = Green::try_new(manifest).err().unwrap().to_string();
531+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
524532
assert!(err.contains("space"), "In: {err}");
525533
}
526534

@@ -541,7 +549,7 @@ RUN --mount=type=secret,id=aws
541549
"#,
542550
)
543551
.unwrap();
544-
let err = Green::try_new(manifest).err().unwrap().to_string();
552+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
545553
assert!(err.contains("to match"), "In: {err}");
546554
}
547555

@@ -565,7 +573,7 @@ RUN --mount=type=secret,id=aws
565573
"#,
566574
)
567575
.unwrap();
568-
let green = Green::try_new(manifest).unwrap();
576+
let green = Green::try_new(Some(manifest)).unwrap();
569577
assert_eq!(green.image, BaseImage {
570578
base_image: ImageUri::try_new("docker-image://rust:1").unwrap(),
571579
base_image_inline:
@@ -601,7 +609,7 @@ RUN --mount=type=secret,id=aws
601609
"#,
602610
)
603611
.unwrap();
604-
let green = Green::try_new(manifest).unwrap();
612+
let green = Green::try_new(Some(manifest)).unwrap();
605613
assert_eq!(green.image, BaseImage {
606614
base_image: ImageUri::try_new("docker-image://rust:1").unwrap(),
607615
base_image_inline:
@@ -630,7 +638,7 @@ base-image-inline = ""
630638
"#,
631639
)
632640
.unwrap();
633-
let err = Green::try_new(manifest).err().unwrap().to_string();
641+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
634642
assert!(err.contains("empty"), "In: {err}");
635643
}
636644

@@ -649,7 +657,7 @@ RUN exit 42
649657
"#,
650658
)
651659
.unwrap();
652-
let err = Green::try_new(manifest).err().unwrap().to_string();
660+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
653661
assert!(err.contains("provide"), "In: {err}");
654662
assert!(err.contains("stage"), "In: {err}");
655663
assert!(err.contains("'rust-base'"), "In: {err}");
@@ -672,7 +680,7 @@ cache-images = [
672680
"#,
673681
)
674682
.unwrap();
675-
let green = Green::try_new(manifest).unwrap();
683+
let green = Green::try_new(Some(manifest)).unwrap();
676684
assert_eq!(
677685
green.cache_images,
678686
vec![
@@ -698,7 +706,7 @@ cache-images = [
698706
"#,
699707
)
700708
.unwrap();
701-
let err = Green::try_new(manifest).err().unwrap().to_string();
709+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
702710
assert!(err.contains("duplicates"), "In: {err}");
703711
}
704712

@@ -714,7 +722,7 @@ cache-images = ["docker-image://some-registry.com/dir/image 'docker-image://othe
714722
"#,
715723
)
716724
.unwrap();
717-
let err = Green::try_new(manifest).err().unwrap().to_string();
725+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
718726
assert!(err.contains("names"), "In: {err}");
719727
}
720728

@@ -730,7 +738,7 @@ cache-images = ["some-registry.com/dir/image"]
730738
"#,
731739
)
732740
.unwrap();
733-
let err = Green::try_new(manifest).err().unwrap().to_string();
741+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
734742
assert!(err.contains("scheme"), "In: {err}");
735743
}
736744

@@ -746,7 +754,7 @@ cache-images = ["docker-image://image"]
746754
"#,
747755
)
748756
.unwrap();
749-
let err = Green::try_new(manifest).err().unwrap().to_string();
757+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
750758
assert!(err.contains("registry"), "In: {err}");
751759
}
752760

@@ -762,7 +770,7 @@ cache-images = ["docker-image://some-registry.com/dir/image:sometag"]
762770
"#,
763771
)
764772
.unwrap();
765-
let err = Green::try_new(manifest).err().unwrap().to_string();
773+
let err = Green::try_new(Some(manifest)).err().unwrap().to_string();
766774
assert!(err.contains("tag"), "In: {err}");
767775
}
768776

cargo-green/src/lockfile.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,15 @@ pub(crate) async fn find_lockfile() -> Result<Utf8PathBuf> {
3737
Ok(manifest_path.with_extension("lock"))
3838
}
3939

40-
pub(crate) fn find_manifest_path() -> Result<Utf8PathBuf> {
40+
pub(crate) fn find_manifest_path() -> Result<Option<Utf8PathBuf>> {
4141
if let Some(manifest_path) = find_toml_from_env()? {
42-
return Ok(manifest_path);
42+
return Ok(Some(manifest_path));
4343
}
44-
Ok(pwd().join("Cargo.toml"))
44+
let manifest_path = pwd().join("Cargo.toml"); // TODO: ?
45+
if manifest_path.exists() {
46+
return Ok(Some(manifest_path));
47+
}
48+
Ok(None)
4549
}
4650

4751
fn find_toml_from_env() -> Result<Option<Utf8PathBuf>> {

0 commit comments

Comments
 (0)