)]}'
{"/PATCHSET_LEVEL":[{"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":"5162b84492a1aedc1dec90bbef019d6ee1f9eacc","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"3288fe7e_3bfe45eb","updated":"2021-08-11 11:21:56.000000000","message":"One last thing, otherwise LGTM.","commit_id":"c20fa2ebbd68abcfc8e2c46e7973875857c7fc0e"}],"metropolis/cli/dbg/main.go":[{"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":"b3e0f2149d863b0b2a0c5c7cf9b1a6c3c5970250","unresolved":true,"context_lines":[{"line_number":218,"context_line":"\t\t\tfmt.Fprintf(os.Stderr, \"failed to open image file: %v\\n\", err)"},{"line_number":219,"context_line":"\t\t\tos.Exit(1)"},{"line_number":220,"context_line":"\t\t}"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"\t\tloadStream, err :\u003d debugClient.LoadImage(ctx)"},{"line_number":223,"context_line":"\t\tif err !\u003d nil {"},{"line_number":224,"context_line":"\t\t\tfmt.Fprintf(os.Stderr, \"failed to start loading image: %v\\n\", err)"}],"source_content_type":"text/x-go","patch_set":2,"id":"9b462596_0d0ae23a","line":221,"updated":"2021-07-23 10:12:00.000000000","message":"defer image.Close()","commit_id":"ddfafa316e9852caf25ba1e20db5963095917921"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2375d817d7cc0dea09f1e376ecd59aa83480857b","unresolved":false,"context_lines":[{"line_number":218,"context_line":"\t\t\tfmt.Fprintf(os.Stderr, \"failed to open image file: %v\\n\", err)"},{"line_number":219,"context_line":"\t\t\tos.Exit(1)"},{"line_number":220,"context_line":"\t\t}"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"\t\tloadStream, err :\u003d debugClient.LoadImage(ctx)"},{"line_number":223,"context_line":"\t\tif err !\u003d nil {"},{"line_number":224,"context_line":"\t\t\tfmt.Fprintf(os.Stderr, \"failed to start loading image: %v\\n\", err)"}],"source_content_type":"text/x-go","patch_set":2,"id":"8ed28f32_a9216e2b","line":221,"in_reply_to":"9b462596_0d0ae23a","updated":"2021-08-10 10:59:18.000000000","message":"Done","commit_id":"ddfafa316e9852caf25ba1e20db5963095917921"},{"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":"5162b84492a1aedc1dec90bbef019d6ee1f9eacc","unresolved":true,"context_lines":[{"line_number":228,"context_line":"\t\tbuf :\u003d make([]byte, 64*1024)"},{"line_number":229,"context_line":"\t\tfor {"},{"line_number":230,"context_line":"\t\t\tn, err :\u003d image.Read(buf)"},{"line_number":231,"context_line":"\t\t\tif n \u003d\u003d 0 {"},{"line_number":232,"context_line":"\t\t\t\tbreak"},{"line_number":233,"context_line":"\t\t\t}"},{"line_number":234,"context_line":"\t\t\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":5,"id":"bb1cb380_ac736d36","line":231,"updated":"2021-08-11 11:21:56.000000000","message":"Won\u0027t this silently drop errors if n happens to be 0?\n\nI think the most concise way to handle Read returns is the following:\n\n    if err !\u003d io.EOF \u0026\u0026 err !\u003d nil {\n        fmt.Fprintf(os.Stderr, \"failed to read image: %v\\n\", err)\n        os.Exit(1)\n    }\n    if n \u003d\u003d 0 {\n        break\n    }\n    // Handle data in buf[:n].","commit_id":"c20fa2ebbd68abcfc8e2c46e7973875857c7fc0e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"3ef5d8968887856c139b2afab82cc7b0ac6a72df","unresolved":false,"context_lines":[{"line_number":228,"context_line":"\t\tbuf :\u003d make([]byte, 64*1024)"},{"line_number":229,"context_line":"\t\tfor {"},{"line_number":230,"context_line":"\t\t\tn, err :\u003d image.Read(buf)"},{"line_number":231,"context_line":"\t\t\tif n \u003d\u003d 0 {"},{"line_number":232,"context_line":"\t\t\t\tbreak"},{"line_number":233,"context_line":"\t\t\t}"},{"line_number":234,"context_line":"\t\t\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":5,"id":"a116d693_617a230c","line":231,"in_reply_to":"bb1cb380_ac736d36","updated":"2021-08-11 12:46:29.000000000","message":"Done","commit_id":"c20fa2ebbd68abcfc8e2c46e7973875857c7fc0e"}],"metropolis/proto/api/debug.proto":[{"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":"b3e0f2149d863b0b2a0c5c7cf9b1a6c3c5970250","unresolved":true,"context_lines":[{"line_number":43,"context_line":"    // Trace enables tracing of Metropolis using the Linux ftrace infrastructure."},{"line_number":44,"context_line":"    rpc Trace(TraceRequest) returns (stream TraceEvent);"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    // LoadImage loads an OCI image into the local containerd image store."},{"line_number":47,"context_line":"    rpc LoadImage(stream ImagePart) returns (LoadImageResponse);"},{"line_number":48,"context_line":"}"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"3127801f_a3600e02","line":46,"range":{"start_line":46,"start_character":26,"end_line":46,"end_character":35},"updated":"2021-07-23 10:12:00.000000000","message":"What format is that exactly? (Compressed) tarball?","commit_id":"ddfafa316e9852caf25ba1e20db5963095917921"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2375d817d7cc0dea09f1e376ecd59aa83480857b","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    // Trace enables tracing of Metropolis using the Linux ftrace infrastructure."},{"line_number":44,"context_line":"    rpc Trace(TraceRequest) returns (stream TraceEvent);"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"    // LoadImage loads an OCI image into the local containerd image store."},{"line_number":47,"context_line":"    rpc LoadImage(stream ImagePart) returns (LoadImageResponse);"},{"line_number":48,"context_line":"}"},{"line_number":49,"context_line":""}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"8aa86e5c_416b5e80","line":46,"range":{"start_line":46,"start_character":26,"end_line":46,"end_character":35},"in_reply_to":"3127801f_a3600e02","updated":"2021-08-10 10:59:18.000000000","message":"Done","commit_id":"ddfafa316e9852caf25ba1e20db5963095917921"},{"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":"b3e0f2149d863b0b2a0c5c7cf9b1a6c3c5970250","unresolved":true,"context_lines":[{"line_number":48,"context_line":"}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"message ImagePart {"},{"line_number":51,"context_line":"    bytes data_part \u003d 1;"},{"line_number":52,"context_line":"}"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"message LoadImageResponse {"}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"5f74428c_4b0542e8","line":51,"updated":"2021-07-23 10:12:00.000000000","message":"Needs a comment about expected client behavior somewhere (client seeds image in arbitrarily-sized data_part chunks, then closes the send side, the server then returns an error or success).","commit_id":"ddfafa316e9852caf25ba1e20db5963095917921"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2375d817d7cc0dea09f1e376ecd59aa83480857b","unresolved":false,"context_lines":[{"line_number":48,"context_line":"}"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"message ImagePart {"},{"line_number":51,"context_line":"    bytes data_part \u003d 1;"},{"line_number":52,"context_line":"}"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"message LoadImageResponse {"}],"source_content_type":"text/x-protobuf","patch_set":2,"id":"f6a7462a_4cdc439a","line":51,"in_reply_to":"5f74428c_4b0542e8","updated":"2021-08-10 10:59:18.000000000","message":"Done","commit_id":"ddfafa316e9852caf25ba1e20db5963095917921"}]}
