)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"change_message_id":"e13208e47bdc24a30f7111d4cf65342b7e4ea191","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d7196f62_b7ddf578","updated":"2024-08-19 10:27:49.000000000","message":"This leaks a detail into eval which it should *not* know about. From eval\u0027s perspective, paths being realised or not should not matter (as eval can also be used in contexts not related to package building), so realising something is an implicit operation (when accessing files).","commit_id":"bd4a63c128a198e0f1e817f8f67ac0bc76972301"},{"author":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"change_message_id":"4ad0c0e5cb4e341ea8b0b3d59275432def20a58c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"11c6110e_85840d3d","in_reply_to":"1b4c6894_f9e56c69","updated":"2024-08-31 12:59:46.000000000","message":"That doesn\u0027t work because the `outPath` attribute might be a thunk. We can\u0027t force the thunk once the evaluation is done (because forcing the thunk has to be able to do anything an evaluation can do, including performing IO, importing and compiling nix files, etc). We also can\u0027t just turn on strict mode, since the derivation itself has many irrelevant, extremely deep attributes (and I think it might even be self-recursive...).","commit_id":"bd4a63c128a198e0f1e817f8f67ac0bc76972301"},{"author":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"change_message_id":"d109160c09db0299a78b25bd0c41a333be89f70a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"807e0d08_c60ea1b4","in_reply_to":"7a923d47_d21df56a","updated":"2024-08-25 22:49:56.000000000","message":"i took a crack at implementing this via a concrete method on TvixStoreIO, and the simplest possible implementation doesn\u0027t work because derivations are sets, not paths, and the only bit that knows how to coerce sets to paths is eval: https://cl.tvl.fyi/c/depot/+/12349\n\nwould love if you could let me know how you want to implement this","commit_id":"bd4a63c128a198e0f1e817f8f67ac0bc76972301"},{"author":{"_account_id":1000001,"name":"tazjin","email":"tazjin@tvl.su","username":"tazjin"},"change_message_id":"7b6650d9702b5246b5310ef0cb87d111647c0e43","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1b4c6894_f9e56c69","in_reply_to":"807e0d08_c60ea1b4","updated":"2024-08-26 08:05:38.000000000","message":"\u003e would love if you could let me know how you want to implement this\n\nI haven\u0027t tried to do it, so how am I going to tell you exactly how it should work? There\u0027s constraints for how it should *not* be implemented, and we have to figure out which things are in the way of that.\n\nI believe that \"coercing\" the derivations to paths is just accessing the `outPath` attribute (like we do in Tvix tests).","commit_id":"bd4a63c128a198e0f1e817f8f67ac0bc76972301"},{"author":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"change_message_id":"6ab06e6464e0dc5939d1981632a4821bcff1a140","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7a923d47_d21df56a","in_reply_to":"d7196f62_b7ddf578","updated":"2024-08-25 21:44:13.000000000","message":"I\u0027ll gladly +2 your cl to implement the :b command from the repl some other way. I don\u0027t have time to figure out what you want right now","commit_id":"bd4a63c128a198e0f1e817f8f67ac0bc76972301"}],"tvix/eval/src/io.rs":[{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"b0d0afa3adbcf046c39218c68043ba7d6f00f38f","unresolved":true,"context_lines":[{"line_number":67,"context_line":"    /// Open the file at the specified path to a `io::Read`."},{"line_number":68,"context_line":"    fn open(\u0026self, path: \u0026Path) -\u003e io::Result\u003cBox\u003cdyn io::Read\u003e\u003e;"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    /// Ensure the given path is built."},{"line_number":71,"context_line":"    ///"},{"line_number":72,"context_line":"    /// If it is a store path, this fetches or builds it. If it is a regular filesystem path, this"},{"line_number":73,"context_line":"    /// does nothing (including checking if it exists!)."}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"3f8f9f61_c1f11e98","line":70,"updated":"2024-08-11 16:05:00.000000000","message":"This is called \"realize\" in Nix, and can include substitution","commit_id":"d53455c6bb30b9bafcf20738df3cc2a02c0319aa"},{"author":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"change_message_id":"d19265693e39c76243803be1f65944f6424bbf40","unresolved":false,"context_lines":[{"line_number":67,"context_line":"    /// Open the file at the specified path to a `io::Read`."},{"line_number":68,"context_line":"    fn open(\u0026self, path: \u0026Path) -\u003e io::Result\u003cBox\u003cdyn io::Read\u003e\u003e;"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    /// Ensure the given path is built."},{"line_number":71,"context_line":"    ///"},{"line_number":72,"context_line":"    /// If it is a store path, this fetches or builds it. If it is a regular filesystem path, this"},{"line_number":73,"context_line":"    /// does nothing (including checking if it exists!)."}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"df0e5ce5_09e5b011","line":70,"in_reply_to":"3f8f9f61_c1f11e98","updated":"2024-08-18 17:46:46.000000000","message":"Done. I actually almost called it that, but decided against it briefly.","commit_id":"d53455c6bb30b9bafcf20738df3cc2a02c0319aa"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"6a558d8b0583132905b6050e15b8458303f944a4","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    /// Ensure the given path is built."},{"line_number":71,"context_line":"    ///"},{"line_number":72,"context_line":"    /// If it is a store path, this fetches or builds it. If it is a regular filesystem path, this"},{"line_number":73,"context_line":"    /// does nothing (including checking if it exists!)."},{"line_number":74,"context_line":"    fn realize(\u0026self, path: \u0026Path) -\u003e io::Result\u003c()\u003e;"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    /// Return the [FileType] of the given path, or an error if it doesn\u0027t"}],"source_content_type":"text/x-rustsrc","patch_set":4,"id":"9295824f_24949c38","line":73,"updated":"2024-08-18 20:59:49.000000000","message":"`s/including checking if it exists/also not checking if it exists/`\ncould be read conflictingly.\n\nThis also doesn\u0027t match with what our implementation in glue does?\n\n```\n        let (store_path, _sub_path) \u003d StorePath::from_absolute_path_full(\u0026path.to_string_lossy())\n            .map_err(|e| {\n            io::Error::new(\n                io::ErrorKind::InvalidInput,\n                format!(\"Invalid store path: {e}\"),\n            )\n        })?;\n```\n\nThe way I read this, this will fail if fed something that\u0027s not a store path, and that clearly doesn\u0027t align with the docstring.\n\nCan we just abuse file_type for this all instead?","commit_id":"9f682c988723e222d6dd3a0f2adbf817e89c9f4d"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"fc3021553552adc0eec68f24d50d8614484e2fb3","unresolved":true,"context_lines":[{"line_number":70,"context_line":"    /// Ensure the given path is built."},{"line_number":71,"context_line":"    ///"},{"line_number":72,"context_line":"    /// If it is a store path, this fetches or builds it. If it is a regular filesystem path, this"},{"line_number":73,"context_line":"    /// does nothing (including checking if it exists!)."},{"line_number":74,"context_line":"    fn realize(\u0026self, path: \u0026Path) -\u003e io::Result\u003c()\u003e;"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    /// Return the [FileType] of the given path, or an error if it doesn\u0027t"}],"source_content_type":"text/x-rustsrc","patch_set":4,"id":"3a69ddef_d90d852b","line":73,"in_reply_to":"0c5d592a_ce5482c0","updated":"2024-08-19 10:27:28.000000000","message":"We didn\u0027t talk about abusing file_type or not.\n\nI\u0027d feel much more comfortable having cl/12188 use file_type to tickle that store path, rather than introducing a new operation for now.","commit_id":"9f682c988723e222d6dd3a0f2adbf817e89c9f4d"},{"author":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"change_message_id":"5d0bff00379837af5922c85f938cca575b50b570","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    /// Ensure the given path is built."},{"line_number":71,"context_line":"    ///"},{"line_number":72,"context_line":"    /// If it is a store path, this fetches or builds it. If it is a regular filesystem path, this"},{"line_number":73,"context_line":"    /// does nothing (including checking if it exists!)."},{"line_number":74,"context_line":"    fn realize(\u0026self, path: \u0026Path) -\u003e io::Result\u003c()\u003e;"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    /// Return the [FileType] of the given path, or an error if it doesn\u0027t"}],"source_content_type":"text/x-rustsrc","patch_set":4,"id":"0c5d592a_ce5482c0","line":73,"in_reply_to":"9295824f_24949c38","updated":"2024-08-18 21:50:02.000000000","message":"Done","commit_id":"9f682c988723e222d6dd3a0f2adbf817e89c9f4d"}],"tvix/glue/src/tvix_store_io.rs":[{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"b0d0afa3adbcf046c39218c68043ba7d6f00f38f","unresolved":true,"context_lines":[{"line_number":104,"context_line":"        ret(level \u003d Level::TRACE),"},{"line_number":105,"context_line":"        err"},{"line_number":106,"context_line":"    )]"},{"line_number":107,"context_line":"    async fn build_store_path(\u0026self, store_path: \u0026StorePath) -\u003e io::Result\u003cOption\u003cNode\u003e\u003e {"},{"line_number":108,"context_line":"        // Find the root node for the store_path."},{"line_number":109,"context_line":"        // It asks the PathInfoService first, but in case there was a Derivation"},{"line_number":110,"context_line":"        // produced that would build it, fall back to triggering the build."}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"98553b1d_65235ea1","line":107,"updated":"2024-08-11 16:05:00.000000000","message":"`realize_store_path`","commit_id":"d53455c6bb30b9bafcf20738df3cc2a02c0319aa"},{"author":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"change_message_id":"d19265693e39c76243803be1f65944f6424bbf40","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        ret(level \u003d Level::TRACE),"},{"line_number":105,"context_line":"        err"},{"line_number":106,"context_line":"    )]"},{"line_number":107,"context_line":"    async fn build_store_path(\u0026self, store_path: \u0026StorePath) -\u003e io::Result\u003cOption\u003cNode\u003e\u003e {"},{"line_number":108,"context_line":"        // Find the root node for the store_path."},{"line_number":109,"context_line":"        // It asks the PathInfoService first, but in case there was a Derivation"},{"line_number":110,"context_line":"        // produced that would build it, fall back to triggering the build."}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"22c8c181_8cc21802","line":107,"in_reply_to":"98553b1d_65235ea1","updated":"2024-08-18 17:46:46.000000000","message":"Done","commit_id":"d53455c6bb30b9bafcf20738df3cc2a02c0319aa"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"b0d0afa3adbcf046c39218c68043ba7d6f00f38f","unresolved":true,"context_lines":[{"line_number":105,"context_line":"        err"},{"line_number":106,"context_line":"    )]"},{"line_number":107,"context_line":"    async fn build_store_path(\u0026self, store_path: \u0026StorePath) -\u003e io::Result\u003cOption\u003cNode\u003e\u003e {"},{"line_number":108,"context_line":"        // Find the root node for the store_path."},{"line_number":109,"context_line":"        // It asks the PathInfoService first, but in case there was a Derivation"},{"line_number":110,"context_line":"        // produced that would build it, fall back to triggering the build."},{"line_number":111,"context_line":"        // To populate the input nodes, it might recursively trigger builds of"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"eeb64037_4028d5d3","line":108,"updated":"2024-08-11 16:05:00.000000000","message":"Absorb this comment into the docstring?","commit_id":"d53455c6bb30b9bafcf20738df3cc2a02c0319aa"},{"author":{"_account_id":1000010,"name":"aspen","email":"root@gws.fyi","username":"aspen"},"change_message_id":"d19265693e39c76243803be1f65944f6424bbf40","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        err"},{"line_number":106,"context_line":"    )]"},{"line_number":107,"context_line":"    async fn build_store_path(\u0026self, store_path: \u0026StorePath) -\u003e io::Result\u003cOption\u003cNode\u003e\u003e {"},{"line_number":108,"context_line":"        // Find the root node for the store_path."},{"line_number":109,"context_line":"        // It asks the PathInfoService first, but in case there was a Derivation"},{"line_number":110,"context_line":"        // produced that would build it, fall back to triggering the build."},{"line_number":111,"context_line":"        // To populate the input nodes, it might recursively trigger builds of"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"9803d450_0bc19608","line":108,"in_reply_to":"eeb64037_4028d5d3","updated":"2024-08-18 17:46:46.000000000","message":"Done","commit_id":"d53455c6bb30b9bafcf20738df3cc2a02c0319aa"}]}
