)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"e2e982a1bf703ebfbaf8e1741f04b4a050fb5921","unresolved":true,"context_lines":[{"line_number":1,"context_line":"Parent:     64f8cb14 (fix(nix_oracle): update thunked_formals_fallback_name_resolution_literal)"},{"line_number":2,"context_line":"Author:     Domen Kožar \u003cdomen@enlambda.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2025-03-18 12:21:17 +0000"},{"line_number":4,"context_line":"Commit:     Domen Kožar \u003cdomen@enlambda.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"6ce460bb_c9aa5505","line":1,"updated":"2025-03-18 14:35:13.000000000","message":"CI fails.","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"1598d464b369718d3869371bc570491008315fc3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"Parent:     64f8cb14 (fix(nix_oracle): update thunked_formals_fallback_name_resolution_literal)"},{"line_number":2,"context_line":"Author:     Domen Kožar \u003cdomen@enlambda.com\u003e"},{"line_number":3,"context_line":"AuthorDate: 2025-03-18 12:21:17 +0000"},{"line_number":4,"context_line":"Commit:     Domen Kožar \u003cdomen@enlambda.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"925ba8f8_1537ac44","line":1,"in_reply_to":"6ce460bb_c9aa5505","updated":"2025-03-18 15:21:13.000000000","message":"Done","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"}],"snix/glue/Cargo.toml":[{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"e2e982a1bf703ebfbaf8e1741f04b4a050fb5921","unresolved":true,"context_lines":[{"line_number":4,"context_line":"edition \u003d \"2021\""},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"[dependencies]"},{"line_number":7,"context_line":"nix-compat \u003d { path \u003d \"../nix-compat\", features \u003d [\"fetchtree\"] }"},{"line_number":8,"context_line":"async-compression \u003d { workspace \u003d true, features \u003d ["},{"line_number":9,"context_line":"    \"tokio\","},{"line_number":10,"context_line":"    \"gzip\","}],"source_content_type":"text/x-toml","patch_set":1,"id":"39cd1997_1185b0bd","line":7,"updated":"2025-03-18 14:35:13.000000000","message":"can you move this back to the old place?","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"d1e28343cd22d1757b66fb9ee849f95d5d588899","unresolved":false,"context_lines":[{"line_number":4,"context_line":"edition \u003d \"2021\""},{"line_number":5,"context_line":""},{"line_number":6,"context_line":"[dependencies]"},{"line_number":7,"context_line":"nix-compat \u003d { path \u003d \"../nix-compat\", features \u003d [\"fetchtree\"] }"},{"line_number":8,"context_line":"async-compression \u003d { workspace \u003d true, features \u003d ["},{"line_number":9,"context_line":"    \"tokio\","},{"line_number":10,"context_line":"    \"gzip\","}],"source_content_type":"text/x-toml","patch_set":1,"id":"cef13a51_98a9e482","line":7,"in_reply_to":"39cd1997_1185b0bd","updated":"2025-03-18 15:21:01.000000000","message":"Done","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"}],"snix/glue/src/builtins/fetchers.rs":[{"author":{"_account_id":1000000,"name":"Ryan Lahfa","email":"ryan@lahfa.xyz","username":"raitobezarius"},"change_message_id":"88f64d02a1e8dfd80e3466e3a229e8ef8f53b063","unresolved":true,"context_lines":[{"line_number":213,"context_line":"        };"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        // For now, just use fetchtree to parse URL schemes we recognize"},{"line_number":216,"context_line":"        let fetch_args \u003d match fetchtree::parse_url(\u0026flake_ref_str) {"},{"line_number":217,"context_line":"            Ok(args) \u003d\u003e args,"},{"line_number":218,"context_line":"            Err(err) \u003d\u003e {"},{"line_number":219,"context_line":"                return Err(ErrorKind::SnixError(Rc::new(err)));"}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"7202e9ac_c63fef76","line":216,"updated":"2025-03-18 15:45:01.000000000","message":"should have a `From\u003cwhatever is the error type of parse_url\u003e` for the errors here so that you can just do `fetch_args \u003d fetchtree::parse_url(\u0026flake_ref_str)?`","commit_id":"2a8d30d97804903935b3dfa32a5c691251715e05"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"90d103537c4d07a5b2fc8a3b843a47a07331c668","unresolved":false,"context_lines":[{"line_number":213,"context_line":"        };"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        // For now, just use fetchtree to parse URL schemes we recognize"},{"line_number":216,"context_line":"        let fetch_args \u003d match fetchtree::parse_url(\u0026flake_ref_str) {"},{"line_number":217,"context_line":"            Ok(args) \u003d\u003e args,"},{"line_number":218,"context_line":"            Err(err) \u003d\u003e {"},{"line_number":219,"context_line":"                return Err(ErrorKind::SnixError(Rc::new(err)));"}],"source_content_type":"text/x-rustsrc","patch_set":3,"id":"f2fe9d85_af3c84c9","line":216,"in_reply_to":"7202e9ac_c63fef76","updated":"2025-03-18 16:03:37.000000000","message":"Done","commit_id":"2a8d30d97804903935b3dfa32a5c691251715e05"},{"author":{"_account_id":1000009,"name":"Vova Kryachko","email":"v.kryachko@gmail.com","username":"vkryachko"},"change_message_id":"70e089a2c880e90740a00b1c8c70ab2c87457d5f","unresolved":true,"context_lines":[{"line_number":204,"context_line":"    ) -\u003e Result\u003cValue, ErrorKind\u003e {"},{"line_number":205,"context_line":"        let flake_ref_str \u003d value.to_str()?.into_bstring().as_bstr().to_string(); // For now, just use fetchtree to parse URL schemes we recognize"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        let fetch_args \u003d match fetchtree::parse_url(\u0026flake_ref_str) {"},{"line_number":208,"context_line":"            Ok(args) \u003d\u003e args,"},{"line_number":209,"context_line":"            Err(err) \u003d\u003e {"},{"line_number":210,"context_line":"                return Err(ErrorKind::SnixError(Rc::new(err)));"}],"source_content_type":"text/x-rustsrc","patch_set":5,"id":"e859241b_6eb82497","line":207,"range":{"start_line":207,"start_character":42,"end_line":207,"end_character":51},"updated":"2025-03-18 16:14:12.000000000","message":"Not sure we can use parse_url as is as fetch tree does not support {dir \u003d \"\";} which is a thing in [parseFlakeRef](https://nix.dev/manual/nix/2.25/language/builtins.html#builtins-parseFlakeRef).\n\nThe weird thing about this `dir` business is that even though parseFlakeRef supports it, you can\u0027t pass the result of it into fetch tree without first removing the dir attr from the output, so the way it is supposed to be used is along the lines of:\n\n```\nlet ref \u003d builtins.parseFlakeRef \"github:NixOS/nixpkgs/23.05?dir\u003dlib\";\nsrc \u003d \"${builtins.fetchTree (builtins.removeAttrs ref [\"dir\"])}${ref.dir or \"\"}\";\n```\n\nIt\u0027s kind of a mess because we can\u0027t make dir be part of the FetchTreeArgs type and instead parse, pop dir and then construct FetchTreeArgs. And have a test for it.","commit_id":"08292dfeea726dd9c10f160de226695c87ba3ff9"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"d62aa936df6e97925b0d3f8c96660d4967043f19","unresolved":false,"context_lines":[{"line_number":204,"context_line":"    ) -\u003e Result\u003cValue, ErrorKind\u003e {"},{"line_number":205,"context_line":"        let flake_ref_str \u003d value.to_str()?.into_bstring().as_bstr().to_string(); // For now, just use fetchtree to parse URL schemes we recognize"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        let fetch_args \u003d match fetchtree::parse_url(\u0026flake_ref_str) {"},{"line_number":208,"context_line":"            Ok(args) \u003d\u003e args,"},{"line_number":209,"context_line":"            Err(err) \u003d\u003e {"},{"line_number":210,"context_line":"                return Err(ErrorKind::SnixError(Rc::new(err)));"}],"source_content_type":"text/x-rustsrc","patch_set":5,"id":"6a17ac66_00724098","line":207,"range":{"start_line":207,"start_character":42,"end_line":207,"end_character":51},"in_reply_to":"080fb7d1_e39f4081","updated":"2025-03-19 10:29:35.000000000","message":"Acknowledged","commit_id":"08292dfeea726dd9c10f160de226695c87ba3ff9"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"bc6d641eb8073bfb2944efb2d3e4153c17c14a55","unresolved":true,"context_lines":[{"line_number":204,"context_line":"    ) -\u003e Result\u003cValue, ErrorKind\u003e {"},{"line_number":205,"context_line":"        let flake_ref_str \u003d value.to_str()?.into_bstring().as_bstr().to_string(); // For now, just use fetchtree to parse URL schemes we recognize"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        let fetch_args \u003d match fetchtree::parse_url(\u0026flake_ref_str) {"},{"line_number":208,"context_line":"            Ok(args) \u003d\u003e args,"},{"line_number":209,"context_line":"            Err(err) \u003d\u003e {"},{"line_number":210,"context_line":"                return Err(ErrorKind::SnixError(Rc::new(err)));"}],"source_content_type":"text/x-rustsrc","patch_set":5,"id":"080fb7d1_e39f4081","line":207,"range":{"start_line":207,"start_character":42,"end_line":207,"end_character":51},"in_reply_to":"e859241b_6eb82497","updated":"2025-03-18 18:01:35.000000000","message":"I\u0027m not entirely sure how that fits into the whole picture, I\u0027d say we handle it once we have builtins.fetchTree, for now builtins.parseFlakeRef is doing the right thing.\n\nI\u0027ve renamed nix_compat::fetchtree to nix_compat::flakeref, as that\u0027s what it is.","commit_id":"08292dfeea726dd9c10f160de226695c87ba3ff9"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"6cdc7f15800afc3aa3ed18aa2be51e75f817f0cc","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    fetchers::{url_basename, Fetch},"},{"line_number":6,"context_line":"    snix_store_io::SnixStoreIO,"},{"line_number":7,"context_line":"};"},{"line_number":8,"context_line":"use bstr::ByteSlice;"},{"line_number":9,"context_line":"use nix_compat::flakeref;"},{"line_number":10,"context_line":"use nix_compat::nixhash;"},{"line_number":11,"context_line":"use snix_eval::builtin_macros::builtins;"}],"source_content_type":"text/x-rustsrc","patch_set":7,"id":"3a905cef_020320d4","line":8,"updated":"2025-03-19 11:27:44.000000000","message":"I\u0027d probably move these to L98, or even inside the builtin function itself. At least the ByteSlice and flakeref parts.","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"e9ddc16e397a652039b8ae2ca2c3002112a8bcef","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    fetchers::{url_basename, Fetch},"},{"line_number":6,"context_line":"    snix_store_io::SnixStoreIO,"},{"line_number":7,"context_line":"};"},{"line_number":8,"context_line":"use bstr::ByteSlice;"},{"line_number":9,"context_line":"use nix_compat::flakeref;"},{"line_number":10,"context_line":"use nix_compat::nixhash;"},{"line_number":11,"context_line":"use snix_eval::builtin_macros::builtins;"}],"source_content_type":"text/x-rustsrc","patch_set":7,"id":"880d1a97_556fecc4","line":8,"in_reply_to":"3a905cef_020320d4","updated":"2025-03-19 12:16:54.000000000","message":"Done","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"6cdc7f15800afc3aa3ed18aa2be51e75f817f0cc","unresolved":true,"context_lines":[{"line_number":196,"context_line":"        Err(ErrorKind::NotImplemented(\"fetchGit\"))"},{"line_number":197,"context_line":"    }"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    #[builtin(\"parseFlakeRef\")]"},{"line_number":200,"context_line":"    async fn builtin_parse_flake_ref("},{"line_number":201,"context_line":"        state: Rc\u003cSnixStoreIO\u003e,"},{"line_number":202,"context_line":"        co: GenCo,"}],"source_content_type":"text/x-rustsrc","patch_set":7,"id":"b7170a3b_e309c108","line":199,"updated":"2025-03-19 11:27:44.000000000","message":"Please add a // FUTUREWORK to gate this on a feature flag in glue as well, and link #64, which is probably why we don\u0027t do it yet.","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"e9ddc16e397a652039b8ae2ca2c3002112a8bcef","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        Err(ErrorKind::NotImplemented(\"fetchGit\"))"},{"line_number":197,"context_line":"    }"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"    #[builtin(\"parseFlakeRef\")]"},{"line_number":200,"context_line":"    async fn builtin_parse_flake_ref("},{"line_number":201,"context_line":"        state: Rc\u003cSnixStoreIO\u003e,"},{"line_number":202,"context_line":"        co: GenCo,"}],"source_content_type":"text/x-rustsrc","patch_set":7,"id":"4aa53566_48b50841","line":199,"in_reply_to":"b7170a3b_e309c108","updated":"2025-03-19 12:16:54.000000000","message":"Done","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"}],"snix/glue/src/tests/snix_tests/eval-okay-parseFlakeRef.nix":[{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"e2e982a1bf703ebfbaf8e1741f04b4a050fb5921","unresolved":true,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"  # Test GitHub URL format"},{"line_number":6,"context_line":"  (builtins.parseFlakeRef \"github:user/project\")"},{"line_number":7,"context_line":"  "},{"line_number":8,"context_line":"  # Test GitHub URL with ref"},{"line_number":9,"context_line":"  (builtins.parseFlakeRef \"github:user/project/branch\")"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-nix","patch_set":1,"id":"c1fe8450_4690c75b","line":7,"updated":"2025-03-18 14:35:13.000000000","message":"stray newlines","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"d1e28343cd22d1757b66fb9ee849f95d5d588899","unresolved":false,"context_lines":[{"line_number":4,"context_line":""},{"line_number":5,"context_line":"  # Test GitHub URL format"},{"line_number":6,"context_line":"  (builtins.parseFlakeRef \"github:user/project\")"},{"line_number":7,"context_line":"  "},{"line_number":8,"context_line":"  # Test GitHub URL with ref"},{"line_number":9,"context_line":"  (builtins.parseFlakeRef \"github:user/project/branch\")"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-nix","patch_set":1,"id":"2e3430f8_546b4f60","line":7,"in_reply_to":"c1fe8450_4690c75b","updated":"2025-03-18 15:21:01.000000000","message":"Done","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"}],"snix/nix-compat/Cargo.toml":[{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"6cdc7f15800afc3aa3ed18aa2be51e75f817f0cc","unresolved":true,"context_lines":[{"line_number":8,"context_line":"async \u003d [\"tokio\"]"},{"line_number":9,"context_line":"# code emitting low-level packets used in the daemon protocol."},{"line_number":10,"context_line":"wire \u003d [\"tokio\", \"pin-project-lite\", \"bytes\"]"},{"line_number":11,"context_line":"flakeref \u003d [\"url\"]"},{"line_number":12,"context_line":"# nix-daemon protocol handling"},{"line_number":13,"context_line":"daemon \u003d [\"tokio\", \"nix-compat-derive\", \"futures\"]"},{"line_number":14,"context_line":"test \u003d []"}],"source_content_type":"text/x-toml","patch_set":7,"id":"958c6b56_048aedd7","line":11,"updated":"2025-03-19 11:27:44.000000000","message":"Please add this to `snix/nix-compat/default.nix` to check the combinations.","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"e9ddc16e397a652039b8ae2ca2c3002112a8bcef","unresolved":false,"context_lines":[{"line_number":8,"context_line":"async \u003d [\"tokio\"]"},{"line_number":9,"context_line":"# code emitting low-level packets used in the daemon protocol."},{"line_number":10,"context_line":"wire \u003d [\"tokio\", \"pin-project-lite\", \"bytes\"]"},{"line_number":11,"context_line":"flakeref \u003d [\"url\"]"},{"line_number":12,"context_line":"# nix-daemon protocol handling"},{"line_number":13,"context_line":"daemon \u003d [\"tokio\", \"nix-compat-derive\", \"futures\"]"},{"line_number":14,"context_line":"test \u003d []"}],"source_content_type":"text/x-toml","patch_set":7,"id":"acf19e6f_92f3a1f5","line":11,"in_reply_to":"958c6b56_048aedd7","updated":"2025-03-19 12:16:54.000000000","message":"Done","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"6cdc7f15800afc3aa3ed18aa2be51e75f817f0cc","unresolved":true,"context_lines":[{"line_number":42,"context_line":"pin-project-lite \u003d { workspace \u003d true, optional \u003d true }"},{"line_number":43,"context_line":"num_enum \u003d \"0.7.3\""},{"line_number":44,"context_line":"url \u003d { workspace \u003d true, optional \u003d true }"},{"line_number":45,"context_line":"pretty_assertions \u003d { workspace \u003d true, features \u003d [\"unstable\"] }"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"[dependencies.nix-compat-derive]"},{"line_number":48,"context_line":"path \u003d \"../nix-compat-derive\""}],"source_content_type":"text/x-toml","patch_set":7,"id":"6caa1ca5_0642587e","line":45,"updated":"2025-03-19 11:27:44.000000000","message":"That\u0027s only a dev dependency.","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"e9ddc16e397a652039b8ae2ca2c3002112a8bcef","unresolved":false,"context_lines":[{"line_number":42,"context_line":"pin-project-lite \u003d { workspace \u003d true, optional \u003d true }"},{"line_number":43,"context_line":"num_enum \u003d \"0.7.3\""},{"line_number":44,"context_line":"url \u003d { workspace \u003d true, optional \u003d true }"},{"line_number":45,"context_line":"pretty_assertions \u003d { workspace \u003d true, features \u003d [\"unstable\"] }"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"[dependencies.nix-compat-derive]"},{"line_number":48,"context_line":"path \u003d \"../nix-compat-derive\""}],"source_content_type":"text/x-toml","patch_set":7,"id":"6c09480e_5636a280","line":45,"in_reply_to":"6caa1ca5_0642587e","updated":"2025-03-19 12:16:54.000000000","message":"Done","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"}],"snix/nix-compat/src/fetchtree/mod.rs":[{"author":{"_account_id":1000000,"name":"Ryan Lahfa","email":"ryan@lahfa.xyz","username":"raitobezarius"},"change_message_id":"6831d28f90c7a11bddbad3cfcdb9a48df53466ab","unresolved":true,"context_lines":[{"line_number":1,"context_line":"use std::{path::PathBuf, str::FromStr};"},{"line_number":2,"context_line":"use url::Url;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#[derive(Debug)]"},{"line_number":5,"context_line":"pub enum FetchTreeArgs {"},{"line_number":6,"context_line":"    File {"},{"line_number":7,"context_line":"        last_modified: Option\u003cu64\u003e,"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"a6ff6820_72649947","line":4,"updated":"2025-03-18 13:53:40.000000000","message":"#[non_exhaustive] because we want our code to survive receiving unexpected enum variants in the future.","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"d1e28343cd22d1757b66fb9ee849f95d5d588899","unresolved":false,"context_lines":[{"line_number":1,"context_line":"use std::{path::PathBuf, str::FromStr};"},{"line_number":2,"context_line":"use url::Url;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#[derive(Debug)]"},{"line_number":5,"context_line":"pub enum FetchTreeArgs {"},{"line_number":6,"context_line":"    File {"},{"line_number":7,"context_line":"        last_modified: Option\u003cu64\u003e,"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"bda85a56_84d38f0f","line":4,"in_reply_to":"8870c593_de2c8aec","updated":"2025-03-18 15:21:01.000000000","message":"If CppNix introduces a new fetcher, the library code should error out with a nice message.","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"e2e982a1bf703ebfbaf8e1741f04b4a050fb5921","unresolved":true,"context_lines":[{"line_number":1,"context_line":"use std::{path::PathBuf, str::FromStr};"},{"line_number":2,"context_line":"use url::Url;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#[derive(Debug)]"},{"line_number":5,"context_line":"pub enum FetchTreeArgs {"},{"line_number":6,"context_line":"    File {"},{"line_number":7,"context_line":"        last_modified: Option\u003cu64\u003e,"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"8870c593_de2c8aec","line":4,"in_reply_to":"a6ff6820_72649947","updated":"2025-03-18 14:35:13.000000000","message":"why? I\u0027d rather require all callsites to be touched if we add more enum kinds here.","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"e2e982a1bf703ebfbaf8e1741f04b4a050fb5921","unresolved":true,"context_lines":[{"line_number":151,"context_line":"        url \u003d Url::parse(\u0026url_str)?;"},{"line_number":152,"context_line":"    }"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    // Extract common query parameters"},{"line_number":155,"context_line":"    let mut query_pairs \u003d std::collections::HashMap::new();"},{"line_number":156,"context_line":"    for (k, v) in url.query_pairs() {"},{"line_number":157,"context_line":"        query_pairs.entry(k).or_insert(v);"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"630f283f_69431af5","line":154,"updated":"2025-03-18 14:35:13.000000000","message":"How does Nix behave if you pass it query parameters not handled here? Does it bail out or ignore them? We currently only peek for the parameters we care about.\n\nIf that\u0027s the behaviour, we should write it down in a comment and probably have a testcase with that.\n\nSame if that\u0027s not the behaviour, and Nix treats it as an error.","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"d1e28343cd22d1757b66fb9ee849f95d5d588899","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        url \u003d Url::parse(\u0026url_str)?;"},{"line_number":152,"context_line":"    }"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    // Extract common query parameters"},{"line_number":155,"context_line":"    let mut query_pairs \u003d std::collections::HashMap::new();"},{"line_number":156,"context_line":"    for (k, v) in url.query_pairs() {"},{"line_number":157,"context_line":"        query_pairs.entry(k).or_insert(v);"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"c244a949_4831194a","line":154,"in_reply_to":"630f283f_69431af5","updated":"2025-03-18 15:21:01.000000000","message":"Done","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"},{"author":{"_account_id":1000000,"name":"Ryan Lahfa","email":"ryan@lahfa.xyz","username":"raitobezarius"},"change_message_id":"6831d28f90c7a11bddbad3cfcdb9a48df53466ab","unresolved":true,"context_lines":[{"line_number":206,"context_line":"                .map(|s| s.split(\u0027,\u0027).map(|s| s.to_string()).collect::\u003cVec\u003c_\u003e\u003e());"},{"line_number":207,"context_line":"            let submodules \u003d query_pairs"},{"line_number":208,"context_line":"                .get(\"submodules\")"},{"line_number":209,"context_line":"                .map(|v| v \u003d\u003d \"1\" || v.to_lowercase() \u003d\u003d \"true\")"},{"line_number":210,"context_line":"                .unwrap_or(false);"},{"line_number":211,"context_line":"            let shallow \u003d query_pairs"},{"line_number":212,"context_line":"                .get(\"shallow\")"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"ad265811_0ff78588","line":209,"updated":"2025-03-18 13:53:40.000000000","message":"sounds like something that could be factored in a helper","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"d1e28343cd22d1757b66fb9ee849f95d5d588899","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                .map(|s| s.split(\u0027,\u0027).map(|s| s.to_string()).collect::\u003cVec\u003c_\u003e\u003e());"},{"line_number":207,"context_line":"            let submodules \u003d query_pairs"},{"line_number":208,"context_line":"                .get(\"submodules\")"},{"line_number":209,"context_line":"                .map(|v| v \u003d\u003d \"1\" || v.to_lowercase() \u003d\u003d \"true\")"},{"line_number":210,"context_line":"                .unwrap_or(false);"},{"line_number":211,"context_line":"            let shallow \u003d query_pairs"},{"line_number":212,"context_line":"                .get(\"shallow\")"}],"source_content_type":"text/x-rustsrc","patch_set":1,"id":"d06fe07e_ab778dfb","line":209,"in_reply_to":"ad265811_0ff78588","updated":"2025-03-18 15:21:01.000000000","message":"Done","commit_id":"9089406994e3c5b3751dc94012a426b7f12b44b4"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"ffb2deeb2ffb8ec393635f63acd34c2ba20c5805","unresolved":true,"context_lines":[{"line_number":423,"context_line":"    }"},{"line_number":424,"context_line":"}"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"fn append_num_param\u003cT: ToString\u003e(url: \u0026mut Url, key: \u0026str, value: \u0026Option\u003cT\u003e) {"},{"line_number":427,"context_line":"    if let Some(val) \u003d value {"},{"line_number":428,"context_line":"        url.query_pairs_mut().append_pair(key, \u0026val.to_string());"},{"line_number":429,"context_line":"    }"}],"source_content_type":"text/x-rustsrc","patch_set":4,"id":"39f03267_e11968d8","line":426,"updated":"2025-03-18 15:54:08.000000000","message":"This is only ever called with u64. Can we remove the \u003cT\u003e?","commit_id":"a575fe0d5a43a423e335355773a92024dee3ca1d"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"7da4f36e47f072f7bbb611b591e2db874a77a840","unresolved":false,"context_lines":[{"line_number":423,"context_line":"    }"},{"line_number":424,"context_line":"}"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"fn append_num_param\u003cT: ToString\u003e(url: \u0026mut Url, key: \u0026str, value: \u0026Option\u003cT\u003e) {"},{"line_number":427,"context_line":"    if let Some(val) \u003d value {"},{"line_number":428,"context_line":"        url.query_pairs_mut().append_pair(key, \u0026val.to_string());"},{"line_number":429,"context_line":"    }"}],"source_content_type":"text/x-rustsrc","patch_set":4,"id":"52763614_2f8a67d4","line":426,"in_reply_to":"39f03267_e11968d8","updated":"2025-03-18 15:59:41.000000000","message":"Done","commit_id":"a575fe0d5a43a423e335355773a92024dee3ca1d"}],"snix/nix-compat/src/flakeref/mod.rs":[{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"90207825d22e997b3e77c76bf774deb9fa04bf06","unresolved":true,"context_lines":[{"line_number":1,"context_line":"use std::{collections::HashMap, path::PathBuf, str::FromStr};"},{"line_number":2,"context_line":"use url::Url;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#[derive(Debug)]"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"76366b63_3ac1998a","line":1,"updated":"2025-03-18 23:07:40.000000000","message":"Can you add a module-level dosctring here describing what a flakeref is, and what code this module does?","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"3dbe7d082c19c43e74069ff288e215fcebf99ce8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"use std::{collections::HashMap, path::PathBuf, str::FromStr};"},{"line_number":2,"context_line":"use url::Url;"},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"#[derive(Debug)]"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"4fe1e97e_667d180d","line":1,"in_reply_to":"76366b63_3ac1998a","updated":"2025-03-19 10:29:16.000000000","message":"Done","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"90207825d22e997b3e77c76bf774deb9fa04bf06","unresolved":true,"context_lines":[{"line_number":87,"context_line":"    UnsupportedType(String),"},{"line_number":88,"context_line":"}"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"// Common parameter structs"},{"line_number":91,"context_line":"#[derive(Debug, Default, Clone)]"},{"line_number":92,"context_line":"struct FileParams {"},{"line_number":93,"context_line":"    nar_hash: Option\u003cString\u003e,"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"5b36b151_d50fea9a","line":90,"updated":"2025-03-18 23:07:40.000000000","message":"```suggestion\n// Common parameter structs. Only used in the helpers, not exported.\n```","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"3dbe7d082c19c43e74069ff288e215fcebf99ce8","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    UnsupportedType(String),"},{"line_number":88,"context_line":"}"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"// Common parameter structs"},{"line_number":91,"context_line":"#[derive(Debug, Default, Clone)]"},{"line_number":92,"context_line":"struct FileParams {"},{"line_number":93,"context_line":"    nar_hash: Option\u003cString\u003e,"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"e987759e_24106e47","line":90,"in_reply_to":"5b36b151_d50fea9a","updated":"2025-03-19 10:29:16.000000000","message":"Done","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"90207825d22e997b3e77c76bf774deb9fa04bf06","unresolved":true,"context_lines":[{"line_number":134,"context_line":"    Tarball,"},{"line_number":135,"context_line":"}"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"// Helper functions for query parameters"},{"line_number":138,"context_line":"fn extract_query_pairs(url: \u0026Url) -\u003e HashMap\u003cString, String\u003e {"},{"line_number":139,"context_line":"    url.query_pairs()"},{"line_number":140,"context_line":"        .map(|(k, v)| (k.to_string(), v.to_string()))"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"6253eb10_ae396604","line":137,"updated":"2025-03-18 23:07:40.000000000","message":"There\u0027s a bunch of helper functions before AND after `parse_url`. Can these helpers be moved after?","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"3dbe7d082c19c43e74069ff288e215fcebf99ce8","unresolved":false,"context_lines":[{"line_number":134,"context_line":"    Tarball,"},{"line_number":135,"context_line":"}"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"// Helper functions for query parameters"},{"line_number":138,"context_line":"fn extract_query_pairs(url: \u0026Url) -\u003e HashMap\u003cString, String\u003e {"},{"line_number":139,"context_line":"    url.query_pairs()"},{"line_number":140,"context_line":"        .map(|(k, v)| (k.to_string(), v.to_string()))"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"6fd9c06e_58849675","line":137,"in_reply_to":"6253eb10_ae396604","updated":"2025-03-19 10:29:16.000000000","message":"Done","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"90207825d22e997b3e77c76bf774deb9fa04bf06","unresolved":true,"context_lines":[{"line_number":141,"context_line":"        .collect()"},{"line_number":142,"context_line":"}"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"fn get_param\u003cT: FromStr\u003e(query_pairs: \u0026HashMap\u003cString, String\u003e, key: \u0026str) -\u003e Option\u003cT\u003e {"},{"line_number":145,"context_line":"    query_pairs.get(key).and_then(|s| s.parse().ok())"},{"line_number":146,"context_line":"}"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"bdb3daad_50d25a33","line":144,"updated":"2025-03-18 23:07:40.000000000","message":"T is only ever a u64. Let\u0027s make this less complicated until we need it to be generic?","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"3dbe7d082c19c43e74069ff288e215fcebf99ce8","unresolved":false,"context_lines":[{"line_number":141,"context_line":"        .collect()"},{"line_number":142,"context_line":"}"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"fn get_param\u003cT: FromStr\u003e(query_pairs: \u0026HashMap\u003cString, String\u003e, key: \u0026str) -\u003e Option\u003cT\u003e {"},{"line_number":145,"context_line":"    query_pairs.get(key).and_then(|s| s.parse().ok())"},{"line_number":146,"context_line":"}"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"6c15254f_6447a49b","line":144,"in_reply_to":"bdb3daad_50d25a33","updated":"2025-03-19 10:29:16.000000000","message":"Done","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"90207825d22e997b3e77c76bf774deb9fa04bf06","unresolved":true,"context_lines":[{"line_number":235,"context_line":"}"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"// Main URL parsing function"},{"line_number":238,"context_line":"pub fn parse_url(url: \u0026str) -\u003e Result\u003cFlakeRef, FlakeRefError\u003e {"},{"line_number":239,"context_line":"    // Parse initial URL"},{"line_number":240,"context_line":"    let mut url \u003d Url::parse(url)?;"},{"line_number":241,"context_line":"    let mut new_protocol \u003d None;"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"ee2c114f_f4f8217b","line":238,"updated":"2025-03-18 23:07:40.000000000","message":"Can this function be moved into a\n\n```\nimpl FromStr for FlakeRef {\n  type Err \u003d FlakeRefError;\n\n  fn from_str(s: \u0026str) -\u003e Result\u003cSelf, Self::Err\u003e {\n    // ...\n  }\n}\n```\n  \n?\n\n\nThis will give us\n\n```rust\nlet v: FlakeRef \u003d \"github:a/b\".parse()?\n```\n\nfor free, due to https://doc.rust-lang.org/std/primitive.str.html#method.parse.","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"3dbe7d082c19c43e74069ff288e215fcebf99ce8","unresolved":false,"context_lines":[{"line_number":235,"context_line":"}"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":"// Main URL parsing function"},{"line_number":238,"context_line":"pub fn parse_url(url: \u0026str) -\u003e Result\u003cFlakeRef, FlakeRefError\u003e {"},{"line_number":239,"context_line":"    // Parse initial URL"},{"line_number":240,"context_line":"    let mut url \u003d Url::parse(url)?;"},{"line_number":241,"context_line":"    let mut new_protocol \u003d None;"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"3891a00f_83f1e766","line":238,"in_reply_to":"ee2c114f_f4f8217b","updated":"2025-03-19 10:29:16.000000000","message":"Done","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"90207825d22e997b3e77c76bf774deb9fa04bf06","unresolved":true,"context_lines":[{"line_number":606,"context_line":"}"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"#[derive(Debug, Default)]"},{"line_number":609,"context_line":"pub struct FlakeRefOutput {"},{"line_number":610,"context_line":"    pub out_path: String,"},{"line_number":611,"context_line":"    pub nar_hash: String,"},{"line_number":612,"context_line":"    pub last_modified: Option\u003ci64\u003e,"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"b82ac732_357c12a6","line":609,"updated":"2025-03-18 23:07:40.000000000","message":"Please move this to the top, to the other public structs.","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"d62aa936df6e97925b0d3f8c96660d4967043f19","unresolved":false,"context_lines":[{"line_number":606,"context_line":"}"},{"line_number":607,"context_line":""},{"line_number":608,"context_line":"#[derive(Debug, Default)]"},{"line_number":609,"context_line":"pub struct FlakeRefOutput {"},{"line_number":610,"context_line":"    pub out_path: String,"},{"line_number":611,"context_line":"    pub nar_hash: String,"},{"line_number":612,"context_line":"    pub last_modified: Option\u003ci64\u003e,"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"72291597_936952e8","line":609,"in_reply_to":"b82ac732_357c12a6","updated":"2025-03-19 10:29:35.000000000","message":"Done","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"90207825d22e997b3e77c76bf774deb9fa04bf06","unresolved":true,"context_lines":[{"line_number":617,"context_line":"    pub submodules: Option\u003cbool\u003e,"},{"line_number":618,"context_line":"}"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"impl From\u003cFlakeRefOutput\u003e for Vec\u003c(String, String)\u003e {"},{"line_number":621,"context_line":"    fn from(fields: FlakeRefOutput) -\u003e Self {"},{"line_number":622,"context_line":"        IntoIterator::into_iter(fields).collect()"},{"line_number":623,"context_line":"    }"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"8f99967b_7c4e718c","line":620,"updated":"2025-03-18 23:07:40.000000000","message":"This is a somewhat surprising `impl`, let\u0027s make it explicit on the callsite, which I assume would call `flake_ref_output.into_kv_tuples()` from the comment below.","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"d62aa936df6e97925b0d3f8c96660d4967043f19","unresolved":false,"context_lines":[{"line_number":617,"context_line":"    pub submodules: Option\u003cbool\u003e,"},{"line_number":618,"context_line":"}"},{"line_number":619,"context_line":""},{"line_number":620,"context_line":"impl From\u003cFlakeRefOutput\u003e for Vec\u003c(String, String)\u003e {"},{"line_number":621,"context_line":"    fn from(fields: FlakeRefOutput) -\u003e Self {"},{"line_number":622,"context_line":"        IntoIterator::into_iter(fields).collect()"},{"line_number":623,"context_line":"    }"}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"95303b3e_71cb3d00","line":620,"in_reply_to":"8f99967b_7c4e718c","updated":"2025-03-19 10:29:35.000000000","message":"Done","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"90207825d22e997b3e77c76bf774deb9fa04bf06","unresolved":true,"context_lines":[{"line_number":623,"context_line":"    }"},{"line_number":624,"context_line":"}"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"impl IntoIterator for FlakeRefOutput {"},{"line_number":627,"context_line":"    type Item \u003d (String, String);"},{"line_number":628,"context_line":"    type IntoIter \u003d std::vec::IntoIter\u003cSelf::Item\u003e;"},{"line_number":629,"context_line":""}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"39a03284_879bd457","line":626,"updated":"2025-03-18 23:07:40.000000000","message":"please don\u0027t define `IntoIterator` for `FlakeRefOutput` here. It becomes publicly exported.\n\nThis is not a collection of some sort that we\u0027d expect to be able to iterate over.\n\nCan you make it a `into_kv_tuples(self) -\u003e Vec\u003c(String, String)\u003e` defined in an `impl IntoIterator` block?","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"d62aa936df6e97925b0d3f8c96660d4967043f19","unresolved":false,"context_lines":[{"line_number":623,"context_line":"    }"},{"line_number":624,"context_line":"}"},{"line_number":625,"context_line":""},{"line_number":626,"context_line":"impl IntoIterator for FlakeRefOutput {"},{"line_number":627,"context_line":"    type Item \u003d (String, String);"},{"line_number":628,"context_line":"    type IntoIter \u003d std::vec::IntoIter\u003cSelf::Item\u003e;"},{"line_number":629,"context_line":""}],"source_content_type":"text/x-rustsrc","patch_set":6,"id":"f30fd07f_34b4828f","line":626,"in_reply_to":"39a03284_879bd457","updated":"2025-03-19 10:29:35.000000000","message":"Done","commit_id":"0ce2939704490d5babf4ad2b49410ca9ce6641eb"},{"author":{"_account_id":1000009,"name":"Vova Kryachko","email":"v.kryachko@gmail.com","username":"vkryachko"},"change_message_id":"810bb28f57ab6cd5e4b975bce51cccdcfc8df1cc","unresolved":true,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        // Update URL protocol if needed"},{"line_number":175,"context_line":"        if let Some(protocol) \u003d new_protocol {"},{"line_number":176,"context_line":"            let mut url_str \u003d url.to_string();"},{"line_number":177,"context_line":"            url_str.replace_range(..url.scheme().len(), \u0026protocol);"},{"line_number":178,"context_line":"            url \u003d Url::parse(\u0026url_str)?;"},{"line_number":179,"context_line":"        }"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        // Extract query parameters"}],"source_content_type":"text/x-rustsrc","patch_set":7,"id":"27230f87_813d1fec","line":178,"range":{"start_line":176,"start_character":12,"end_line":178,"end_character":40},"updated":"2025-03-19 10:42:56.000000000","message":"would something like this work?\n\n\n\n```suggestion\n            url.set_scheme(\u0026protocol);\n```","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"},{"author":{"_account_id":1000004,"name":"Florian Klink","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"6cdc7f15800afc3aa3ed18aa2be51e75f817f0cc","unresolved":true,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        // Update URL protocol if needed"},{"line_number":175,"context_line":"        if let Some(protocol) \u003d new_protocol {"},{"line_number":176,"context_line":"            let mut url_str \u003d url.to_string();"},{"line_number":177,"context_line":"            url_str.replace_range(..url.scheme().len(), \u0026protocol);"},{"line_number":178,"context_line":"            url \u003d Url::parse(\u0026url_str)?;"},{"line_number":179,"context_line":"        }"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        // Extract query parameters"}],"source_content_type":"text/x-rustsrc","patch_set":7,"id":"4717b784_92bc094b","line":178,"range":{"start_line":176,"start_character":12,"end_line":178,"end_character":40},"in_reply_to":"27230f87_813d1fec","updated":"2025-03-19 11:27:44.000000000","message":"This might be for the same reasons as https://git.snix.dev/snix/snix/src/commit/0b717258f0ad3378471d27ee2b3fdae18120d81c/snix/castore/src/blobservice/object_store.rs#L270, but I\u0027m just guessing.\n\nIf it is like this, we should add a comment though.","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"},{"author":{"_account_id":1000010,"name":"Domen Kožar","email":"domen@cachix.org","username":"domenkozar"},"change_message_id":"e9ddc16e397a652039b8ae2ca2c3002112a8bcef","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        // Update URL protocol if needed"},{"line_number":175,"context_line":"        if let Some(protocol) \u003d new_protocol {"},{"line_number":176,"context_line":"            let mut url_str \u003d url.to_string();"},{"line_number":177,"context_line":"            url_str.replace_range(..url.scheme().len(), \u0026protocol);"},{"line_number":178,"context_line":"            url \u003d Url::parse(\u0026url_str)?;"},{"line_number":179,"context_line":"        }"},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"        // Extract query parameters"}],"source_content_type":"text/x-rustsrc","patch_set":7,"id":"d3ce2ff8_4b8b8d87","line":178,"range":{"start_line":176,"start_character":12,"end_line":178,"end_character":40},"in_reply_to":"4717b784_92bc094b","updated":"2025-03-19 12:16:54.000000000","message":"Done","commit_id":"c4b187896a8396a5e26500436c8896a118e18aba"}]}
