Skip to content

Commit 1111405

Browse files
authored
fix: incorrect handling of libdeps install paths (#7)
fixes #6
1 parent e920730 commit 1111405

File tree

15 files changed

+291
-97
lines changed

15 files changed

+291
-97
lines changed

.envrc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,3 @@
11
use flake
2+
3+
export FLAKE_ROOT="$(dirname $1)"

README.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,15 @@ workspace dependencies for deterministic builds within Nix.
1616
# ... in your platformio project dir:
1717
nix shell nixpgks#platformio
1818

19-
# recommended: install all dependencies locally; otherwise `platformio2nix` may pull in unneeded dependencies from the global core_dir.
19+
# recommended: install all dependencies in workspace_dir; otherwise `platformio2nix` may pull in unneeded dependencies from the global core_dir.
2020
export PLATFORMIO_CORE_DIR=.pio
2121

2222
# run the build to download dependencies
2323
make ...
24+
pio run ...
2425

2526
# generate a lockfile
26-
platformio2nix --core-dir .pio >platformio2nix.lock
27+
platformio2nix >platformio2nix.lock
2728
```
2829

2930
## 2. Build your project
@@ -39,6 +40,7 @@ platformio2nix --core-dir .pio >platformio2nix.lock
3940
let
4041
setupHook = makePlatformIOSetupHook {
4142
lockfile = ./platformio2nix.lock;
43+
# sometimes you may need to tweak dependencies; see `examples/external-deps`
4244
# overrides = final: prev: { };
4345
};
4446
in

cli/Cargo.lock

Lines changed: 96 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

cli/Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ color-eyre = "0.6.3"
1111
hex = { version = "0.4.3", features = ["serde"] }
1212
homedir = "0.3.3"
1313
http-cache-reqwest = "0.14.0"
14+
log = "0.4.22"
15+
pretty_env_logger = "0.5.0"
1416
reqwest = { version = "0.12.5", features = ["blocking", "json"] }
1517
reqwest-middleware = "0.3.2"
1618
serde = { version = "1.0.203", features = ["derive"] }

cli/src/lockfile.rs

Lines changed: 35 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
use std::collections::BTreeMap;
1+
use std::{collections::BTreeMap, fmt::Display, path::PathBuf};
22

33
use base64::prelude::*;
44
use serde::{Deserialize, Serialize};
55
use url::Url;
66

77
use crate::{
8-
manifest::{ExternalSpec, Manifest, PackageType},
8+
manifest::{ExternalSpec, PackageManifest},
99
registry,
1010
};
1111

@@ -26,9 +26,14 @@ impl Default for Lockfile {
2626
}
2727

2828
impl Lockfile {
29-
pub fn insert(&mut self, dependency: Dependency) {
30-
let Self::V1 { dependencies } = self;
31-
dependencies.insert(dependency.name.clone(), dependency);
29+
pub fn add_dependency(&mut self, dependency: Dependency) {
30+
let Self::V1 { dependencies, .. } = self;
31+
if let Some(old) = dependencies.insert(dependency.name.clone(), dependency) {
32+
let new = &dependencies[&old.name];
33+
if old.manifest != new.manifest {
34+
log::warn!(r#"Found duplicate dependency "{old}", using "{new}"#)
35+
}
36+
}
3237
}
3338
}
3439

@@ -64,28 +69,38 @@ impl NixSystem {
6469
#[derive(Serialize, Deserialize, Clone, Debug)]
6570
pub struct Dependency {
6671
pub name: String,
67-
pub install_path: String,
72+
pub install_path: PathBuf,
6873
pub version: String,
6974
pub manifest: String,
7075
pub systems: BTreeMap<NixSystem, FetchUrl>,
7176
}
7277

7378
impl Dependency {
74-
pub fn from_url(manifest: &Manifest, package_spec: &ExternalSpec, sha256: &[u8]) -> Self {
79+
pub fn from_url(
80+
manifest: &PackageManifest,
81+
install_path: PathBuf,
82+
package_spec: &ExternalSpec,
83+
sha256: &[u8],
84+
) -> Self {
7585
let systems = NixSystem::ALL
7686
.iter()
7787
.map(|nix_system| (*nix_system, FetchUrl::new(package_spec.uri.clone(), sha256)))
7888
.collect();
7989
Self::new(
8090
manifest,
91+
install_path,
8192
package_spec.name.clone(),
8293
manifest.version.clone(),
8394
systems,
8495
)
8596
}
8697

87-
pub fn from_registry(manifest: &Manifest, package_spec: &registry::PackageSpec) -> Self {
88-
let version = &package_spec.version;
98+
pub fn from_registry(
99+
manifest: &PackageManifest,
100+
install_path: PathBuf,
101+
package_spec: registry::PackageSpec,
102+
) -> Self {
103+
let version = package_spec.version;
89104
let systems = NixSystem::ALL
90105
.iter()
91106
.filter_map(|nix_system| {
@@ -95,37 +110,36 @@ impl Dependency {
95110
.collect();
96111
Self::new(
97112
manifest,
98-
package_spec.name.clone(),
113+
install_path,
114+
package_spec.name,
99115
version.name.clone(),
100116
systems,
101117
)
102118
}
103119

104120
fn new(
105-
manifest: &Manifest,
121+
manifest: &PackageManifest,
122+
install_path: PathBuf,
106123
name: String,
107124
version: String,
108125
systems: BTreeMap<NixSystem, FetchUrl>,
109126
) -> Self {
110-
let install_path = format!(
111-
"{}/{}",
112-
match manifest.ty {
113-
PackageType::Platform => "platforms",
114-
PackageType::Package | PackageType::Tool => "packages",
115-
PackageType::Library => "libdeps",
116-
},
117-
name
118-
);
119127
Self {
120128
name,
121129
install_path,
122-
manifest: serde_json::to_string(&manifest).expect("serializable manifest"),
130+
manifest: serde_json::to_string(manifest).expect("serializable manifest"),
123131
version,
124132
systems,
125133
}
126134
}
127135
}
128136

137+
impl Display for Dependency {
138+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
139+
write!(f, "{}@{}", self.name, self.version)
140+
}
141+
}
142+
129143
#[derive(Serialize, Deserialize, Clone, Debug)]
130144
pub struct FetchUrl {
131145
pub url: Url,

0 commit comments

Comments
 (0)