)]}'
{"/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":"79f4c6cf1c28cfc0da953b8d08570df2053dce91","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"a7d31ea3_e50abdd4","updated":"2023-06-14 21:28:28.000000000","message":"Please split up this function already into smaller bits, as it\u0027s impossible to follow (and test!) as is.","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"}],"metropolis/node/core/localstorage/crypt/blockdev.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":"79f4c6cf1c28cfc0da953b8d08570df2053dce91","unresolved":true,"context_lines":[{"line_number":61,"context_line":"\t\t\treturn fmt.Errorf(\"failed to read uevent for block device %v: %w\", blockdevName.Name(), err)"},{"line_number":62,"context_line":"\t\t}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"\t\t// in the outer loop we only care about disks, skip all other dev types"},{"line_number":65,"context_line":"\t\tif ueventData[\"DEVTYPE\"] !\u003d \"disk\" {"},{"line_number":66,"context_line":"\t\t\tcontinue"},{"line_number":67,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":2,"id":"28f2e717_08f5bbef","line":64,"range":{"start_line":64,"start_character":5,"end_line":64,"end_character":7},"updated":"2023-06-14 21:28:28.000000000","message":"Nit: comments are a full sentence that start with a capital letter and end with a period.\n\n(also elsewhere)","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"365a4bd343a8c24e3977998cc0edd033d5a04ef2","unresolved":false,"context_lines":[{"line_number":61,"context_line":"\t\t\treturn fmt.Errorf(\"failed to read uevent for block device %v: %w\", blockdevName.Name(), err)"},{"line_number":62,"context_line":"\t\t}"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"\t\t// in the outer loop we only care about disks, skip all other dev types"},{"line_number":65,"context_line":"\t\tif ueventData[\"DEVTYPE\"] !\u003d \"disk\" {"},{"line_number":66,"context_line":"\t\t\tcontinue"},{"line_number":67,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":2,"id":"a9d50a96_874dda5c","line":64,"range":{"start_line":64,"start_character":5,"end_line":64,"end_character":7},"in_reply_to":"28f2e717_08f5bbef","updated":"2023-06-19 15:27:55.000000000","message":"Ack","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"},{"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":"79f4c6cf1c28cfc0da953b8d08570df2053dce91","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"\t\tmajorDev, err :\u003d strconv.Atoi(ueventData[\"MAJOR\"])"},{"line_number":70,"context_line":"\t\tif err !\u003d nil {"},{"line_number":71,"context_line":"\t\t\treturn fmt.Errorf(\"failed to convert uevent for block device %v: invalid MAJOR: %w\", blockdevName.Name(), err)"},{"line_number":72,"context_line":"\t\t}"},{"line_number":73,"context_line":"\t\tdevNodeName :\u003d fmt.Sprintf(\"/dev/%v\", ueventData[\"DEVNAME\"])"},{"line_number":74,"context_line":"\t\t// TODO(lorenz): This extraction code is all a bit hairy, will get"}],"source_content_type":"text/x-go","patch_set":2,"id":"8b4737cb_25d11f83","line":71,"range":{"start_line":71,"start_character":3,"end_line":71,"end_character":113},"updated":"2023-06-14 21:28:28.000000000","message":"This probably shouldn\u0027t fail the entire loop..?","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"365a4bd343a8c24e3977998cc0edd033d5a04ef2","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"\t\tmajorDev, err :\u003d strconv.Atoi(ueventData[\"MAJOR\"])"},{"line_number":70,"context_line":"\t\tif err !\u003d nil {"},{"line_number":71,"context_line":"\t\t\treturn fmt.Errorf(\"failed to convert uevent for block device %v: invalid MAJOR: %w\", blockdevName.Name(), err)"},{"line_number":72,"context_line":"\t\t}"},{"line_number":73,"context_line":"\t\tdevNodeName :\u003d fmt.Sprintf(\"/dev/%v\", ueventData[\"DEVNAME\"])"},{"line_number":74,"context_line":"\t\t// TODO(lorenz): This extraction code is all a bit hairy, will get"}],"source_content_type":"text/x-go","patch_set":2,"id":"d7afc8f2_afe2b8a7","line":71,"range":{"start_line":71,"start_character":3,"end_line":71,"end_character":113},"in_reply_to":"8b4737cb_25d11f83","updated":"2023-06-19 15:27:55.000000000","message":"Ack","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"},{"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":"79f4c6cf1c28cfc0da953b8d08570df2053dce91","unresolved":true,"context_lines":[{"line_number":70,"context_line":"\t\tif err !\u003d nil {"},{"line_number":71,"context_line":"\t\t\treturn fmt.Errorf(\"failed to convert uevent for block device %v: invalid MAJOR: %w\", blockdevName.Name(), err)"},{"line_number":72,"context_line":"\t\t}"},{"line_number":73,"context_line":"\t\tdevNodeName :\u003d fmt.Sprintf(\"/dev/%v\", ueventData[\"DEVNAME\"])"},{"line_number":74,"context_line":"\t\t// TODO(lorenz): This extraction code is all a bit hairy, will get"},{"line_number":75,"context_line":"\t\t// replaced by blockdev shortly."},{"line_number":76,"context_line":"\t\tblkdev, err :\u003d os.Open(devNodeName)"}],"source_content_type":"text/x-go","patch_set":2,"id":"2e08b1e3_e8975e1d","line":73,"range":{"start_line":73,"start_character":35,"end_line":73,"end_character":37},"updated":"2023-06-14 21:28:28.000000000","message":"Use exlicitly typed string format specs, ie. an %s.","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"365a4bd343a8c24e3977998cc0edd033d5a04ef2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"\t\tif err !\u003d nil {"},{"line_number":71,"context_line":"\t\t\treturn fmt.Errorf(\"failed to convert uevent for block device %v: invalid MAJOR: %w\", blockdevName.Name(), err)"},{"line_number":72,"context_line":"\t\t}"},{"line_number":73,"context_line":"\t\tdevNodeName :\u003d fmt.Sprintf(\"/dev/%v\", ueventData[\"DEVNAME\"])"},{"line_number":74,"context_line":"\t\t// TODO(lorenz): This extraction code is all a bit hairy, will get"},{"line_number":75,"context_line":"\t\t// replaced by blockdev shortly."},{"line_number":76,"context_line":"\t\tblkdev, err :\u003d os.Open(devNodeName)"}],"source_content_type":"text/x-go","patch_set":2,"id":"14398b75_7617875f","line":73,"range":{"start_line":73,"start_character":35,"end_line":73,"end_character":37},"in_reply_to":"2e08b1e3_e8975e1d","updated":"2023-06-19 15:27:55.000000000","message":"Ack","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"},{"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":"79f4c6cf1c28cfc0da953b8d08570df2053dce91","unresolved":true,"context_lines":[{"line_number":85,"context_line":"\t\tvar sizeBytes uint64"},{"line_number":86,"context_line":"\t\t_, _, err \u003d unix.Syscall(unix.SYS_IOCTL, blkdev.Fd(), unix.BLKGETSIZE64, uintptr(unsafe.Pointer(\u0026sizeBytes)))"},{"line_number":87,"context_line":"\t\tif err !\u003d unix.Errno(0) {"},{"line_number":88,"context_line":"\t\t\treturn fmt.Errorf(\"failed to get device size: %w\", err)"},{"line_number":89,"context_line":"\t\t}"},{"line_number":90,"context_line":"\t\tblkdev.Seek(int64(blockSize), 0)"},{"line_number":91,"context_line":"\t\ttable, err :\u003d gpt.Read(blkdev, int64(blockSize), int64(sizeBytes)/int64(blockSize))"}],"source_content_type":"text/x-go","patch_set":2,"id":"b631492c_31154ab7","line":88,"range":{"start_line":88,"start_character":3,"end_line":88,"end_character":58},"updated":"2023-06-14 21:28:28.000000000","message":"This likely shouldn\u0027t fail the entire loop.\n\nFactoring this logic out will make it easier to handle any error returned by a single log line which explicitly states the devname which failed analysis.","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"78ce1c1f318c5615a875d09d4b36d1b1977cda68","unresolved":true,"context_lines":[{"line_number":85,"context_line":"\t\tvar sizeBytes uint64"},{"line_number":86,"context_line":"\t\t_, _, err \u003d unix.Syscall(unix.SYS_IOCTL, blkdev.Fd(), unix.BLKGETSIZE64, uintptr(unsafe.Pointer(\u0026sizeBytes)))"},{"line_number":87,"context_line":"\t\tif err !\u003d unix.Errno(0) {"},{"line_number":88,"context_line":"\t\t\treturn fmt.Errorf(\"failed to get device size: %w\", err)"},{"line_number":89,"context_line":"\t\t}"},{"line_number":90,"context_line":"\t\tblkdev.Seek(int64(blockSize), 0)"},{"line_number":91,"context_line":"\t\ttable, err :\u003d gpt.Read(blkdev, int64(blockSize), int64(sizeBytes)/int64(blockSize))"}],"source_content_type":"text/x-go","patch_set":2,"id":"efc75fa5_16efa9d5","line":88,"range":{"start_line":88,"start_character":3,"end_line":88,"end_character":58},"in_reply_to":"b631492c_31154ab7","updated":"2023-06-15 13:09:36.000000000","message":"This was originally written by you :P \n\nhttps://images.complex.com/complex/images/c_fill,dpr_auto,f_auto,q_auto,w_1400/fl_lossy,pg_1/bdnkabiqxpxmxzmcaluz/spider-man-meme?fimg-ssr","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"365a4bd343a8c24e3977998cc0edd033d5a04ef2","unresolved":false,"context_lines":[{"line_number":85,"context_line":"\t\tvar sizeBytes uint64"},{"line_number":86,"context_line":"\t\t_, _, err \u003d unix.Syscall(unix.SYS_IOCTL, blkdev.Fd(), unix.BLKGETSIZE64, uintptr(unsafe.Pointer(\u0026sizeBytes)))"},{"line_number":87,"context_line":"\t\tif err !\u003d unix.Errno(0) {"},{"line_number":88,"context_line":"\t\t\treturn fmt.Errorf(\"failed to get device size: %w\", err)"},{"line_number":89,"context_line":"\t\t}"},{"line_number":90,"context_line":"\t\tblkdev.Seek(int64(blockSize), 0)"},{"line_number":91,"context_line":"\t\ttable, err :\u003d gpt.Read(blkdev, int64(blockSize), int64(sizeBytes)/int64(blockSize))"}],"source_content_type":"text/x-go","patch_set":2,"id":"aa6045b9_072f0d22","line":88,"range":{"start_line":88,"start_character":3,"end_line":88,"end_character":58},"in_reply_to":"c4b25b94_3a62b137","updated":"2023-06-19 15:27:55.000000000","message":"Ack","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"},{"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":"32790c59c503d3157edb58df13387ca19d90137e","unresolved":true,"context_lines":[{"line_number":85,"context_line":"\t\tvar sizeBytes uint64"},{"line_number":86,"context_line":"\t\t_, _, err \u003d unix.Syscall(unix.SYS_IOCTL, blkdev.Fd(), unix.BLKGETSIZE64, uintptr(unsafe.Pointer(\u0026sizeBytes)))"},{"line_number":87,"context_line":"\t\tif err !\u003d unix.Errno(0) {"},{"line_number":88,"context_line":"\t\t\treturn fmt.Errorf(\"failed to get device size: %w\", err)"},{"line_number":89,"context_line":"\t\t}"},{"line_number":90,"context_line":"\t\tblkdev.Seek(int64(blockSize), 0)"},{"line_number":91,"context_line":"\t\ttable, err :\u003d gpt.Read(blkdev, int64(blockSize), int64(sizeBytes)/int64(blockSize))"}],"source_content_type":"text/x-go","patch_set":2,"id":"c4b25b94_3a62b137","line":88,"range":{"start_line":88,"start_character":3,"end_line":88,"end_character":58},"in_reply_to":"efc75fa5_16efa9d5","updated":"2023-06-15 14:28:16.000000000","message":"That\u0027s why we do code reviews, because I definitely don\u0027t trust myself either :)","commit_id":"d4d7b560c41fb65763588c74dfd1058744e91240"},{"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":"b303bd7d11a84fb8d1a79a9991f1e36914a0fedd","unresolved":true,"context_lines":[{"line_number":43,"context_line":"\tNodeDataRawPath \u003d \"/dev/data-raw\""},{"line_number":44,"context_line":")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"// nodePathForPartitionType returns the device node path"},{"line_number":47,"context_line":"// for a given partition type"},{"line_number":48,"context_line":"func nodePathForPartitionType(t uuid.UUID) string {"},{"line_number":49,"context_line":"\tswitch t {"},{"line_number":50,"context_line":"\tcase gpt.PartitionTypeEFISystem:"}],"source_content_type":"text/x-go","patch_set":4,"id":"8401d546_caee6eaa","line":47,"range":{"start_line":46,"start_character":0,"end_line":47,"end_character":29},"updated":"2023-06-20 14:36:00.000000000","message":"nit: godoc strings end with a period.","commit_id":"576e754082f3ccc2392ee3be4a6ce2ea11b86394"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d18e751c4c8153a99fbe342c9dc8689c2372486c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"\tNodeDataRawPath \u003d \"/dev/data-raw\""},{"line_number":44,"context_line":")"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"// nodePathForPartitionType returns the device node path"},{"line_number":47,"context_line":"// for a given partition type"},{"line_number":48,"context_line":"func nodePathForPartitionType(t uuid.UUID) string {"},{"line_number":49,"context_line":"\tswitch t {"},{"line_number":50,"context_line":"\tcase gpt.PartitionTypeEFISystem:"}],"source_content_type":"text/x-go","patch_set":4,"id":"df071e54_ea7dc637","line":47,"range":{"start_line":46,"start_character":0,"end_line":47,"end_character":29},"in_reply_to":"8401d546_caee6eaa","updated":"2023-06-20 15:19:58.000000000","message":"Done","commit_id":"576e754082f3ccc2392ee3be4a6ce2ea11b86394"},{"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":"b303bd7d11a84fb8d1a79a9991f1e36914a0fedd","unresolved":true,"context_lines":[{"line_number":174,"context_line":"\tmajor, minor, partNumber int"},{"line_number":175,"context_line":"}"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"// makePartitionNode creates the device node at the given path"},{"line_number":178,"context_line":"func (pi partInfo) makePartitionNode(path string) error {"},{"line_number":179,"context_line":"\terr :\u003d unix.Mknod(path, 0600|unix.S_IFBLK, int(unix.Mkdev(uint32(pi.major), uint32(pi.minor))))"},{"line_number":180,"context_line":"\tif err !\u003d nil \u0026\u0026 !os.IsExist(err) {"}],"source_content_type":"text/x-go","patch_set":4,"id":"fc21c354_19383a53","line":177,"range":{"start_line":177,"start_character":0,"end_line":177,"end_character":62},"updated":"2023-06-20 14:36:00.000000000","message":"nit: godoc strings should end with a period.\n\nAlso please clarify in the comment what device node this actually creates. For the partition? For the block device on which the partition is contained? Because the fact that this doesn\u0027t use \u0027partNumber\u0027 is unexpected at first.","commit_id":"576e754082f3ccc2392ee3be4a6ce2ea11b86394"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d18e751c4c8153a99fbe342c9dc8689c2372486c","unresolved":false,"context_lines":[{"line_number":174,"context_line":"\tmajor, minor, partNumber int"},{"line_number":175,"context_line":"}"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"// makePartitionNode creates the device node at the given path"},{"line_number":178,"context_line":"func (pi partInfo) makePartitionNode(path string) error {"},{"line_number":179,"context_line":"\terr :\u003d unix.Mknod(path, 0600|unix.S_IFBLK, int(unix.Mkdev(uint32(pi.major), uint32(pi.minor))))"},{"line_number":180,"context_line":"\tif err !\u003d nil \u0026\u0026 !os.IsExist(err) {"}],"source_content_type":"text/x-go","patch_set":4,"id":"e296b4ae_50335bf1","line":177,"range":{"start_line":177,"start_character":0,"end_line":177,"end_character":62},"in_reply_to":"fc21c354_19383a53","updated":"2023-06-20 15:19:58.000000000","message":"Done","commit_id":"576e754082f3ccc2392ee3be4a6ce2ea11b86394"},{"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":"b303bd7d11a84fb8d1a79a9991f1e36914a0fedd","unresolved":true,"context_lines":[{"line_number":175,"context_line":"}"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"// makePartitionNode creates the device node at the given path"},{"line_number":178,"context_line":"func (pi partInfo) makePartitionNode(path string) error {"},{"line_number":179,"context_line":"\terr :\u003d unix.Mknod(path, 0600|unix.S_IFBLK, int(unix.Mkdev(uint32(pi.major), uint32(pi.minor))))"},{"line_number":180,"context_line":"\tif err !\u003d nil \u0026\u0026 !os.IsExist(err) {"},{"line_number":181,"context_line":"\t\treturn fmt.Errorf(\"create device node %q: %v\", path, err)"}],"source_content_type":"text/x-go","patch_set":4,"id":"d9741888_772a786a","line":178,"range":{"start_line":178,"start_character":19,"end_line":178,"end_character":36},"updated":"2023-06-20 14:36:00.000000000","message":"Stutter: we already know from the type name that this is partition-related. So call it \u0027makeDeviceNode\u0027 or something.","commit_id":"576e754082f3ccc2392ee3be4a6ce2ea11b86394"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d18e751c4c8153a99fbe342c9dc8689c2372486c","unresolved":false,"context_lines":[{"line_number":175,"context_line":"}"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"// makePartitionNode creates the device node at the given path"},{"line_number":178,"context_line":"func (pi partInfo) makePartitionNode(path string) error {"},{"line_number":179,"context_line":"\terr :\u003d unix.Mknod(path, 0600|unix.S_IFBLK, int(unix.Mkdev(uint32(pi.major), uint32(pi.minor))))"},{"line_number":180,"context_line":"\tif err !\u003d nil \u0026\u0026 !os.IsExist(err) {"},{"line_number":181,"context_line":"\t\treturn fmt.Errorf(\"create device node %q: %v\", path, err)"}],"source_content_type":"text/x-go","patch_set":4,"id":"81062663_f61a92ba","line":178,"range":{"start_line":178,"start_character":19,"end_line":178,"end_character":36},"in_reply_to":"d9741888_772a786a","updated":"2023-06-20 15:19:58.000000000","message":"Done","commit_id":"576e754082f3ccc2392ee3be4a6ce2ea11b86394"},{"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":"b303bd7d11a84fb8d1a79a9991f1e36914a0fedd","unresolved":true,"context_lines":[{"line_number":177,"context_line":"// makePartitionNode creates the device node at the given path"},{"line_number":178,"context_line":"func (pi partInfo) makePartitionNode(path string) error {"},{"line_number":179,"context_line":"\terr :\u003d unix.Mknod(path, 0600|unix.S_IFBLK, int(unix.Mkdev(uint32(pi.major), uint32(pi.minor))))"},{"line_number":180,"context_line":"\tif err !\u003d nil \u0026\u0026 !os.IsExist(err) {"},{"line_number":181,"context_line":"\t\treturn fmt.Errorf(\"create device node %q: %v\", path, err)"},{"line_number":182,"context_line":"\t}"},{"line_number":183,"context_line":"\treturn nil"}],"source_content_type":"text/x-go","patch_set":4,"id":"109d579d_79bcf55f","line":180,"range":{"start_line":180,"start_character":18,"end_line":180,"end_character":34},"updated":"2023-06-20 14:36:00.000000000","message":"If we are going to swallow an \u0027already exist\u0027 error we should check that the device we wanted to created has the same major/minor numbers as what already exists.","commit_id":"576e754082f3ccc2392ee3be4a6ce2ea11b86394"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d18e751c4c8153a99fbe342c9dc8689c2372486c","unresolved":false,"context_lines":[{"line_number":177,"context_line":"// makePartitionNode creates the device node at the given path"},{"line_number":178,"context_line":"func (pi partInfo) makePartitionNode(path string) error {"},{"line_number":179,"context_line":"\terr :\u003d unix.Mknod(path, 0600|unix.S_IFBLK, int(unix.Mkdev(uint32(pi.major), uint32(pi.minor))))"},{"line_number":180,"context_line":"\tif err !\u003d nil \u0026\u0026 !os.IsExist(err) {"},{"line_number":181,"context_line":"\t\treturn fmt.Errorf(\"create device node %q: %v\", path, err)"},{"line_number":182,"context_line":"\t}"},{"line_number":183,"context_line":"\treturn nil"}],"source_content_type":"text/x-go","patch_set":4,"id":"0496645d_7745f4eb","line":180,"range":{"start_line":180,"start_character":18,"end_line":180,"end_character":34},"in_reply_to":"109d579d_79bcf55f","updated":"2023-06-20 15:19:58.000000000","message":"Done","commit_id":"576e754082f3ccc2392ee3be4a6ce2ea11b86394"},{"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":"b303bd7d11a84fb8d1a79a9991f1e36914a0fedd","unresolved":true,"context_lines":[{"line_number":184,"context_line":"}"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"// readPartitionInfo parses all required information from a udev event"},{"line_number":187,"context_line":"func readPartitionInfo(data map[string]string) (pi partInfo, err error) {"},{"line_number":188,"context_line":"\tpi.major, err \u003d readUdevKeyInteger(data, \"MAJOR\")"},{"line_number":189,"context_line":"\tif err !\u003d nil {"},{"line_number":190,"context_line":"\t\treturn"}],"source_content_type":"text/x-go","patch_set":4,"id":"bead8885_91591e6b","line":187,"range":{"start_line":187,"start_character":23,"end_line":187,"end_character":45},"updated":"2023-06-20 14:36:00.000000000","message":"Define a type for uevent data like so:\n\n    typedef BlockUEvent map[string]string\n    \nAnd define readPartitionInfo, readUdevKeyInteger, readPartTable, on that type.","commit_id":"576e754082f3ccc2392ee3be4a6ce2ea11b86394"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d18e751c4c8153a99fbe342c9dc8689c2372486c","unresolved":false,"context_lines":[{"line_number":184,"context_line":"}"},{"line_number":185,"context_line":""},{"line_number":186,"context_line":"// readPartitionInfo parses all required information from a udev event"},{"line_number":187,"context_line":"func readPartitionInfo(data map[string]string) (pi partInfo, err error) {"},{"line_number":188,"context_line":"\tpi.major, err \u003d readUdevKeyInteger(data, \"MAJOR\")"},{"line_number":189,"context_line":"\tif err !\u003d nil {"},{"line_number":190,"context_line":"\t\treturn"}],"source_content_type":"text/x-go","patch_set":4,"id":"4cd0457b_6bb1aaf4","line":187,"range":{"start_line":187,"start_character":23,"end_line":187,"end_character":45},"in_reply_to":"bead8885_91591e6b","updated":"2023-06-20 15:19:58.000000000","message":"Done","commit_id":"576e754082f3ccc2392ee3be4a6ce2ea11b86394"},{"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":"751c71dcef4b48e3183d633c3df60f2b12355893","unresolved":true,"context_lines":[{"line_number":175,"context_line":"}"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"// validateDeviceNode tries to open a device node and validates that it"},{"line_number":178,"context_line":"// has the same major and minor device numbers. If path is non existent,"},{"line_number":179,"context_line":"// no error will be thrown."},{"line_number":180,"context_line":"func (pi partInfo) validateDeviceNode(path string) error {"},{"line_number":181,"context_line":"\tvar s unix.Stat_t"}],"source_content_type":"text/x-go","patch_set":6,"id":"47affe64_ab36431a","line":178,"range":{"start_line":178,"start_character":51,"end_line":178,"end_character":55},"updated":"2023-06-21 12:04:58.000000000","message":"```suggestion\n// has the expected major and minor device numbers. If the path does non exit,\n```","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e58e20a67e35793623a4d2a9b2fbc35652bf0dad","unresolved":false,"context_lines":[{"line_number":175,"context_line":"}"},{"line_number":176,"context_line":""},{"line_number":177,"context_line":"// validateDeviceNode tries to open a device node and validates that it"},{"line_number":178,"context_line":"// has the same major and minor device numbers. If path is non existent,"},{"line_number":179,"context_line":"// no error will be thrown."},{"line_number":180,"context_line":"func (pi partInfo) validateDeviceNode(path string) error {"},{"line_number":181,"context_line":"\tvar s unix.Stat_t"}],"source_content_type":"text/x-go","patch_set":6,"id":"b5d0ce77_dd65e57a","line":178,"range":{"start_line":178,"start_character":51,"end_line":178,"end_character":55},"in_reply_to":"47affe64_ab36431a","updated":"2023-06-21 23:52:24.000000000","message":"Done","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"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":"751c71dcef4b48e3183d633c3df60f2b12355893","unresolved":true,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"// validateDeviceNode tries to open a device node and validates that it"},{"line_number":178,"context_line":"// has the same major and minor device numbers. If path is non existent,"},{"line_number":179,"context_line":"// no error will be thrown."},{"line_number":180,"context_line":"func (pi partInfo) validateDeviceNode(path string) error {"},{"line_number":181,"context_line":"\tvar s unix.Stat_t"},{"line_number":182,"context_line":"\tif err :\u003d unix.Stat(path, \u0026s); err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":6,"id":"2b3485d8_c180268a","line":179,"range":{"start_line":179,"start_character":20,"end_line":179,"end_character":26},"updated":"2023-06-21 12:04:58.000000000","message":"```suggestion\n// no error will be returned.\n```","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e58e20a67e35793623a4d2a9b2fbc35652bf0dad","unresolved":false,"context_lines":[{"line_number":176,"context_line":""},{"line_number":177,"context_line":"// validateDeviceNode tries to open a device node and validates that it"},{"line_number":178,"context_line":"// has the same major and minor device numbers. If path is non existent,"},{"line_number":179,"context_line":"// no error will be thrown."},{"line_number":180,"context_line":"func (pi partInfo) validateDeviceNode(path string) error {"},{"line_number":181,"context_line":"\tvar s unix.Stat_t"},{"line_number":182,"context_line":"\tif err :\u003d unix.Stat(path, \u0026s); err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":6,"id":"e29ba891_cf4ce36d","line":179,"range":{"start_line":179,"start_character":20,"end_line":179,"end_character":26},"in_reply_to":"2b3485d8_c180268a","updated":"2023-06-21 23:52:24.000000000","message":"Done","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"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":"751c71dcef4b48e3183d633c3df60f2b12355893","unresolved":true,"context_lines":[{"line_number":217,"context_line":"\treturn data, nil"},{"line_number":218,"context_line":"}"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"type BlockUEvent map[string]string"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"func (b BlockUEvent) readUdevKeyInteger(key string) (int, error) {"},{"line_number":223,"context_line":"\tif _, ok :\u003d b[key]; !ok {"}],"source_content_type":"text/x-go","patch_set":6,"id":"266c9024_de116257","line":220,"range":{"start_line":220,"start_character":5,"end_line":220,"end_character":16},"updated":"2023-06-21 12:04:58.000000000","message":"I assume we don\u0027t actually want to export it, so `blockUEvent`?","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e58e20a67e35793623a4d2a9b2fbc35652bf0dad","unresolved":false,"context_lines":[{"line_number":217,"context_line":"\treturn data, nil"},{"line_number":218,"context_line":"}"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"type BlockUEvent map[string]string"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"func (b BlockUEvent) readUdevKeyInteger(key string) (int, error) {"},{"line_number":223,"context_line":"\tif _, ok :\u003d b[key]; !ok {"}],"source_content_type":"text/x-go","patch_set":6,"id":"3209abd5_9d7bcf5b","line":220,"range":{"start_line":220,"start_character":5,"end_line":220,"end_character":16},"in_reply_to":"266c9024_de116257","updated":"2023-06-21 23:52:24.000000000","message":"Done","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"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":"751c71dcef4b48e3183d633c3df60f2b12355893","unresolved":true,"context_lines":[{"line_number":252,"context_line":"\treturn"},{"line_number":253,"context_line":"}"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"// readPartTable tries to read a gpt partition table based on the BlockUEvent"},{"line_number":256,"context_line":"// data. It returns nil when either the block device is not a regular device"},{"line_number":257,"context_line":"// or it fails to parse the gpt table."},{"line_number":258,"context_line":"func (b BlockUEvent) readPartTable() (*gpt.Table, error) {"}],"source_content_type":"text/x-go","patch_set":6,"id":"284f0060_49c24545","line":255,"range":{"start_line":255,"start_character":33,"end_line":255,"end_character":36},"updated":"2023-06-21 12:04:58.000000000","message":"```suggestion\n// readPartTable tries to read a GPT partition table based on the BlockUEvent\n```","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e58e20a67e35793623a4d2a9b2fbc35652bf0dad","unresolved":false,"context_lines":[{"line_number":252,"context_line":"\treturn"},{"line_number":253,"context_line":"}"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"// readPartTable tries to read a gpt partition table based on the BlockUEvent"},{"line_number":256,"context_line":"// data. It returns nil when either the block device is not a regular device"},{"line_number":257,"context_line":"// or it fails to parse the gpt table."},{"line_number":258,"context_line":"func (b BlockUEvent) readPartTable() (*gpt.Table, error) {"}],"source_content_type":"text/x-go","patch_set":6,"id":"f50d363f_5daa421d","line":255,"range":{"start_line":255,"start_character":33,"end_line":255,"end_character":36},"in_reply_to":"284f0060_49c24545","updated":"2023-06-21 23:52:24.000000000","message":"Done","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"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":"751c71dcef4b48e3183d633c3df60f2b12355893","unresolved":true,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"// readPartTable tries to read a gpt partition table based on the BlockUEvent"},{"line_number":256,"context_line":"// data. It returns nil when either the block device is not a regular device"},{"line_number":257,"context_line":"// or it fails to parse the gpt table."},{"line_number":258,"context_line":"func (b BlockUEvent) readPartTable() (*gpt.Table, error) {"},{"line_number":259,"context_line":"\t// TODO(lorenz): This extraction code is all a bit hairy, will get"},{"line_number":260,"context_line":"\t// replaced by blockdev shortly."}],"source_content_type":"text/x-go","patch_set":6,"id":"a198e1f4_9eb3151f","line":257,"range":{"start_line":257,"start_character":28,"end_line":257,"end_character":31},"updated":"2023-06-21 12:04:58.000000000","message":"```suggestion\n// or it fails to parse the GPT table.\n```","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e58e20a67e35793623a4d2a9b2fbc35652bf0dad","unresolved":false,"context_lines":[{"line_number":254,"context_line":""},{"line_number":255,"context_line":"// readPartTable tries to read a gpt partition table based on the BlockUEvent"},{"line_number":256,"context_line":"// data. It returns nil when either the block device is not a regular device"},{"line_number":257,"context_line":"// or it fails to parse the gpt table."},{"line_number":258,"context_line":"func (b BlockUEvent) readPartTable() (*gpt.Table, error) {"},{"line_number":259,"context_line":"\t// TODO(lorenz): This extraction code is all a bit hairy, will get"},{"line_number":260,"context_line":"\t// replaced by blockdev shortly."}],"source_content_type":"text/x-go","patch_set":6,"id":"f568f9a2_da749b86","line":257,"range":{"start_line":257,"start_character":28,"end_line":257,"end_character":31},"in_reply_to":"a198e1f4_9eb3151f","updated":"2023-06-21 23:52:24.000000000","message":"Done","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"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":"751c71dcef4b48e3183d633c3df60f2b12355893","unresolved":true,"context_lines":[{"line_number":255,"context_line":"// readPartTable tries to read a gpt partition table based on the BlockUEvent"},{"line_number":256,"context_line":"// data. It returns nil when either the block device is not a regular device"},{"line_number":257,"context_line":"// or it fails to parse the gpt table."},{"line_number":258,"context_line":"func (b BlockUEvent) readPartTable() (*gpt.Table, error) {"},{"line_number":259,"context_line":"\t// TODO(lorenz): This extraction code is all a bit hairy, will get"},{"line_number":260,"context_line":"\t// replaced by blockdev shortly."},{"line_number":261,"context_line":"\tblkdev, err :\u003d os.Open(fmt.Sprintf(\"/dev/%v\", b[\"DEVNAME\"]))"}],"source_content_type":"text/x-go","patch_set":6,"id":"9391b282_8413aa44","line":258,"range":{"start_line":258,"start_character":21,"end_line":258,"end_character":34},"updated":"2023-06-21 12:04:58.000000000","message":"`readPartitionTable`","commit_id":"88e183bc2031753373088abef80aec362ad11db9"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"e58e20a67e35793623a4d2a9b2fbc35652bf0dad","unresolved":false,"context_lines":[{"line_number":255,"context_line":"// readPartTable tries to read a gpt partition table based on the BlockUEvent"},{"line_number":256,"context_line":"// data. It returns nil when either the block device is not a regular device"},{"line_number":257,"context_line":"// or it fails to parse the gpt table."},{"line_number":258,"context_line":"func (b BlockUEvent) readPartTable() (*gpt.Table, error) {"},{"line_number":259,"context_line":"\t// TODO(lorenz): This extraction code is all a bit hairy, will get"},{"line_number":260,"context_line":"\t// replaced by blockdev shortly."},{"line_number":261,"context_line":"\tblkdev, err :\u003d os.Open(fmt.Sprintf(\"/dev/%v\", b[\"DEVNAME\"]))"}],"source_content_type":"text/x-go","patch_set":6,"id":"b271881f_a98bb8a3","line":258,"range":{"start_line":258,"start_character":21,"end_line":258,"end_character":34},"in_reply_to":"9391b282_8413aa44","updated":"2023-06-21 23:52:24.000000000","message":"Done","commit_id":"88e183bc2031753373088abef80aec362ad11db9"}]}
