)]}'
{"/PATCHSET_LEVEL":[{"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":"435d7cde9d13696ddf3f98bb26ccbdb4fda2f860","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"478ac0a0_70deebfc","updated":"2022-10-18 12:09:35.000000000","message":"I\u0027ll fix the comment length thing later, it\u0027s annoyingly low in the stack.","commit_id":"23f2b6e927bd028a1149ff26654149205c49b975"},{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"407ebfc38862935451bf031354ead75c95e97b1b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5a4c2993_d44e30c6","updated":"2022-10-19 13:25:54.000000000","message":"LGTM","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"}],"metropolis/pkg/gpt/gpt.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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":134,"context_line":"\tPartitionSizeMax \u003d -1"},{"line_number":135,"context_line":")"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"type GPT struct {"},{"line_number":138,"context_line":"\t// ID is the unique identifier of this specific disk / GPT."},{"line_number":139,"context_line":"\t// If this is left uninitialized/all-zeroes a new random ID is automatically"},{"line_number":140,"context_line":"\t// generated when writing."}],"source_content_type":"text/x-go","patch_set":2,"id":"06c445ab_5adb32b5","line":137,"range":{"start_line":137,"start_character":5,"end_line":137,"end_character":8},"updated":"2022-10-19 14:40:38.000000000","message":"Nit: avoid gpt.GPT stutter by calling this gpt.Table?","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":false,"context_lines":[{"line_number":134,"context_line":"\tPartitionSizeMax \u003d -1"},{"line_number":135,"context_line":")"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"type GPT struct {"},{"line_number":138,"context_line":"\t// ID is the unique identifier of this specific disk / GPT."},{"line_number":139,"context_line":"\t// If this is left uninitialized/all-zeroes a new random ID is automatically"},{"line_number":140,"context_line":"\t// generated when writing."}],"source_content_type":"text/x-go","patch_set":2,"id":"5cedaec7_ca096bbd","line":137,"range":{"start_line":137,"start_character":5,"end_line":137,"end_character":8},"in_reply_to":"06c445ab_5adb32b5","updated":"2022-10-19 19:40:56.000000000","message":"Done","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":149,"context_line":"\tBootCode []byte"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"\t// BlockSize contains the logical block size of the block device."},{"line_number":152,"context_line":"\tBlockSize int64"},{"line_number":153,"context_line":"\t// BlockCount contains the number of logical blocks on the block device."},{"line_number":154,"context_line":"\t// BlockCount times BlockSize is the size of the block device in bytes."},{"line_number":155,"context_line":"\tBlockCount int64"}],"source_content_type":"text/x-go","patch_set":2,"id":"e7330b77_bc8bc593","line":152,"range":{"start_line":152,"start_character":1,"end_line":152,"end_character":10},"updated":"2022-10-19 14:40:38.000000000","message":"This should be checked somewhere that it\u0027s a) smaller than 1MiB b) a power of two. Otherwise some of the maths on it will be wrong.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"53f9842db7144c44b77e4704b4a40153b7047173","unresolved":false,"context_lines":[{"line_number":149,"context_line":"\tBootCode []byte"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"\t// BlockSize contains the logical block size of the block device."},{"line_number":152,"context_line":"\tBlockSize int64"},{"line_number":153,"context_line":"\t// BlockCount contains the number of logical blocks on the block device."},{"line_number":154,"context_line":"\t// BlockCount times BlockSize is the size of the block device in bytes."},{"line_number":155,"context_line":"\tBlockCount int64"}],"source_content_type":"text/x-go","patch_set":2,"id":"7e68b639_d0764698","line":152,"range":{"start_line":152,"start_character":1,"end_line":152,"end_character":10},"in_reply_to":"303dc295_198cbe54","updated":"2022-10-19 20:43:52.000000000","message":"Ack","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":true,"context_lines":[{"line_number":149,"context_line":"\tBootCode []byte"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"\t// BlockSize contains the logical block size of the block device."},{"line_number":152,"context_line":"\tBlockSize int64"},{"line_number":153,"context_line":"\t// BlockCount contains the number of logical blocks on the block device."},{"line_number":154,"context_line":"\t// BlockCount times BlockSize is the size of the block device in bytes."},{"line_number":155,"context_line":"\tBlockCount int64"}],"source_content_type":"text/x-go","patch_set":2,"id":"303dc295_198cbe54","line":152,"range":{"start_line":152,"start_character":1,"end_line":152,"end_character":10},"in_reply_to":"e7330b77_bc8bc593","updated":"2022-10-19 19:40:56.000000000","message":"I\u0027m now returning an error if the requested alignment is not an integer multiple of the block size (but it can be 1). I\u0027m also setting the default alignment to 1MiB or the block size, whichever is larger. AFAIK there is requirement for the block size to be a power of two as I\u0027m not using shifts to implement the padding calculation.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":164,"context_line":"const ("},{"line_number":165,"context_line":"\t// PreferEnd tries to put the partition as close to the end as possible"},{"line_number":166,"context_line":"\t// instead of as close to the start."},{"line_number":167,"context_line":"\tPreferEnd \u003d 1 \u003c\u003c iota"},{"line_number":168,"context_line":"\t// KeepEmptyEntries does not fill up empty entries which are followed by"},{"line_number":169,"context_line":"\t// filled ones. It always appends the partition after the last used entry."},{"line_number":170,"context_line":"\t// Without this flag, the partition is placed in the first empty entry."}],"source_content_type":"text/x-go","patch_set":2,"id":"208c64c8_b06b4246","line":167,"range":{"start_line":167,"start_character":1,"end_line":167,"end_character":10},"updated":"2022-10-19 14:40:38.000000000","message":"`PreferEnd AppendFlag \u003d i \u003c\u003c iota`\n\nAlso add a quick godoc to the AppendFlag type?","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":false,"context_lines":[{"line_number":164,"context_line":"const ("},{"line_number":165,"context_line":"\t// PreferEnd tries to put the partition as close to the end as possible"},{"line_number":166,"context_line":"\t// instead of as close to the start."},{"line_number":167,"context_line":"\tPreferEnd \u003d 1 \u003c\u003c iota"},{"line_number":168,"context_line":"\t// KeepEmptyEntries does not fill up empty entries which are followed by"},{"line_number":169,"context_line":"\t// filled ones. It always appends the partition after the last used entry."},{"line_number":170,"context_line":"\t// Without this flag, the partition is placed in the first empty entry."}],"source_content_type":"text/x-go","patch_set":2,"id":"ee547640_51493b60","line":167,"range":{"start_line":167,"start_character":1,"end_line":167,"end_character":10},"in_reply_to":"208c64c8_b06b4246","updated":"2022-10-19 19:40:56.000000000","message":"Done","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":184,"context_line":"// It writes the placement information (FirstBlock, LastBlock) back to p."},{"line_number":185,"context_line":"// By default, AddPartition aligns FirstBlock to 1MiB boundaries, but this can"},{"line_number":186,"context_line":"// be disabled by setting NoAlignment."},{"line_number":187,"context_line":"func (g *GPT) AddPartition(p *Partition, size int64, flags AppendFlag) error {"},{"line_number":188,"context_line":"\t// Number of blocks the partition should occupy, rounded up."},{"line_number":189,"context_line":"\tblocks :\u003d (size + g.BlockSize - 1) / g.BlockSize"},{"line_number":190,"context_line":"\tfs, _, err :\u003d g.GetFreeSpaces()"}],"source_content_type":"text/x-go","patch_set":2,"id":"39d53e15_afa2e3f0","line":187,"range":{"start_line":187,"start_character":53,"end_line":187,"end_character":58},"updated":"2022-10-19 14:40:38.000000000","message":"Let\u0027s not use a bitmask here, I think. The Go way of doing this would be `options ...SomeOpaqueType`, eg. `options ...AppendFlag` for now. This allows better forwards compatibility.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":false,"context_lines":[{"line_number":184,"context_line":"// It writes the placement information (FirstBlock, LastBlock) back to p."},{"line_number":185,"context_line":"// By default, AddPartition aligns FirstBlock to 1MiB boundaries, but this can"},{"line_number":186,"context_line":"// be disabled by setting NoAlignment."},{"line_number":187,"context_line":"func (g *GPT) AddPartition(p *Partition, size int64, flags AppendFlag) error {"},{"line_number":188,"context_line":"\t// Number of blocks the partition should occupy, rounded up."},{"line_number":189,"context_line":"\tblocks :\u003d (size + g.BlockSize - 1) / g.BlockSize"},{"line_number":190,"context_line":"\tfs, _, err :\u003d g.GetFreeSpaces()"}],"source_content_type":"text/x-go","patch_set":2,"id":"e9a3be2f_02b98ebd","line":187,"range":{"start_line":187,"start_character":53,"end_line":187,"end_character":58},"in_reply_to":"39d53e15_afa2e3f0","updated":"2022-10-19 19:40:56.000000000","message":"Done","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":211,"context_line":"\t\tif maxFreeBlocks \u003c freeBlocks {"},{"line_number":212,"context_line":"\t\t\tmaxFreeBlocks \u003d freeBlocks"},{"line_number":213,"context_line":"\t\t}"},{"line_number":214,"context_line":"\t\tif size !\u003d PartitionSizeMax \u0026\u0026 freeBlocks \u003e\u003d blocks {"},{"line_number":215,"context_line":"\t\t\tif flags\u0026PreferEnd \u003d\u003d 0 {"},{"line_number":216,"context_line":"\t\t\t\tp.FirstBlock \u003d uint64(start)"},{"line_number":217,"context_line":"\t\t\t\tp.LastBlock \u003d uint64(start + blocks)"}],"source_content_type":"text/x-go","patch_set":2,"id":"a6aa5378_bdc03590","line":214,"range":{"start_line":214,"start_character":13,"end_line":214,"end_character":29},"updated":"2022-10-19 14:40:38.000000000","message":"PartitionSizeMax functionality seems unimplemented now, let\u0027s either implement it or remove it?","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":false,"context_lines":[{"line_number":211,"context_line":"\t\tif maxFreeBlocks \u003c freeBlocks {"},{"line_number":212,"context_line":"\t\t\tmaxFreeBlocks \u003d freeBlocks"},{"line_number":213,"context_line":"\t\t}"},{"line_number":214,"context_line":"\t\tif size !\u003d PartitionSizeMax \u0026\u0026 freeBlocks \u003e\u003d blocks {"},{"line_number":215,"context_line":"\t\t\tif flags\u0026PreferEnd \u003d\u003d 0 {"},{"line_number":216,"context_line":"\t\t\t\tp.FirstBlock \u003d uint64(start)"},{"line_number":217,"context_line":"\t\t\t\tp.LastBlock \u003d uint64(start + blocks)"}],"source_content_type":"text/x-go","patch_set":2,"id":"bf9092c9_fed6a4ba","line":214,"range":{"start_line":214,"start_character":13,"end_line":214,"end_character":29},"in_reply_to":"a6aa5378_bdc03590","updated":"2022-10-19 19:40:56.000000000","message":"Dropped it, can be implemented later.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":260,"context_line":"// GetFreeSpaces returns a slice of tuples, each containing a half-closed"},{"line_number":261,"context_line":"// interval of logical blocks not occupied by the GPT itself or any partition."},{"line_number":262,"context_line":"// The returned intervals are always in ascending order as well as"},{"line_number":263,"context_line":"// non-overlapping. It also returns if it detected any overlaps between"},{"line_number":264,"context_line":"// partitions or partitions and the GPT. It returns an error if and only if any"},{"line_number":265,"context_line":"// partition has its FirstBlock before the LastBlock or exceeds the amount of"},{"line_number":266,"context_line":"// blocks on the block device."},{"line_number":267,"context_line":"//"}],"source_content_type":"text/x-go","patch_set":2,"id":"b5e3280b_0eb5fd33","line":264,"range":{"start_line":263,"start_character":20,"end_line":264,"end_character":40},"updated":"2022-10-19 14:40:38.000000000","message":"Shouldn\u0027t that be an error?","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"53f9842db7144c44b77e4704b4a40153b7047173","unresolved":false,"context_lines":[{"line_number":260,"context_line":"// GetFreeSpaces returns a slice of tuples, each containing a half-closed"},{"line_number":261,"context_line":"// interval of logical blocks not occupied by the GPT itself or any partition."},{"line_number":262,"context_line":"// The returned intervals are always in ascending order as well as"},{"line_number":263,"context_line":"// non-overlapping. It also returns if it detected any overlaps between"},{"line_number":264,"context_line":"// partitions or partitions and the GPT. It returns an error if and only if any"},{"line_number":265,"context_line":"// partition has its FirstBlock before the LastBlock or exceeds the amount of"},{"line_number":266,"context_line":"// blocks on the block device."},{"line_number":267,"context_line":"//"}],"source_content_type":"text/x-go","patch_set":2,"id":"a79cb9fa_ec14ac80","line":264,"range":{"start_line":263,"start_character":20,"end_line":264,"end_character":40},"in_reply_to":"09c961a1_1d73c266","updated":"2022-10-19 20:43:52.000000000","message":"Ack","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":true,"context_lines":[{"line_number":260,"context_line":"// GetFreeSpaces returns a slice of tuples, each containing a half-closed"},{"line_number":261,"context_line":"// interval of logical blocks not occupied by the GPT itself or any partition."},{"line_number":262,"context_line":"// The returned intervals are always in ascending order as well as"},{"line_number":263,"context_line":"// non-overlapping. It also returns if it detected any overlaps between"},{"line_number":264,"context_line":"// partitions or partitions and the GPT. It returns an error if and only if any"},{"line_number":265,"context_line":"// partition has its FirstBlock before the LastBlock or exceeds the amount of"},{"line_number":266,"context_line":"// blocks on the block device."},{"line_number":267,"context_line":"//"}],"source_content_type":"text/x-go","patch_set":2,"id":"09c961a1_1d73c266","line":264,"range":{"start_line":263,"start_character":20,"end_line":264,"end_character":40},"in_reply_to":"b5e3280b_0eb5fd33","updated":"2022-10-19 19:40:56.000000000","message":"The standard doesn\u0027t say. Technically nothing prohibits it. You can even do crazy things like expose the GPT table itself as a partition. GetFreeSpaces returns this as it might be useful to check for it if you don\u0027t expect it and it\u0027s free to report it anyways.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":311,"context_line":"\t// Sort both sets of blocks independently in ascending order. Note that it"},{"line_number":312,"context_line":"\t// is now no longer possible to extract the original intervals. Integers"},{"line_number":313,"context_line":"\t// have no identity thus it doesn\u0027t matter if the sort is stable or not."},{"line_number":314,"context_line":"\tsort.Slice(startBlocks, func(i, j int) bool { return startBlocks[i] \u003c startBlocks[j] })"},{"line_number":315,"context_line":"\tsort.Slice(endBlocks, func(i, j int) bool { return endBlocks[i] \u003c endBlocks[j] })"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"\tvar freeSpaces [][2]int64"}],"source_content_type":"text/x-go","patch_set":2,"id":"65168e33_b83ce523","line":314,"range":{"start_line":314,"start_character":1,"end_line":314,"end_character":11},"updated":"2022-10-19 14:40:38.000000000","message":"sort.Sort(sort.IntSlice(startBlocks))","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":true,"context_lines":[{"line_number":311,"context_line":"\t// Sort both sets of blocks independently in ascending order. Note that it"},{"line_number":312,"context_line":"\t// is now no longer possible to extract the original intervals. Integers"},{"line_number":313,"context_line":"\t// have no identity thus it doesn\u0027t matter if the sort is stable or not."},{"line_number":314,"context_line":"\tsort.Slice(startBlocks, func(i, j int) bool { return startBlocks[i] \u003c startBlocks[j] })"},{"line_number":315,"context_line":"\tsort.Slice(endBlocks, func(i, j int) bool { return endBlocks[i] \u003c endBlocks[j] })"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"\tvar freeSpaces [][2]int64"}],"source_content_type":"text/x-go","patch_set":2,"id":"c06efa9b_ec58998b","line":314,"range":{"start_line":314,"start_character":1,"end_line":314,"end_character":11},"in_reply_to":"65168e33_b83ce523","updated":"2022-10-19 19:40:56.000000000","message":"These are int64, IntSlice is only available for int.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"53f9842db7144c44b77e4704b4a40153b7047173","unresolved":false,"context_lines":[{"line_number":311,"context_line":"\t// Sort both sets of blocks independently in ascending order. Note that it"},{"line_number":312,"context_line":"\t// is now no longer possible to extract the original intervals. Integers"},{"line_number":313,"context_line":"\t// have no identity thus it doesn\u0027t matter if the sort is stable or not."},{"line_number":314,"context_line":"\tsort.Slice(startBlocks, func(i, j int) bool { return startBlocks[i] \u003c startBlocks[j] })"},{"line_number":315,"context_line":"\tsort.Slice(endBlocks, func(i, j int) bool { return endBlocks[i] \u003c endBlocks[j] })"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"\tvar freeSpaces [][2]int64"}],"source_content_type":"text/x-go","patch_set":2,"id":"5ff1d3b5_ca44d463","line":314,"range":{"start_line":314,"start_character":1,"end_line":314,"end_character":11},"in_reply_to":"c06efa9b_ec58998b","updated":"2022-10-19 20:43:52.000000000","message":"Ack","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":567,"context_line":"\t\t// with while still round-tripping correctly."},{"line_number":568,"context_line":"\t\tbootCode \u003d bytes.TrimRight(m.BootCode[:], \"\\x00\")"},{"line_number":569,"context_line":"\t}"},{"line_number":570,"context_line":"\t// Read the primary GPT. If it is damaged and/or broken, read the alternate."},{"line_number":571,"context_line":"\tprimaryGPT, err :\u003d readSingleGPT(r, blockSize, blockCount, 1)"},{"line_number":572,"context_line":"\tif err !\u003d nil {"},{"line_number":573,"context_line":"\t\talternateGPT, err2 :\u003d readSingleGPT(r, blockSize, blockCount, blockCount-1)"}],"source_content_type":"text/x-go","patch_set":2,"id":"ca817bcb_9ead4aa0","line":570,"range":{"start_line":570,"start_character":58,"end_line":570,"end_character":76},"updated":"2022-10-19 14:40:38.000000000","message":"Shouldn\u0027t we always read the alternative and check that it\u0027s the same, or that at least it\u0027s there? Does the spec recommend something here?","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"53f9842db7144c44b77e4704b4a40153b7047173","unresolved":false,"context_lines":[{"line_number":567,"context_line":"\t\t// with while still round-tripping correctly."},{"line_number":568,"context_line":"\t\tbootCode \u003d bytes.TrimRight(m.BootCode[:], \"\\x00\")"},{"line_number":569,"context_line":"\t}"},{"line_number":570,"context_line":"\t// Read the primary GPT. If it is damaged and/or broken, read the alternate."},{"line_number":571,"context_line":"\tprimaryGPT, err :\u003d readSingleGPT(r, blockSize, blockCount, 1)"},{"line_number":572,"context_line":"\tif err !\u003d nil {"},{"line_number":573,"context_line":"\t\talternateGPT, err2 :\u003d readSingleGPT(r, blockSize, blockCount, blockCount-1)"}],"source_content_type":"text/x-go","patch_set":2,"id":"1fd8b5a9_4ee12b02","line":570,"range":{"start_line":570,"start_character":58,"end_line":570,"end_character":76},"in_reply_to":"8d5d2d3d_a095446f","updated":"2022-10-19 20:43:52.000000000","message":"Ack","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":true,"context_lines":[{"line_number":567,"context_line":"\t\t// with while still round-tripping correctly."},{"line_number":568,"context_line":"\t\tbootCode \u003d bytes.TrimRight(m.BootCode[:], \"\\x00\")"},{"line_number":569,"context_line":"\t}"},{"line_number":570,"context_line":"\t// Read the primary GPT. If it is damaged and/or broken, read the alternate."},{"line_number":571,"context_line":"\tprimaryGPT, err :\u003d readSingleGPT(r, blockSize, blockCount, 1)"},{"line_number":572,"context_line":"\tif err !\u003d nil {"},{"line_number":573,"context_line":"\t\talternateGPT, err2 :\u003d readSingleGPT(r, blockSize, blockCount, blockCount-1)"}],"source_content_type":"text/x-go","patch_set":2,"id":"8d5d2d3d_a095446f","line":570,"range":{"start_line":570,"start_character":58,"end_line":570,"end_character":76},"in_reply_to":"ca817bcb_9ead4aa0","updated":"2022-10-19 19:40:56.000000000","message":"If the primary is valid, the alternate doesn\u0027t matter. It is not uncommon that it\u0027s not there, for example when extending a disk. Also checking if they are the same can cause more harm than good as generally when rewriting one first rewrites the alternate and then the primary. If the process got interrupted, if the primary is still valid it should be preferred over the alternate.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"}],"metropolis/pkg/gpt/gpt_test.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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":87,"context_line":"\t}"},{"line_number":88,"context_line":"}"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"func TestRoundTrip(t *testing.T) {"},{"line_number":91,"context_line":"\tg :\u003d GPT{"},{"line_number":92,"context_line":"\t\tID:         uuid.NewSHA1(zeroUUID, []byte(\"test\")),"},{"line_number":93,"context_line":"\t\tBlockSize:  512,"}],"source_content_type":"text/x-go","patch_set":2,"id":"c21c74e8_b8a32404","line":90,"range":{"start_line":90,"start_character":5,"end_line":90,"end_character":18},"updated":"2022-10-19 14:40:38.000000000","message":"Can we also have a ktest to ensure Linux can read what we write?","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"53f9842db7144c44b77e4704b4a40153b7047173","unresolved":true,"context_lines":[{"line_number":87,"context_line":"\t}"},{"line_number":88,"context_line":"}"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"func TestRoundTrip(t *testing.T) {"},{"line_number":91,"context_line":"\tg :\u003d GPT{"},{"line_number":92,"context_line":"\t\tID:         uuid.NewSHA1(zeroUUID, []byte(\"test\")),"},{"line_number":93,"context_line":"\t\tBlockSize:  512,"}],"source_content_type":"text/x-go","patch_set":2,"id":"3396bf7f_559e18c1","line":90,"range":{"start_line":90,"start_character":5,"end_line":90,"end_character":18},"in_reply_to":"24769d29_04eb0f2a","updated":"2022-10-19 20:43:52.000000000","message":"What I meant is to get the kernel to parse the table, eg. by pointing a qemu at a newly created GPT and seeing if it correctly parses the partition table we generated.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"3174dd4cd7ac748965819263ea712e0e37ffc153","unresolved":false,"context_lines":[{"line_number":87,"context_line":"\t}"},{"line_number":88,"context_line":"}"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"func TestRoundTrip(t *testing.T) {"},{"line_number":91,"context_line":"\tg :\u003d GPT{"},{"line_number":92,"context_line":"\t\tID:         uuid.NewSHA1(zeroUUID, []byte(\"test\")),"},{"line_number":93,"context_line":"\t\tBlockSize:  512,"}],"source_content_type":"text/x-go","patch_set":2,"id":"d0671210_455e4b53","line":90,"range":{"start_line":90,"start_character":5,"end_line":90,"end_character":18},"in_reply_to":"3396bf7f_559e18c1","updated":"2022-10-20 13:27:45.000000000","message":"I know, I missed the new file when committing.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":false,"context_lines":[{"line_number":87,"context_line":"\t}"},{"line_number":88,"context_line":"}"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"func TestRoundTrip(t *testing.T) {"},{"line_number":91,"context_line":"\tg :\u003d GPT{"},{"line_number":92,"context_line":"\t\tID:         uuid.NewSHA1(zeroUUID, []byte(\"test\")),"},{"line_number":93,"context_line":"\t\tBlockSize:  512,"}],"source_content_type":"text/x-go","patch_set":2,"id":"24769d29_04eb0f2a","line":90,"range":{"start_line":90,"start_character":5,"end_line":90,"end_character":18},"in_reply_to":"c21c74e8_b8a32404","updated":"2022-10-19 19:40:56.000000000","message":"Done","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":115,"context_line":"\tif _, err :\u003d io.Copy(originalHash, f); err !\u003d nil {"},{"line_number":116,"context_line":"\t\tpanic(err)"},{"line_number":117,"context_line":"\t}"},{"line_number":118,"context_line":"\tf.Seek(0, io.SeekStart)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"\tg2, err :\u003d Read(f, 512, 2048)"},{"line_number":121,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"4eacfa9b_5d13cd1b","line":118,"range":{"start_line":118,"start_character":1,"end_line":118,"end_character":24},"updated":"2022-10-19 14:40:38.000000000","message":"This isn\u0027t necessary and in fact we should not expect this to be true, I think.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":true,"context_lines":[{"line_number":115,"context_line":"\tif _, err :\u003d io.Copy(originalHash, f); err !\u003d nil {"},{"line_number":116,"context_line":"\t\tpanic(err)"},{"line_number":117,"context_line":"\t}"},{"line_number":118,"context_line":"\tf.Seek(0, io.SeekStart)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"\tg2, err :\u003d Read(f, 512, 2048)"},{"line_number":121,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"ae18af31_32b81f52","line":118,"range":{"start_line":118,"start_character":1,"end_line":118,"end_character":24},"in_reply_to":"4eacfa9b_5d13cd1b","updated":"2022-10-19 19:40:56.000000000","message":"It is in fact necessary. io.Copy will read from f, causing the position to advance.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"53f9842db7144c44b77e4704b4a40153b7047173","unresolved":true,"context_lines":[{"line_number":115,"context_line":"\tif _, err :\u003d io.Copy(originalHash, f); err !\u003d nil {"},{"line_number":116,"context_line":"\t\tpanic(err)"},{"line_number":117,"context_line":"\t}"},{"line_number":118,"context_line":"\tf.Seek(0, io.SeekStart)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"\tg2, err :\u003d Read(f, 512, 2048)"},{"line_number":121,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"ec255d0f_062b2c16","line":118,"range":{"start_line":118,"start_character":1,"end_line":118,"end_character":24},"in_reply_to":"ae18af31_32b81f52","updated":"2022-10-19 20:43:52.000000000","message":"Yeah, but the first thing Read does is seek to the beginning again, no?","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"3174dd4cd7ac748965819263ea712e0e37ffc153","unresolved":false,"context_lines":[{"line_number":115,"context_line":"\tif _, err :\u003d io.Copy(originalHash, f); err !\u003d nil {"},{"line_number":116,"context_line":"\t\tpanic(err)"},{"line_number":117,"context_line":"\t}"},{"line_number":118,"context_line":"\tf.Seek(0, io.SeekStart)"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"\tg2, err :\u003d Read(f, 512, 2048)"},{"line_number":121,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"98c7f5fd_52ae6e43","line":118,"range":{"start_line":118,"start_character":1,"end_line":118,"end_character":24},"in_reply_to":"ec255d0f_062b2c16","updated":"2022-10-20 13:27:45.000000000","message":"Right, this is a gpt.Read call, not a plain read.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"}],"metropolis/pkg/gpt/mbr.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":"6fdc72e5484e272505b675ca8abda69a45697cb4","unresolved":true,"context_lines":[{"line_number":75,"context_line":"\t\tsector \u003d maxSectorsPerTrack + 1"},{"line_number":76,"context_line":"\t}"},{"line_number":77,"context_line":"\tchs[0] \u003d uint8(head)"},{"line_number":78,"context_line":"\tchs[1] |\u003d uint8(sector)"},{"line_number":79,"context_line":"\tchs[1] |\u003d uint8(cylinder\u003e\u003e2) \u0026 0xc0"},{"line_number":80,"context_line":"\tchs[2] \u003d uint8(cylinder)"},{"line_number":81,"context_line":"\treturn"}],"source_content_type":"text/x-go","patch_set":2,"id":"dadd4bee_07faa16f","line":78,"range":{"start_line":78,"start_character":8,"end_line":78,"end_character":10},"updated":"2022-10-19 14:40:38.000000000","message":"`\u003d`, although in practice it doesn\u0027t matter.","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"},{"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":"085d514308ef6dd6b5fd038010c01895dd8472e4","unresolved":false,"context_lines":[{"line_number":75,"context_line":"\t\tsector \u003d maxSectorsPerTrack + 1"},{"line_number":76,"context_line":"\t}"},{"line_number":77,"context_line":"\tchs[0] \u003d uint8(head)"},{"line_number":78,"context_line":"\tchs[1] |\u003d uint8(sector)"},{"line_number":79,"context_line":"\tchs[1] |\u003d uint8(cylinder\u003e\u003e2) \u0026 0xc0"},{"line_number":80,"context_line":"\tchs[2] \u003d uint8(cylinder)"},{"line_number":81,"context_line":"\treturn"}],"source_content_type":"text/x-go","patch_set":2,"id":"82981ed1_46dfca7a","line":78,"range":{"start_line":78,"start_character":8,"end_line":78,"end_character":10},"in_reply_to":"dadd4bee_07faa16f","updated":"2022-10-19 19:40:56.000000000","message":"Done","commit_id":"45044382841fb3a52ec938f8ef971dab7c581ae2"}]}
