)]}'
{"go/qcow2/qcow2.go":[{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"126c2068576fd1754bc062e057170a1f1a6f5b46","unresolved":true,"context_lines":[{"line_number":20,"context_line":"//  2. Optionally, a backing file name (right after header, within the first"},{"line_number":21,"context_line":"//     cluster);"},{"line_number":22,"context_line":"//  3. A refcount table (made out of two levels, L1 is continuous and pointed to"},{"line_number":23,"context_line":"//     header, L2 is pointed to by L1, both must be cluster-aligned and occupy"},{"line_number":24,"context_line":"//     a multiple of clusters each). The refcount table is indexed by cluster"},{"line_number":25,"context_line":"//     address and returns whether a cluster is free or in use (by metadata or"},{"line_number":26,"context_line":"//     user data);"}],"source_content_type":"text/x-go","patch_set":1,"id":"230c4c2a_b80de480","line":23,"updated":"2024-05-20 09:13:42.000000000","message":"\"pointed to *by* header\"","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"70ff17de7d91205b34b55533a5f0e8c8ab208ece","unresolved":false,"context_lines":[{"line_number":20,"context_line":"//  2. Optionally, a backing file name (right after header, within the first"},{"line_number":21,"context_line":"//     cluster);"},{"line_number":22,"context_line":"//  3. A refcount table (made out of two levels, L1 is continuous and pointed to"},{"line_number":23,"context_line":"//     header, L2 is pointed to by L1, both must be cluster-aligned and occupy"},{"line_number":24,"context_line":"//     a multiple of clusters each). The refcount table is indexed by cluster"},{"line_number":25,"context_line":"//     address and returns whether a cluster is free or in use (by metadata or"},{"line_number":26,"context_line":"//     user data);"}],"source_content_type":"text/x-go","patch_set":1,"id":"50b7db13_881ed005","line":23,"in_reply_to":"230c4c2a_b80de480","updated":"2024-05-21 09:56:58.000000000","message":"Done","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"126c2068576fd1754bc062e057170a1f1a6f5b46","unresolved":true,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"\tmappingL2EntrySize :\u003d uint64(8)"},{"line_number":109,"context_line":"\t// Each L2 table is always one cluster."},{"line_number":110,"context_line":"\tmappingL2EntryCount :\u003d divRoundUp(clusterSize, mappingL2EntrySize)"},{"line_number":111,"context_line":"\t// How much user data each L2 table covers."},{"line_number":112,"context_line":"\tmappingL2Covering :\u003d mappingL2EntryCount * clusterSize"},{"line_number":113,"context_line":"\t// How many L1 entries do we need."}],"source_content_type":"text/x-go","patch_set":1,"id":"3812b931_bff3d1ad","line":110,"updated":"2024-05-20 09:13:42.000000000","message":"This should be regular division, not round up.","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"70ff17de7d91205b34b55533a5f0e8c8ab208ece","unresolved":false,"context_lines":[{"line_number":107,"context_line":""},{"line_number":108,"context_line":"\tmappingL2EntrySize :\u003d uint64(8)"},{"line_number":109,"context_line":"\t// Each L2 table is always one cluster."},{"line_number":110,"context_line":"\tmappingL2EntryCount :\u003d divRoundUp(clusterSize, mappingL2EntrySize)"},{"line_number":111,"context_line":"\t// How much user data each L2 table covers."},{"line_number":112,"context_line":"\tmappingL2Covering :\u003d mappingL2EntryCount * clusterSize"},{"line_number":113,"context_line":"\t// How many L1 entries do we need."}],"source_content_type":"text/x-go","patch_set":1,"id":"cd51863f_44291c14","line":110,"in_reply_to":"3812b931_bff3d1ad","updated":"2024-05-21 09:56:58.000000000","message":"Done","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"126c2068576fd1754bc062e057170a1f1a6f5b46","unresolved":true,"context_lines":[{"line_number":161,"context_line":"// build writes out a qcow2 image (based on the builder\u0027s configuration) to a"},{"line_number":162,"context_line":"// Writer."},{"line_number":163,"context_line":"func (b *builder) build(w io.Writer) error {"},{"line_number":164,"context_line":"\tclusterSize :\u003d uint64(1 \u003c\u003c b.clusterBits)"},{"line_number":165,"context_line":"\t// Minimum supported by QEMU and this codebase."},{"line_number":166,"context_line":"\tif clusterSize \u003c 512 {"},{"line_number":167,"context_line":"\t\treturn fmt.Errorf(\"cluster size too small\")"}],"source_content_type":"text/x-go","patch_set":1,"id":"76ba7113_84fcc64d","line":164,"updated":"2024-05-20 09:13:42.000000000","message":"Why not use `b.clusterSize()` here too?","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"70ff17de7d91205b34b55533a5f0e8c8ab208ece","unresolved":false,"context_lines":[{"line_number":161,"context_line":"// build writes out a qcow2 image (based on the builder\u0027s configuration) to a"},{"line_number":162,"context_line":"// Writer."},{"line_number":163,"context_line":"func (b *builder) build(w io.Writer) error {"},{"line_number":164,"context_line":"\tclusterSize :\u003d uint64(1 \u003c\u003c b.clusterBits)"},{"line_number":165,"context_line":"\t// Minimum supported by QEMU and this codebase."},{"line_number":166,"context_line":"\tif clusterSize \u003c 512 {"},{"line_number":167,"context_line":"\t\treturn fmt.Errorf(\"cluster size too small\")"}],"source_content_type":"text/x-go","patch_set":1,"id":"ec3b010a_e862efb7","line":164,"in_reply_to":"76ba7113_84fcc64d","updated":"2024-05-21 09:56:58.000000000","message":"Done","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"126c2068576fd1754bc062e057170a1f1a6f5b46","unresolved":true,"context_lines":[{"line_number":200,"context_line":"\tmaximumL1Covering :\u003d refcountL1Clusters * refcountL1.bytesCoveredByCluster"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"\t// The size of our metadata in bytes."},{"line_number":203,"context_line":"\tsizeMetadata :\u003d (mappingL1Clusters + refcountL1Clusters + refcountL2Clusters + mappingL1Clusters) * clusterSize"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"\t// Keep adding L1/L2 metadata clusters until we can cover all of our own"},{"line_number":206,"context_line":"\t// metadata. This is an iterative approach to the aforementioned problem. Even"}],"source_content_type":"text/x-go","patch_set":1,"id":"dabfd594_6ec80845","line":203,"range":{"start_line":203,"start_character":18,"end_line":203,"end_character":35},"updated":"2024-05-20 09:13:42.000000000","message":"Why is `mappingL1Clusters` counted twice?","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"70ff17de7d91205b34b55533a5f0e8c8ab208ece","unresolved":false,"context_lines":[{"line_number":200,"context_line":"\tmaximumL1Covering :\u003d refcountL1Clusters * refcountL1.bytesCoveredByCluster"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"\t// The size of our metadata in bytes."},{"line_number":203,"context_line":"\tsizeMetadata :\u003d (mappingL1Clusters + refcountL1Clusters + refcountL2Clusters + mappingL1Clusters) * clusterSize"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"\t// Keep adding L1/L2 metadata clusters until we can cover all of our own"},{"line_number":206,"context_line":"\t// metadata. This is an iterative approach to the aforementioned problem. Even"}],"source_content_type":"text/x-go","patch_set":1,"id":"8d16420a_85ca6976","line":203,"range":{"start_line":203,"start_character":18,"end_line":203,"end_character":35},"in_reply_to":"dabfd594_6ec80845","updated":"2024-05-21 09:56:58.000000000","message":"Bug. Fixed.","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"126c2068576fd1754bc062e057170a1f1a6f5b46","unresolved":true,"context_lines":[{"line_number":315,"context_line":"\t\t\treturn err"},{"line_number":316,"context_line":"\t\t}"},{"line_number":317,"context_line":"\t}"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"\treturn nil"},{"line_number":320,"context_line":"}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-go","patch_set":1,"id":"a95f1cdc_37b4ec9a","line":318,"updated":"2024-05-20 09:13:42.000000000","message":"I would add padding here to align the end of the L1 table to cluster size.","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"70ff17de7d91205b34b55533a5f0e8c8ab208ece","unresolved":true,"context_lines":[{"line_number":315,"context_line":"\t\t\treturn err"},{"line_number":316,"context_line":"\t\t}"},{"line_number":317,"context_line":"\t}"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"\treturn nil"},{"line_number":320,"context_line":"}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-go","patch_set":1,"id":"f4bda11d_b40823be","line":318,"in_reply_to":"a95f1cdc_37b4ec9a","updated":"2024-05-21 09:56:58.000000000","message":"I would so too, but this isn\u0027t how qemu-img does this (not sure why and I\u0027m not sure I can be bothered to figure it out).","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"3c2daa62720a9d811ad35329525b649129172491","unresolved":false,"context_lines":[{"line_number":315,"context_line":"\t\t\treturn err"},{"line_number":316,"context_line":"\t\t}"},{"line_number":317,"context_line":"\t}"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"\treturn nil"},{"line_number":320,"context_line":"}"},{"line_number":321,"context_line":""}],"source_content_type":"text/x-go","patch_set":1,"id":"0310eefb_08f3b97e","line":318,"in_reply_to":"f4bda11d_b40823be","updated":"2024-05-21 15:34:32.000000000","message":"Acknowledged","commit_id":"def79a9d4502a25d507f093a284d194cd3728dec"}]}
