)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"d3a85083db342b132498b3792bdfc357fed42038","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"feat(tvix/nix-compat): add interruptable nar writer"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is a modified version of the sync nar writer which allows the user to perform the I/O for copying blobs themselves. Eventually this can both replace the sync nar writer and be used in the implementation of the async nar writer."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I447c09914fb0c99044e2fa910d4213660dc51c64"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"7f25bf44_f48996c0","line":9,"updated":"2024-09-06 12:32:37.000000000","message":"This is quite a lot of duplication with the sync nar writer, including its comments.\n\nCan you reshape this and make this CL simply extend / change the parts in the existing sync nar writer? This is hard to review otherwise, I don\u0027t know where it differs.","commit_id":"b48944d37c2cfa438f62e6503db90f344a7a75ed"},{"author":{"_account_id":1000106,"name":"yuka","email":"yuka@yuka.dev","username":"yuka"},"change_message_id":"cb0e00c3e158362071369e5b7a4ded6e9a1cae73","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"feat(tvix/nix-compat): add interruptable nar writer"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This is a modified version of the sync nar writer which allows the user to perform the I/O for copying blobs themselves. Eventually this can both replace the sync nar writer and be used in the implementation of the async nar writer."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Change-Id: I447c09914fb0c99044e2fa910d4213660dc51c64"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"9f45b5db_502eeae7","line":9,"in_reply_to":"7f25bf44_f48996c0","updated":"2024-09-06 13:25:00.000000000","message":"Done","commit_id":"b48944d37c2cfa438f62e6503db90f344a7a75ed"}],"tvix/nix-compat/src/nar/writer/sync.rs":[{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"9b3d923692c73db2f52fa034ff11a658757e16eb","unresolved":true,"context_lines":[{"line_number":120,"context_line":"        Ok(())"},{"line_number":121,"context_line":"    }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    /// Make this node a single file but let the user handle the blob writing."},{"line_number":124,"context_line":"    /// The user gets access to the writer plus a struct they must to finish writing the NAR file"},{"line_number":125,"context_line":"    /// structure."},{"line_number":126,"context_line":"    ///"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"9f5b1d8e_1a5f8116","line":123,"updated":"2024-09-06 15:08:36.000000000","message":"file writing, not blob writing. blobs are castore concept/terminology.","commit_id":"ad509da975fc115643e698cf2c89b0ddda5bcee5"},{"author":{"_account_id":1000106,"name":"yuka","email":"yuka@yuka.dev","username":"yuka"},"change_message_id":"097662d49c32560fb39e1f381ac178a2e98b4dec","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        Ok(())"},{"line_number":121,"context_line":"    }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    /// Make this node a single file but let the user handle the blob writing."},{"line_number":124,"context_line":"    /// The user gets access to the writer plus a struct they must to finish writing the NAR file"},{"line_number":125,"context_line":"    /// structure."},{"line_number":126,"context_line":"    ///"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"bcdf1e5e_96febe1a","line":123,"in_reply_to":"9f5b1d8e_1a5f8116","updated":"2024-09-22 11:49:13.000000000","message":"Done","commit_id":"ad509da975fc115643e698cf2c89b0ddda5bcee5"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"9b3d923692c73db2f52fa034ff11a658757e16eb","unresolved":true,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    /// Make this node a single file but let the user handle the blob writing."},{"line_number":124,"context_line":"    /// The user gets access to the writer plus a struct they must to finish writing the NAR file"},{"line_number":125,"context_line":"    /// structure."},{"line_number":126,"context_line":"    ///"},{"line_number":127,"context_line":"    /// It is the caller\u0027s responsibility to invoke [`FileManualWrite::close`],"},{"line_number":128,"context_line":"    /// or invalid archives will be produced silently."}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"defa8fd4_775c8623","line":125,"updated":"2024-09-06 15:08:36.000000000","message":"might make sense to describe they get a \u0026mut of the writer handed out, need to use it to write the full file contents, and then call FileManualWrite::close with that writer.","commit_id":"ad509da975fc115643e698cf2c89b0ddda5bcee5"},{"author":{"_account_id":1000106,"name":"yuka","email":"yuka@yuka.dev","username":"yuka"},"change_message_id":"097662d49c32560fb39e1f381ac178a2e98b4dec","unresolved":false,"context_lines":[{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    /// Make this node a single file but let the user handle the blob writing."},{"line_number":124,"context_line":"    /// The user gets access to the writer plus a struct they must to finish writing the NAR file"},{"line_number":125,"context_line":"    /// structure."},{"line_number":126,"context_line":"    ///"},{"line_number":127,"context_line":"    /// It is the caller\u0027s responsibility to invoke [`FileManualWrite::close`],"},{"line_number":128,"context_line":"    /// or invalid archives will be produced silently."}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"e5fdc206_45a45cef","line":125,"in_reply_to":"defa8fd4_775c8623","updated":"2024-09-22 11:49:13.000000000","message":"I\u0027ve added an example, hope that is sufficient","commit_id":"ad509da975fc115643e698cf2c89b0ddda5bcee5"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"9b3d923692c73db2f52fa034ff11a658757e16eb","unresolved":true,"context_lines":[{"line_number":124,"context_line":"    /// The user gets access to the writer plus a struct they must to finish writing the NAR file"},{"line_number":125,"context_line":"    /// structure."},{"line_number":126,"context_line":"    ///"},{"line_number":127,"context_line":"    /// It is the caller\u0027s responsibility to invoke [`FileManualWrite::close`],"},{"line_number":128,"context_line":"    /// or invalid archives will be produced silently."},{"line_number":129,"context_line":"    pub fn file_manual_write("},{"line_number":130,"context_line":"        mut self,"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"8abc974e_5db13d39","line":127,"updated":"2024-09-06 15:08:36.000000000","message":"... and to write the correct number of bytes to the writer","commit_id":"ad509da975fc115643e698cf2c89b0ddda5bcee5"},{"author":{"_account_id":1000106,"name":"yuka","email":"yuka@yuka.dev","username":"yuka"},"change_message_id":"097662d49c32560fb39e1f381ac178a2e98b4dec","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    /// The user gets access to the writer plus a struct they must to finish writing the NAR file"},{"line_number":125,"context_line":"    /// structure."},{"line_number":126,"context_line":"    ///"},{"line_number":127,"context_line":"    /// It is the caller\u0027s responsibility to invoke [`FileManualWrite::close`],"},{"line_number":128,"context_line":"    /// or invalid archives will be produced silently."},{"line_number":129,"context_line":"    pub fn file_manual_write("},{"line_number":130,"context_line":"        mut self,"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"6af13719_f9545f96","line":127,"in_reply_to":"8abc974e_5db13d39","updated":"2024-09-22 11:49:13.000000000","message":"Done","commit_id":"ad509da975fc115643e698cf2c89b0ddda5bcee5"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"9b3d923692c73db2f52fa034ff11a658757e16eb","unresolved":true,"context_lines":[{"line_number":252,"context_line":"impl FileManualWrite {"},{"line_number":253,"context_line":"    /// Finish writing the file structure to the NAR after having manually written the file contents."},{"line_number":254,"context_line":"    ///"},{"line_number":255,"context_line":"    /// **Important:** This *must* be called after the file contents have been manually written."},{"line_number":256,"context_line":"    /// Otherwise the resulting NAR file will be invalid."},{"line_number":257,"context_line":"    pub fn close\u003cW: Write\u003e(self, writer: \u0026mut W) -\u003e io::Result\u003c()\u003e {"},{"line_number":258,"context_line":"        let mut node \u003d Node { writer };"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"056e840f_6ca36384","line":255,"updated":"2024-09-06 15:08:36.000000000","message":"```suggestion\n    /// **Important:** This *must* be called with the writer returned by file_manual_write after the file contents have been manually and fully written to it.\n```\n\n(modulo line wrap)","commit_id":"ad509da975fc115643e698cf2c89b0ddda5bcee5"},{"author":{"_account_id":1000106,"name":"yuka","email":"yuka@yuka.dev","username":"yuka"},"change_message_id":"097662d49c32560fb39e1f381ac178a2e98b4dec","unresolved":false,"context_lines":[{"line_number":252,"context_line":"impl FileManualWrite {"},{"line_number":253,"context_line":"    /// Finish writing the file structure to the NAR after having manually written the file contents."},{"line_number":254,"context_line":"    ///"},{"line_number":255,"context_line":"    /// **Important:** This *must* be called after the file contents have been manually written."},{"line_number":256,"context_line":"    /// Otherwise the resulting NAR file will be invalid."},{"line_number":257,"context_line":"    pub fn close\u003cW: Write\u003e(self, writer: \u0026mut W) -\u003e io::Result\u003c()\u003e {"},{"line_number":258,"context_line":"        let mut node \u003d Node { writer };"}],"source_content_type":"text/x-rustsrc","patch_set":2,"id":"ce1a1d42_df619233","line":255,"in_reply_to":"056e840f_6ca36384","updated":"2024-09-22 11:49:13.000000000","message":"Done","commit_id":"ad509da975fc115643e698cf2c89b0ddda5bcee5"},{"author":{"_account_id":1000036,"name":"flokli","email":"flokli@flokli.de","username":"flokli"},"change_message_id":"c8cff3f59086bcbcfcb963135b755c41b8936323","unresolved":true,"context_lines":[{"line_number":121,"context_line":"    }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    /// Make this node a single file but let the user handle the writing of the file contents."},{"line_number":124,"context_line":"    /// The user gets access to the writer plus a struct they must to finish writing the NAR file"},{"line_number":125,"context_line":"    /// structure."},{"line_number":126,"context_line":"    ///"},{"line_number":127,"context_line":"    /// It is the caller\u0027s responsibility to invoke [`FileManualWrite::close`],"}],"source_content_type":"text/x-rustsrc","patch_set":4,"id":"864ad95f_cd58b423","line":124,"updated":"2024-09-08 12:16:14.000000000","message":"```suggestion\n    /// The user gets access to a writer to write the file contents to, plus a struct they must invoke a function on to finish writing the NAR file.\n```","commit_id":"a066c01723291b5231724a5628257f9da75a2a5a"},{"author":{"_account_id":1000106,"name":"yuka","email":"yuka@yuka.dev","username":"yuka"},"change_message_id":"097662d49c32560fb39e1f381ac178a2e98b4dec","unresolved":false,"context_lines":[{"line_number":121,"context_line":"    }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    /// Make this node a single file but let the user handle the writing of the file contents."},{"line_number":124,"context_line":"    /// The user gets access to the writer plus a struct they must to finish writing the NAR file"},{"line_number":125,"context_line":"    /// structure."},{"line_number":126,"context_line":"    ///"},{"line_number":127,"context_line":"    /// It is the caller\u0027s responsibility to invoke [`FileManualWrite::close`],"}],"source_content_type":"text/x-rustsrc","patch_set":4,"id":"5297b774_6fa7a9f9","line":124,"in_reply_to":"864ad95f_cd58b423","updated":"2024-09-22 11:49:13.000000000","message":"Done","commit_id":"a066c01723291b5231724a5628257f9da75a2a5a"}]}
