)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"af74686c1b62fac90e627c17c0b0a75970d33420","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e85d4bbe_feb68c57","updated":"2021-09-17 12:31:29.000000000","message":"I\u0027m unsure about func CreateOsImage staying in mkimage/main.go. Where should it go?","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"959f910ac83629572c60b1c8bbc926020fcf05a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"d48ba4b2_de42320f","updated":"2021-10-25 01:24:07.000000000","message":"sorry for the mess.","commit_id":"edc788d566142451dbdc809516fa3df2cb25554a"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0f436ab3fe1e9ea6e4143dfea3449e8761029361","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"f63e365f_7192539f","updated":"2021-11-06 15:28:41.000000000","message":"@serge: bump","commit_id":"e6fbd81530707b78810036e56d24cce8541e4cbf"},{"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":"da7693997dde21d5e5a471a4a056ce54634c6099","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9b5566dc_16b7d214","updated":"2021-11-08 12:58:35.000000000","message":"Mostly style nits. Almost there.","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"}],"metropolis/node/build/mkimage/main.go":[{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"930c09ff03aeba138df2d0dae64f88986e0d2bb7","unresolved":true,"context_lines":[{"line_number":128,"context_line":"func initializeSystemPartition(image *disk.Disk, partitionIndex int, imagePath string) error {"},{"line_number":129,"context_line":"\t// Make sure that proper parameters were passed."},{"line_number":130,"context_line":"\tif imagePath \u003d\u003d \"\" {"},{"line_number":131,"context_line":"\t\treturn fmt.Errorf(\"system image path must be set.\")"},{"line_number":132,"context_line":"\t}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"\t// Open the System image. Its contents will be later copied to the"}],"source_content_type":"text/x-go","patch_set":1,"id":"8e58bd75_df372871","line":131,"range":{"start_line":131,"start_character":50,"end_line":131,"end_character":51},"updated":"2021-09-20 08:46:09.000000000","message":"nit: no period at the end of error messages (and elsewhere)","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9ea949ea83a95184575c1424b274d5c50eaa4e","unresolved":false,"context_lines":[{"line_number":128,"context_line":"func initializeSystemPartition(image *disk.Disk, partitionIndex int, imagePath string) error {"},{"line_number":129,"context_line":"\t// Make sure that proper parameters were passed."},{"line_number":130,"context_line":"\tif imagePath \u003d\u003d \"\" {"},{"line_number":131,"context_line":"\t\treturn fmt.Errorf(\"system image path must be set.\")"},{"line_number":132,"context_line":"\t}"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"\t// Open the System image. Its contents will be later copied to the"}],"source_content_type":"text/x-go","patch_set":1,"id":"32344139_91906564","line":131,"range":{"start_line":131,"start_character":50,"end_line":131,"end_character":51},"in_reply_to":"8e58bd75_df372871","updated":"2021-09-27 16:18:28.000000000","message":"Done","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"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":"930c09ff03aeba138df2d0dae64f88986e0d2bb7","unresolved":true,"context_lines":[{"line_number":135,"context_line":"\t// partition at partitionIndex."},{"line_number":136,"context_line":"\tsystemPart, err :\u003d os.Open(imagePath)"},{"line_number":137,"context_line":"\tif err !\u003d nil {"},{"line_number":138,"context_line":"\t\treturn fmt.Errorf(\"while opening the system image: %v\", err)"},{"line_number":139,"context_line":"\t}"},{"line_number":140,"context_line":"\tdefer systemPart.Close()"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-go","patch_set":1,"id":"9148a044_6612f9ed","line":138,"range":{"start_line":138,"start_character":54,"end_line":138,"end_character":55},"updated":"2021-09-20 08:46:09.000000000","message":"Please drive-by replace %v with %w (and elsewhere).\n\n(This codebase IIRC predates %w and errors.{Is,Wrap})","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9ea949ea83a95184575c1424b274d5c50eaa4e","unresolved":false,"context_lines":[{"line_number":135,"context_line":"\t// partition at partitionIndex."},{"line_number":136,"context_line":"\tsystemPart, err :\u003d os.Open(imagePath)"},{"line_number":137,"context_line":"\tif err !\u003d nil {"},{"line_number":138,"context_line":"\t\treturn fmt.Errorf(\"while opening the system image: %v\", err)"},{"line_number":139,"context_line":"\t}"},{"line_number":140,"context_line":"\tdefer systemPart.Close()"},{"line_number":141,"context_line":""}],"source_content_type":"text/x-go","patch_set":1,"id":"b06a5825_9a992753","line":138,"range":{"start_line":138,"start_character":54,"end_line":138,"end_character":55},"in_reply_to":"9148a044_6612f9ed","updated":"2021-09-27 16:18:28.000000000","message":"Done","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"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":"930c09ff03aeba138df2d0dae64f88986e0d2bb7","unresolved":true,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"\t// Apply the above partition table."},{"line_number":235,"context_line":"\tif err :\u003d image.Partition(table); err !\u003d nil {"},{"line_number":236,"context_line":"\t\treturn fmt.Errorf(\"while applying the partition table: %v\", err)"},{"line_number":237,"context_line":"\t}"},{"line_number":238,"context_line":"\treturn nil"},{"line_number":239,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":1,"id":"485cf1b1_60361f1b","line":236,"range":{"start_line":236,"start_character":21,"end_line":236,"end_character":59},"updated":"2021-09-20 08:46:09.000000000","message":"The caller already knows that this is about initializing the partition table. Wrapping the error this way will result in the following top-level error message:\n\n   failed to initialize the partition table: while applying the partition table: foo\n\nWhich seems overly verbose.\n\nI\u0027d say this is one of these cases where not wrapping this error makes the most sense - there\u0027s only one possible error path, and the function has barely any logic in it. Or maybe fmt.Errorf(\"applying GPT: %w\", err)","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9ea949ea83a95184575c1424b274d5c50eaa4e","unresolved":false,"context_lines":[{"line_number":233,"context_line":""},{"line_number":234,"context_line":"\t// Apply the above partition table."},{"line_number":235,"context_line":"\tif err :\u003d image.Partition(table); err !\u003d nil {"},{"line_number":236,"context_line":"\t\treturn fmt.Errorf(\"while applying the partition table: %v\", err)"},{"line_number":237,"context_line":"\t}"},{"line_number":238,"context_line":"\treturn nil"},{"line_number":239,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":1,"id":"1e79caea_e686010b","line":236,"range":{"start_line":236,"start_character":21,"end_line":236,"end_character":59},"in_reply_to":"485cf1b1_60361f1b","updated":"2021-09-27 16:18:28.000000000","message":"Done","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"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":"930c09ff03aeba138df2d0dae64f88986e0d2bb7","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"// ImageParams contains parameters used during Metropolis OS image creation."},{"line_number":242,"context_line":"type ImageParams struct {"},{"line_number":243,"context_line":"\t// OutputPath is the path an OS image will be written to. If the path"},{"line_number":244,"context_line":"\t// points to an existing block device, the data partition will be"},{"line_number":245,"context_line":"\t// extended to fill it entirely. Otherwise, a regular image file will"},{"line_number":246,"context_line":"\t// be created at OutputPath. The path must not point to an existing"},{"line_number":247,"context_line":"\t// regular file."},{"line_number":248,"context_line":"\tOutputPath string"}],"source_content_type":"text/x-go","patch_set":1,"id":"ab69c63b_8e37071a","line":245,"range":{"start_line":243,"start_character":59,"end_line":245,"end_character":32},"updated":"2021-09-20 08:46:09.000000000","message":"Cool stuff.","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"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":"930c09ff03aeba138df2d0dae64f88986e0d2bb7","unresolved":true,"context_lines":[{"line_number":253,"context_line":"\t// system image. This parameter mustn\u0027t be empty."},{"line_number":254,"context_line":"\tSystemImagePath string"},{"line_number":255,"context_line":"\t// NodeParametersPath is a local filesystem path pointing to a"},{"line_number":256,"context_line":"\t// Metropolis node parameter file. This parameter is optional."},{"line_number":257,"context_line":"\tNodeParametersPath string"},{"line_number":258,"context_line":"\t// DiskGUID is a unique identifier of the image and a part of GPT"},{"line_number":259,"context_line":"\t// header. It\u0027s optional and can be left blank if the identifier is"}],"source_content_type":"text/x-go","patch_set":1,"id":"3beffba3_9b0d2b37","line":256,"range":{"start_line":256,"start_character":36,"end_line":256,"end_character":63},"updated":"2021-09-20 08:46:09.000000000","message":"“If not set, no NodeParameters will be written to the ESP.”","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9ea949ea83a95184575c1424b274d5c50eaa4e","unresolved":false,"context_lines":[{"line_number":253,"context_line":"\t// system image. This parameter mustn\u0027t be empty."},{"line_number":254,"context_line":"\tSystemImagePath string"},{"line_number":255,"context_line":"\t// NodeParametersPath is a local filesystem path pointing to a"},{"line_number":256,"context_line":"\t// Metropolis node parameter file. This parameter is optional."},{"line_number":257,"context_line":"\tNodeParametersPath string"},{"line_number":258,"context_line":"\t// DiskGUID is a unique identifier of the image and a part of GPT"},{"line_number":259,"context_line":"\t// header. It\u0027s optional and can be left blank if the identifier is"}],"source_content_type":"text/x-go","patch_set":1,"id":"12599cd4_f885a831","line":256,"range":{"start_line":256,"start_character":36,"end_line":256,"end_character":63},"in_reply_to":"3beffba3_9b0d2b37","updated":"2021-09-27 16:18:28.000000000","message":"Done","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"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":"930c09ff03aeba138df2d0dae64f88986e0d2bb7","unresolved":true,"context_lines":[{"line_number":254,"context_line":"\tSystemImagePath string"},{"line_number":255,"context_line":"\t// NodeParametersPath is a local filesystem path pointing to a"},{"line_number":256,"context_line":"\t// Metropolis node parameter file. This parameter is optional."},{"line_number":257,"context_line":"\tNodeParametersPath string"},{"line_number":258,"context_line":"\t// DiskGUID is a unique identifier of the image and a part of GPT"},{"line_number":259,"context_line":"\t// header. It\u0027s optional and can be left blank if the identifier is"},{"line_number":260,"context_line":"\t// to be randomly generated. Setting it to a predetermined value can"}],"source_content_type":"text/x-go","patch_set":1,"id":"f7f02648_7bb07c45","line":257,"range":{"start_line":257,"start_character":20,"end_line":257,"end_character":26},"updated":"2021-09-20 08:46:09.000000000","message":"Should this maybe instead take a NodeParameters proto message instead? With the intended usecase (calling this as a library), won\u0027t we rather have that than a NodeParameters serialized on the local filesystem?","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"cda5b8a944b6cb53bdb9ce101cc677f885824237","unresolved":false,"context_lines":[{"line_number":254,"context_line":"\tSystemImagePath string"},{"line_number":255,"context_line":"\t// NodeParametersPath is a local filesystem path pointing to a"},{"line_number":256,"context_line":"\t// Metropolis node parameter file. This parameter is optional."},{"line_number":257,"context_line":"\tNodeParametersPath string"},{"line_number":258,"context_line":"\t// DiskGUID is a unique identifier of the image and a part of GPT"},{"line_number":259,"context_line":"\t// header. It\u0027s optional and can be left blank if the identifier is"},{"line_number":260,"context_line":"\t// to be randomly generated. Setting it to a predetermined value can"}],"source_content_type":"text/x-go","patch_set":1,"id":"aef23305_f98937ae","line":257,"range":{"start_line":257,"start_character":20,"end_line":257,"end_character":26},"in_reply_to":"152e0e53_835060b7","updated":"2021-10-06 15:06:56.000000000","message":"Ack","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"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":"dd1db57538e2f6b29be4ac3dc54920ebf350b4ee","unresolved":true,"context_lines":[{"line_number":254,"context_line":"\tSystemImagePath string"},{"line_number":255,"context_line":"\t// NodeParametersPath is a local filesystem path pointing to a"},{"line_number":256,"context_line":"\t// Metropolis node parameter file. This parameter is optional."},{"line_number":257,"context_line":"\tNodeParametersPath string"},{"line_number":258,"context_line":"\t// DiskGUID is a unique identifier of the image and a part of GPT"},{"line_number":259,"context_line":"\t// header. It\u0027s optional and can be left blank if the identifier is"},{"line_number":260,"context_line":"\t// to be randomly generated. Setting it to a predetermined value can"}],"source_content_type":"text/x-go","patch_set":1,"id":"152e0e53_835060b7","line":257,"range":{"start_line":257,"start_character":20,"end_line":257,"end_character":26},"in_reply_to":"e3c0013b_632fa3a7","updated":"2021-09-27 19:05:39.000000000","message":"Yeah, an io.Reader is good.\n\nAs to localstorage.ESPNodeParameters: I don\u0027t think there\u0027s a super clean API right now to get access to the effective path of the parameters, you\u0027d have to probably first place the root of the filesystem to get an effective path. Feel free to file an issue for me to make that easier for the installer to access.","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9ea949ea83a95184575c1424b274d5c50eaa4e","unresolved":true,"context_lines":[{"line_number":254,"context_line":"\tSystemImagePath string"},{"line_number":255,"context_line":"\t// NodeParametersPath is a local filesystem path pointing to a"},{"line_number":256,"context_line":"\t// Metropolis node parameter file. This parameter is optional."},{"line_number":257,"context_line":"\tNodeParametersPath string"},{"line_number":258,"context_line":"\t// DiskGUID is a unique identifier of the image and a part of GPT"},{"line_number":259,"context_line":"\t// header. It\u0027s optional and can be left blank if the identifier is"},{"line_number":260,"context_line":"\t// to be randomly generated. Setting it to a predetermined value can"}],"source_content_type":"text/x-go","patch_set":1,"id":"e3c0013b_632fa3a7","line":257,"range":{"start_line":257,"start_character":20,"end_line":257,"end_character":26},"in_reply_to":"f7f02648_7bb07c45","updated":"2021-09-27 16:18:28.000000000","message":"This package doesn\u0027t make use of the proto abstraction, so that would make it a bogus import. How about an io.Reader?\n\nBTW I noticed there\u0027s an ESPNodeParameters type defined in storage_esp.go. I could use it so that we wouldn\u0027t need to specify the destination path by hand.","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"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":"930c09ff03aeba138df2d0dae64f88986e0d2bb7","unresolved":true,"context_lines":[{"line_number":270,"context_line":"// argument. In case a regular file already exists at params.OutputPath,"},{"line_number":271,"context_line":"// the function will fail. It returns a nil on success or an error, if"},{"line_number":272,"context_line":"// one did occur."},{"line_number":273,"context_line":"func CreateOSImage(params *ImageParams) error {"},{"line_number":274,"context_line":"\t// Validate each parameter before use."},{"line_number":275,"context_line":"\tif params.OutputPath \u003d\u003d \"\" {"},{"line_number":276,"context_line":"\t\treturn fmt.Errorf(\"image output path must be set.\")"}],"source_content_type":"text/x-go","patch_set":1,"id":"2c141050_d13a9dfb","line":273,"range":{"start_line":273,"start_character":5,"end_line":273,"end_character":18},"updated":"2021-09-20 08:46:09.000000000","message":"If you want to use this as a library elswhere, you have to move it out of the \u0027main\u0027 package, eg. into metropolis/node/build/mkimage/osimage (package osimage), while keeping the binary in metropolis/node/build/mkimage (package main).\n\nGo packages cannot be both a main (executable binary) package and be imported.","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9ea949ea83a95184575c1424b274d5c50eaa4e","unresolved":false,"context_lines":[{"line_number":270,"context_line":"// argument. In case a regular file already exists at params.OutputPath,"},{"line_number":271,"context_line":"// the function will fail. It returns a nil on success or an error, if"},{"line_number":272,"context_line":"// one did occur."},{"line_number":273,"context_line":"func CreateOSImage(params *ImageParams) error {"},{"line_number":274,"context_line":"\t// Validate each parameter before use."},{"line_number":275,"context_line":"\tif params.OutputPath \u003d\u003d \"\" {"},{"line_number":276,"context_line":"\t\treturn fmt.Errorf(\"image output path must be set.\")"}],"source_content_type":"text/x-go","patch_set":1,"id":"cd2b00e1_78300960","line":273,"range":{"start_line":273,"start_character":5,"end_line":273,"end_character":18},"in_reply_to":"2c141050_d13a9dfb","updated":"2021-09-27 16:18:28.000000000","message":"Done","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"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":"930c09ff03aeba138df2d0dae64f88986e0d2bb7","unresolved":true,"context_lines":[{"line_number":327,"context_line":"\tvar params ImageParams"},{"line_number":328,"context_line":"\tflag.StringVar(\u0026params.EFIPayloadPath, \"efi\", \"\", \"UEFI payload\")"},{"line_number":329,"context_line":"\tflag.StringVar(\u0026params.OutputPath, \"out\", \"\", \"Output disk image or block device\")"},{"line_number":330,"context_line":"\tflag.StringVar(\u0026params.SystemImagePath, \"system\", \"\", \"System partition [optional]\")"},{"line_number":331,"context_line":"\tflag.StringVar(\u0026params.NodeParametersPath, \"node_parameters\", \"\", \"Node parameters [optional]\")"},{"line_number":332,"context_line":"\tflag.Uint64Var(\u0026params.PartitionSize.Data, \"data_partition_size\", 2048, \"Override the data partition size (default 2048 MiB). Used only when generating image files.\")"},{"line_number":333,"context_line":"\tflag.Uint64Var(\u0026params.PartitionSize.ESP, \"esp_partition_size\", 128, \"Override the ESP partition size (default: 128MiB)\")"}],"source_content_type":"text/x-go","patch_set":1,"id":"067d84ad_c0cd6047","line":330,"range":{"start_line":330,"start_character":72,"end_line":330,"end_character":83},"updated":"2021-09-20 08:46:09.000000000","message":"Is it?","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9ea949ea83a95184575c1424b274d5c50eaa4e","unresolved":false,"context_lines":[{"line_number":327,"context_line":"\tvar params ImageParams"},{"line_number":328,"context_line":"\tflag.StringVar(\u0026params.EFIPayloadPath, \"efi\", \"\", \"UEFI payload\")"},{"line_number":329,"context_line":"\tflag.StringVar(\u0026params.OutputPath, \"out\", \"\", \"Output disk image or block device\")"},{"line_number":330,"context_line":"\tflag.StringVar(\u0026params.SystemImagePath, \"system\", \"\", \"System partition [optional]\")"},{"line_number":331,"context_line":"\tflag.StringVar(\u0026params.NodeParametersPath, \"node_parameters\", \"\", \"Node parameters [optional]\")"},{"line_number":332,"context_line":"\tflag.Uint64Var(\u0026params.PartitionSize.Data, \"data_partition_size\", 2048, \"Override the data partition size (default 2048 MiB). Used only when generating image files.\")"},{"line_number":333,"context_line":"\tflag.Uint64Var(\u0026params.PartitionSize.ESP, \"esp_partition_size\", 128, \"Override the ESP partition size (default: 128MiB)\")"}],"source_content_type":"text/x-go","patch_set":1,"id":"333d54dd_028a2eae","line":330,"range":{"start_line":330,"start_character":72,"end_line":330,"end_character":83},"in_reply_to":"067d84ad_c0cd6047","updated":"2021-09-27 16:18:28.000000000","message":"Done","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"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":"930c09ff03aeba138df2d0dae64f88986e0d2bb7","unresolved":true,"context_lines":[{"line_number":328,"context_line":"\tflag.StringVar(\u0026params.EFIPayloadPath, \"efi\", \"\", \"UEFI payload\")"},{"line_number":329,"context_line":"\tflag.StringVar(\u0026params.OutputPath, \"out\", \"\", \"Output disk image or block device\")"},{"line_number":330,"context_line":"\tflag.StringVar(\u0026params.SystemImagePath, \"system\", \"\", \"System partition [optional]\")"},{"line_number":331,"context_line":"\tflag.StringVar(\u0026params.NodeParametersPath, \"node_parameters\", \"\", \"Node parameters [optional]\")"},{"line_number":332,"context_line":"\tflag.Uint64Var(\u0026params.PartitionSize.Data, \"data_partition_size\", 2048, \"Override the data partition size (default 2048 MiB). Used only when generating image files.\")"},{"line_number":333,"context_line":"\tflag.Uint64Var(\u0026params.PartitionSize.ESP, \"esp_partition_size\", 128, \"Override the ESP partition size (default: 128MiB)\")"},{"line_number":334,"context_line":"\tflag.Uint64Var(\u0026params.PartitionSize.System, \"system_partition_size\", 1024, \"Override the System partition size (default: 1024MiB)\")"}],"source_content_type":"text/x-go","patch_set":1,"id":"4ffd2c0f_23663604","line":331,"range":{"start_line":331,"start_character":84,"end_line":331,"end_character":95},"updated":"2021-09-20 08:46:09.000000000","message":"By convention (also see diskGUID flag): “Node parameters to be written to ESP (default: do not write Node parameters)”","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"5d9ea949ea83a95184575c1424b274d5c50eaa4e","unresolved":false,"context_lines":[{"line_number":328,"context_line":"\tflag.StringVar(\u0026params.EFIPayloadPath, \"efi\", \"\", \"UEFI payload\")"},{"line_number":329,"context_line":"\tflag.StringVar(\u0026params.OutputPath, \"out\", \"\", \"Output disk image or block device\")"},{"line_number":330,"context_line":"\tflag.StringVar(\u0026params.SystemImagePath, \"system\", \"\", \"System partition [optional]\")"},{"line_number":331,"context_line":"\tflag.StringVar(\u0026params.NodeParametersPath, \"node_parameters\", \"\", \"Node parameters [optional]\")"},{"line_number":332,"context_line":"\tflag.Uint64Var(\u0026params.PartitionSize.Data, \"data_partition_size\", 2048, \"Override the data partition size (default 2048 MiB). Used only when generating image files.\")"},{"line_number":333,"context_line":"\tflag.Uint64Var(\u0026params.PartitionSize.ESP, \"esp_partition_size\", 128, \"Override the ESP partition size (default: 128MiB)\")"},{"line_number":334,"context_line":"\tflag.Uint64Var(\u0026params.PartitionSize.System, \"system_partition_size\", 1024, \"Override the System partition size (default: 1024MiB)\")"}],"source_content_type":"text/x-go","patch_set":1,"id":"df3ffed7_51b8dd09","line":331,"range":{"start_line":331,"start_character":84,"end_line":331,"end_character":95},"in_reply_to":"4ffd2c0f_23663604","updated":"2021-09-27 16:18:28.000000000","message":"Done","commit_id":"e8d96e7cbc0e8536aa6997057a0d29d322116c22"},{"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":"6803394b13583220c66c2a31fd784d8f2468a779","unresolved":true,"context_lines":[{"line_number":57,"context_line":"\t// Open the input files for osimage.Create, fill in reader objects and"},{"line_number":58,"context_line":"\t// metadata in osimage.Params. Start with the EFI Payload the OS will"},{"line_number":59,"context_line":"\t// boot from."},{"line_number":60,"context_line":"\tEFIPayload, err :\u003d os.Open(EFIPayloadPath)"},{"line_number":61,"context_line":"\tif err !\u003d nil {"},{"line_number":62,"context_line":"\t\tlog.Fatalf(\"while opening the EFI payload at %q: %s\", EFIPayloadPath, err.Error())"},{"line_number":63,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":4,"id":"fd0757ae_04889aa6","line":60,"range":{"start_line":60,"start_character":1,"end_line":60,"end_character":11},"updated":"2021-10-06 16:33:26.000000000","message":"nit: start variables with lowercase - also these are a bit too long for my taste.","commit_id":"968bc09dcb61ce7dd235aff359be1b56c15a70d5"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0f436ab3fe1e9ea6e4143dfea3449e8761029361","unresolved":false,"context_lines":[{"line_number":57,"context_line":"\t// Open the input files for osimage.Create, fill in reader objects and"},{"line_number":58,"context_line":"\t// metadata in osimage.Params. Start with the EFI Payload the OS will"},{"line_number":59,"context_line":"\t// boot from."},{"line_number":60,"context_line":"\tEFIPayload, err :\u003d os.Open(EFIPayloadPath)"},{"line_number":61,"context_line":"\tif err !\u003d nil {"},{"line_number":62,"context_line":"\t\tlog.Fatalf(\"while opening the EFI payload at %q: %s\", EFIPayloadPath, err.Error())"},{"line_number":63,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":4,"id":"1694a946_16822cd7","line":60,"range":{"start_line":60,"start_character":1,"end_line":60,"end_character":11},"in_reply_to":"fd0757ae_04889aa6","updated":"2021-11-06 15:28:41.000000000","message":"Done","commit_id":"968bc09dcb61ce7dd235aff359be1b56c15a70d5"},{"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":"da7693997dde21d5e5a471a4a056ce54634c6099","unresolved":true,"context_lines":[{"line_number":52,"context_line":"\tflag.Uint64Var(\u0026cfg.PartitionSize.ESP, \"esp_partition_size\", 128, \"Override the ESP partition size (default: 128MiB)\")"},{"line_number":53,"context_line":"\tflag.Uint64Var(\u0026cfg.PartitionSize.System, \"system_partition_size\", 1024, \"Override the System partition size (default: 1024MiB)\")"},{"line_number":54,"context_line":"\tflag.StringVar(\u0026cfg.DiskGUID, \"GUID\", \"\", \"Disk GUID marked in the resulting image\u0027s partition table (default: randomly generated)\")"},{"line_number":55,"context_line":"\tflag.BoolVar(\u0026installer, \"installer\", false, \"Create an installer image consisting of only the ESP.\")"},{"line_number":56,"context_line":"\tflag.Parse()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"\t// Apply the installer flag. Zero-sized partitions won\u0027t be added to the"}],"source_content_type":"text/x-go","patch_set":8,"id":"03f85e67_5a6346ec","line":55,"range":{"start_line":55,"start_character":1,"end_line":55,"end_character":102},"updated":"2021-11-08 12:58:35.000000000","message":"Is anything going to shell out to the tool when generating an installer image?","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"37ee49caf84f24313e189512483681fe6afb82ce","unresolved":true,"context_lines":[{"line_number":52,"context_line":"\tflag.Uint64Var(\u0026cfg.PartitionSize.ESP, \"esp_partition_size\", 128, \"Override the ESP partition size (default: 128MiB)\")"},{"line_number":53,"context_line":"\tflag.Uint64Var(\u0026cfg.PartitionSize.System, \"system_partition_size\", 1024, \"Override the System partition size (default: 1024MiB)\")"},{"line_number":54,"context_line":"\tflag.StringVar(\u0026cfg.DiskGUID, \"GUID\", \"\", \"Disk GUID marked in the resulting image\u0027s partition table (default: randomly generated)\")"},{"line_number":55,"context_line":"\tflag.BoolVar(\u0026installer, \"installer\", false, \"Create an installer image consisting of only the ESP.\")"},{"line_number":56,"context_line":"\tflag.Parse()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"\t// Apply the installer flag. Zero-sized partitions won\u0027t be added to the"}],"source_content_type":"text/x-go","patch_set":8,"id":"83e8e072_b01141ed","line":55,"range":{"start_line":55,"start_character":1,"end_line":55,"end_character":102},"in_reply_to":"03f85e67_5a6346ec","updated":"2021-11-09 12:32:42.000000000","message":"Not anymore. I\u0027m removing it.","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d12fa07baeea4a58770958eb01badbae7c516174","unresolved":false,"context_lines":[{"line_number":52,"context_line":"\tflag.Uint64Var(\u0026cfg.PartitionSize.ESP, \"esp_partition_size\", 128, \"Override the ESP partition size (default: 128MiB)\")"},{"line_number":53,"context_line":"\tflag.Uint64Var(\u0026cfg.PartitionSize.System, \"system_partition_size\", 1024, \"Override the System partition size (default: 1024MiB)\")"},{"line_number":54,"context_line":"\tflag.StringVar(\u0026cfg.DiskGUID, \"GUID\", \"\", \"Disk GUID marked in the resulting image\u0027s partition table (default: randomly generated)\")"},{"line_number":55,"context_line":"\tflag.BoolVar(\u0026installer, \"installer\", false, \"Create an installer image consisting of only the ESP.\")"},{"line_number":56,"context_line":"\tflag.Parse()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"\t// Apply the installer flag. Zero-sized partitions won\u0027t be added to the"}],"source_content_type":"text/x-go","patch_set":8,"id":"8a172bb4_5a54ce8c","line":55,"range":{"start_line":55,"start_character":1,"end_line":55,"end_character":102},"in_reply_to":"83e8e072_b01141ed","updated":"2021-11-09 12:33:28.000000000","message":"Done","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"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":"da7693997dde21d5e5a471a4a056ce54634c6099","unresolved":true,"context_lines":[{"line_number":70,"context_line":"\t\tlog.Fatalf(\"while opening the EFI payload at %q: %s\", efiPayload, err.Error())"},{"line_number":71,"context_line":"\t}"},{"line_number":72,"context_line":"\tdefer p.Close()"},{"line_number":73,"context_line":"\tcfg.EFIPayload \u003d io.Reader(p)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"\t// Attempt to open the system image if its path is set. In case the path"},{"line_number":76,"context_line":"\t// isn\u0027t set, the system partition will still be created, but no"}],"source_content_type":"text/x-go","patch_set":8,"id":"03ba18dc_c83cbfbc","line":73,"range":{"start_line":73,"start_character":18,"end_line":73,"end_character":30},"updated":"2021-11-08 12:58:35.000000000","message":"nit: Unnecessary cast (and elsewhere).","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"37ee49caf84f24313e189512483681fe6afb82ce","unresolved":false,"context_lines":[{"line_number":70,"context_line":"\t\tlog.Fatalf(\"while opening the EFI payload at %q: %s\", efiPayload, err.Error())"},{"line_number":71,"context_line":"\t}"},{"line_number":72,"context_line":"\tdefer p.Close()"},{"line_number":73,"context_line":"\tcfg.EFIPayload \u003d io.Reader(p)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"\t// Attempt to open the system image if its path is set. In case the path"},{"line_number":76,"context_line":"\t// isn\u0027t set, the system partition will still be created, but no"}],"source_content_type":"text/x-go","patch_set":8,"id":"7e6dc556_04f78837","line":73,"range":{"start_line":73,"start_character":18,"end_line":73,"end_character":30},"in_reply_to":"03ba18dc_c83cbfbc","updated":"2021-11-09 12:32:42.000000000","message":"Done","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"}],"metropolis/node/build/mkimage/osimage/osimage.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":"6803394b13583220c66c2a31fd784d8f2468a779","unresolved":true,"context_lines":[{"line_number":226,"context_line":"\tOutputPath string"},{"line_number":227,"context_line":"\t// EFIPayload provides contents of the EFI payload file. It must not be"},{"line_number":228,"context_line":"\t// nil."},{"line_number":229,"context_line":"\tEFIPayload *io.Reader"},{"line_number":230,"context_line":"\t// SystemImage provides contents of the Metropolis system partition."},{"line_number":231,"context_line":"\t// It must not be nil."},{"line_number":232,"context_line":"\tSystemImage *io.Reader"}],"source_content_type":"text/x-go","patch_set":4,"id":"c4e15d1b_ee538f3e","line":229,"range":{"start_line":229,"start_character":12,"end_line":229,"end_character":22},"updated":"2021-10-06 16:33:26.000000000","message":"Why the pointers for io.Readers?","commit_id":"968bc09dcb61ce7dd235aff359be1b56c15a70d5"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0f436ab3fe1e9ea6e4143dfea3449e8761029361","unresolved":false,"context_lines":[{"line_number":226,"context_line":"\tOutputPath string"},{"line_number":227,"context_line":"\t// EFIPayload provides contents of the EFI payload file. It must not be"},{"line_number":228,"context_line":"\t// nil."},{"line_number":229,"context_line":"\tEFIPayload *io.Reader"},{"line_number":230,"context_line":"\t// SystemImage provides contents of the Metropolis system partition."},{"line_number":231,"context_line":"\t// It must not be nil."},{"line_number":232,"context_line":"\tSystemImage *io.Reader"}],"source_content_type":"text/x-go","patch_set":4,"id":"13bbf679_89732410","line":229,"range":{"start_line":229,"start_character":12,"end_line":229,"end_character":22},"in_reply_to":"7452a399_4da903a5","updated":"2021-11-06 15:28:41.000000000","message":"Done","commit_id":"968bc09dcb61ce7dd235aff359be1b56c15a70d5"},{"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":"43232b12524f5a755be4d2b492d5b1fb86d29ab9","unresolved":true,"context_lines":[{"line_number":226,"context_line":"\tOutputPath string"},{"line_number":227,"context_line":"\t// EFIPayload provides contents of the EFI payload file. It must not be"},{"line_number":228,"context_line":"\t// nil."},{"line_number":229,"context_line":"\tEFIPayload *io.Reader"},{"line_number":230,"context_line":"\t// SystemImage provides contents of the Metropolis system partition."},{"line_number":231,"context_line":"\t// It must not be nil."},{"line_number":232,"context_line":"\tSystemImage *io.Reader"}],"source_content_type":"text/x-go","patch_set":4,"id":"7452a399_4da903a5","line":229,"range":{"start_line":229,"start_character":12,"end_line":229,"end_character":22},"in_reply_to":"9622fdc7_309e1254","updated":"2021-10-08 15:34:04.000000000","message":"Yes, that\u0027s what I was getting to. And it would simplify some of the code (ie. the references and dereferences around this struct), and would be more idiomatic Go.\n\nPlease move this to use io.Reader directly, and once that\u0027s done I\u0027ll do a thorough review of the code - I think a lot of nits I would write now disappear once you move away from interface pointers.","commit_id":"968bc09dcb61ce7dd235aff359be1b56c15a70d5"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b0d88e39568fe69f2d250578dc4c5be8bbd2a72e","unresolved":true,"context_lines":[{"line_number":226,"context_line":"\tOutputPath string"},{"line_number":227,"context_line":"\t// EFIPayload provides contents of the EFI payload file. It must not be"},{"line_number":228,"context_line":"\t// nil."},{"line_number":229,"context_line":"\tEFIPayload *io.Reader"},{"line_number":230,"context_line":"\t// SystemImage provides contents of the Metropolis system partition."},{"line_number":231,"context_line":"\t// It must not be nil."},{"line_number":232,"context_line":"\tSystemImage *io.Reader"}],"source_content_type":"text/x-go","patch_set":4,"id":"9622fdc7_309e1254","line":229,"range":{"start_line":229,"start_character":12,"end_line":229,"end_character":22},"in_reply_to":"c4e15d1b_ee538f3e","updated":"2021-10-07 18:29:47.000000000","message":"By convention, since some of the members are optional and can be left nil.\n\nNow that I think of it, it looks like interfaces can be tested against nil too, which would serve the same purpose.","commit_id":"968bc09dcb61ce7dd235aff359be1b56c15a70d5"},{"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":"6803394b13583220c66c2a31fd784d8f2468a779","unresolved":true,"context_lines":[{"line_number":235,"context_line":"\t// will be filled with zero bytes. If SystemImageLength is greater than"},{"line_number":236,"context_line":"\t// the count of bytes available in SystemImage, Create will return an"},{"line_number":237,"context_line":"\t// error. SystemImageLength must be zero if SystemImage is nil."},{"line_number":238,"context_line":"\tSystemImageLength int64"},{"line_number":239,"context_line":"\t// NodeParameters provides contents of the node parameters file. If nil,"},{"line_number":240,"context_line":"\t// the node parameters file won\u0027t be created in the target ESP"},{"line_number":241,"context_line":"\t// filesystem."}],"source_content_type":"text/x-go","patch_set":4,"id":"68e7904b_034dee7b","line":238,"range":{"start_line":238,"start_character":1,"end_line":238,"end_character":18},"updated":"2021-10-06 16:33:26.000000000","message":"Why didn\u0027t you in the end go with io.ReadSeeker instead of separate lengths?","commit_id":"968bc09dcb61ce7dd235aff359be1b56c15a70d5"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b0d88e39568fe69f2d250578dc4c5be8bbd2a72e","unresolved":true,"context_lines":[{"line_number":235,"context_line":"\t// will be filled with zero bytes. If SystemImageLength is greater than"},{"line_number":236,"context_line":"\t// the count of bytes available in SystemImage, Create will return an"},{"line_number":237,"context_line":"\t// error. SystemImageLength must be zero if SystemImage is nil."},{"line_number":238,"context_line":"\tSystemImageLength int64"},{"line_number":239,"context_line":"\t// NodeParameters provides contents of the node parameters file. If nil,"},{"line_number":240,"context_line":"\t// the node parameters file won\u0027t be created in the target ESP"},{"line_number":241,"context_line":"\t// filesystem."}],"source_content_type":"text/x-go","patch_set":4,"id":"9fd573d7_d1621b25","line":238,"range":{"start_line":238,"start_character":1,"end_line":238,"end_character":18},"in_reply_to":"68e7904b_034dee7b","updated":"2021-10-07 18:29:47.000000000","message":"It would make interfacing with this code too cumbersome. For example, you\u0027d need to write a ReadSeeker for network downloads.","commit_id":"968bc09dcb61ce7dd235aff359be1b56c15a70d5"},{"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":"43232b12524f5a755be4d2b492d5b1fb86d29ab9","unresolved":false,"context_lines":[{"line_number":235,"context_line":"\t// will be filled with zero bytes. If SystemImageLength is greater than"},{"line_number":236,"context_line":"\t// the count of bytes available in SystemImage, Create will return an"},{"line_number":237,"context_line":"\t// error. SystemImageLength must be zero if SystemImage is nil."},{"line_number":238,"context_line":"\tSystemImageLength int64"},{"line_number":239,"context_line":"\t// NodeParameters provides contents of the node parameters file. If nil,"},{"line_number":240,"context_line":"\t// the node parameters file won\u0027t be created in the target ESP"},{"line_number":241,"context_line":"\t// filesystem."}],"source_content_type":"text/x-go","patch_set":4,"id":"37f50cc1_8db9a59d","line":238,"range":{"start_line":238,"start_character":1,"end_line":238,"end_character":18},"in_reply_to":"9fd573d7_d1621b25","updated":"2021-10-08 15:34:04.000000000","message":"Ah, I see there\u0027s no nice stdlib way to actually get a ReadSeeker from some in-memory buffer. Fair enough, let\u0027s go with this.","commit_id":"968bc09dcb61ce7dd235aff359be1b56c15a70d5"},{"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":"da7693997dde21d5e5a471a4a056ce54634c6099","unresolved":true,"context_lines":[{"line_number":42,"context_line":"\tEFIPayloadPath \u003d \"/EFI/BOOT/BOOTx64.EFI\""},{"line_number":43,"context_line":"\tNodeParamsPath \u003d \"/EFI/metropolis/parameters.pb\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"\tMiB \u003d 1024 * 1024"},{"line_number":46,"context_line":")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"// put creates a file on the target filesystem fs and fills it with"}],"source_content_type":"text/x-go","patch_set":8,"id":"31668cbe_5a1eb11f","line":45,"updated":"2021-11-08 12:58:35.000000000","message":"nit: Probably no reason to export this? (also review whether the other consts above need to be exported, they seem generally \u0027useful\u0027 to me but it\u0027d make sense to ensure as little implementation details are exported as needed)","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"37ee49caf84f24313e189512483681fe6afb82ce","unresolved":true,"context_lines":[{"line_number":42,"context_line":"\tEFIPayloadPath \u003d \"/EFI/BOOT/BOOTx64.EFI\""},{"line_number":43,"context_line":"\tNodeParamsPath \u003d \"/EFI/metropolis/parameters.pb\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"\tMiB \u003d 1024 * 1024"},{"line_number":46,"context_line":")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"// put creates a file on the target filesystem fs and fills it with"}],"source_content_type":"text/x-go","patch_set":8,"id":"5a1ac513_df5e3b26","line":45,"in_reply_to":"31668cbe_5a1eb11f","updated":"2021-11-09 12:32:42.000000000","message":"I\u0027ve renamed it to \u0027mib\u0027 and left constants currently unused elsewhere unexported. The volume labels and EFIPayloadPath are used in installer tests. Should the need arise, I\u0027d rather export these from one place.","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"d12fa07baeea4a58770958eb01badbae7c516174","unresolved":false,"context_lines":[{"line_number":42,"context_line":"\tEFIPayloadPath \u003d \"/EFI/BOOT/BOOTx64.EFI\""},{"line_number":43,"context_line":"\tNodeParamsPath \u003d \"/EFI/metropolis/parameters.pb\""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"\tMiB \u003d 1024 * 1024"},{"line_number":46,"context_line":")"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"// put creates a file on the target filesystem fs and fills it with"}],"source_content_type":"text/x-go","patch_set":8,"id":"578b9a20_5db18bd5","line":45,"in_reply_to":"5a1ac513_df5e3b26","updated":"2021-11-09 12:33:28.000000000","message":"Done","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"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":"da7693997dde21d5e5a471a4a056ce54634c6099","unresolved":true,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"\t// If this is streamed (e.g. using io.Copy) it exposes a bug in diskfs, so"},{"line_number":57,"context_line":"\t// do it in one go."},{"line_number":58,"context_line":"\t// TODO(mz): Investigate the bug."},{"line_number":59,"context_line":"\tdata, err :\u003d ioutil.ReadAll(src)"},{"line_number":60,"context_line":"\tif err !\u003d nil {"},{"line_number":61,"context_line":"\t\treturn fmt.Errorf(\"while reading %q: %w\", src, err)"}],"source_content_type":"text/x-go","patch_set":8,"id":"f7f69c81_064c3ced","line":58,"range":{"start_line":58,"start_character":9,"end_line":58,"end_character":11},"updated":"2021-11-08 12:58:35.000000000","message":"nit: If this is you, please use an actually resolvable username (gerrit or email address) :).","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"37ee49caf84f24313e189512483681fe6afb82ce","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"\t// If this is streamed (e.g. using io.Copy) it exposes a bug in diskfs, so"},{"line_number":57,"context_line":"\t// do it in one go."},{"line_number":58,"context_line":"\t// TODO(mz): Investigate the bug."},{"line_number":59,"context_line":"\tdata, err :\u003d ioutil.ReadAll(src)"},{"line_number":60,"context_line":"\tif err !\u003d nil {"},{"line_number":61,"context_line":"\t\treturn fmt.Errorf(\"while reading %q: %w\", src, err)"}],"source_content_type":"text/x-go","patch_set":8,"id":"a20c3302_0d1d0c73","line":58,"range":{"start_line":58,"start_character":9,"end_line":58,"end_character":11},"in_reply_to":"f7f69c81_064c3ced","updated":"2021-11-09 12:32:42.000000000","message":"I\u0027m going with a full e-mail address to make it unambigous.","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"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":"da7693997dde21d5e5a471a4a056ce54634c6099","unresolved":true,"context_lines":[{"line_number":209,"context_line":"// space to it. It may return an error."},{"line_number":210,"context_line":"func (pl *partitionList) extendLastPartition(image *disk.Disk) error {"},{"line_number":211,"context_line":"\tif len(*pl) \u003d\u003d 0 {"},{"line_number":212,"context_line":"\t\treturn fmt.Errorf(\"the partition mustn\u0027t be empty.\")"},{"line_number":213,"context_line":"\t}"},{"line_number":214,"context_line":"\tif image.Size \u003d\u003d 0 {"},{"line_number":215,"context_line":"\t\treturn fmt.Errorf(\"the image size mustn\u0027t be zero.\")"}],"source_content_type":"text/x-go","patch_set":8,"id":"e3852a68_a8482353","line":212,"range":{"start_line":212,"start_character":35,"end_line":212,"end_character":42},"updated":"2021-11-08 12:58:35.000000000","message":"nit: probably better reworded as \u0027no partitions defined\u0027. Ie., you should usually state the error condition, not how to correct the error (also elsewhere).\n\nRationale: think of the way this error will be presented to the developer or even end user: “Installation failed: [...] when extending last partition: no partitions defined” seems, to me, better than “Installation failed: [...] when extending last partition: the partition mustn\u0027t be empty”. Even with \u0027the table mustn\u0027t be empty\u0027 this would IMO be less readable.\n\nThere are some exceptions to this rule, eg. argument checking code that responds directly to user requests, and other things generally \u0027close\u0027 to user requests. But in generic library code that\u0027s far removed from something user controlled, it\u0027s better to state what we are sure of (the error condition) than try to point on how to resolve the condition (poorly, because we lack the context of the code path that took us to this error condition - instead, let the intermediary error wraps provide this context).\n\nAlso, errors strings shall not end with periods (we really need a linter pass for this...): https://github.com/golang/go/wiki/CodeReviewComments#error-strings (also elsewhere)","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"37ee49caf84f24313e189512483681fe6afb82ce","unresolved":false,"context_lines":[{"line_number":209,"context_line":"// space to it. It may return an error."},{"line_number":210,"context_line":"func (pl *partitionList) extendLastPartition(image *disk.Disk) error {"},{"line_number":211,"context_line":"\tif len(*pl) \u003d\u003d 0 {"},{"line_number":212,"context_line":"\t\treturn fmt.Errorf(\"the partition mustn\u0027t be empty.\")"},{"line_number":213,"context_line":"\t}"},{"line_number":214,"context_line":"\tif image.Size \u003d\u003d 0 {"},{"line_number":215,"context_line":"\t\treturn fmt.Errorf(\"the image size mustn\u0027t be zero.\")"}],"source_content_type":"text/x-go","patch_set":8,"id":"b7872a9e_ee2f8f8a","line":212,"range":{"start_line":212,"start_character":35,"end_line":212,"end_character":42},"in_reply_to":"e3852a68_a8482353","updated":"2021-11-09 12:32:42.000000000","message":"Done","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"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":"da7693997dde21d5e5a471a4a056ce54634c6099","unresolved":true,"context_lines":[{"line_number":248,"context_line":"\t\tpl.appendPartition(image, DataPartitionType, DataVolumeLabel, 0)"},{"line_number":249,"context_line":"\t}"},{"line_number":250,"context_line":"\tif err :\u003d pl.extendLastPartition(image); err !\u003d nil {"},{"line_number":251,"context_line":"\t\treturn fmt.Errorf(\"while extending a partition: %w\", err)"},{"line_number":252,"context_line":"\t}"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"\t// Build and apply the partition table."}],"source_content_type":"text/x-go","patch_set":8,"id":"2e14f367_bbabe46a","line":251,"range":{"start_line":251,"start_character":37,"end_line":251,"end_character":38},"updated":"2021-11-08 12:58:35.000000000","message":"nit: \u0027the last partition\u0027, not \u0027a partition\u0027.","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"37ee49caf84f24313e189512483681fe6afb82ce","unresolved":false,"context_lines":[{"line_number":248,"context_line":"\t\tpl.appendPartition(image, DataPartitionType, DataVolumeLabel, 0)"},{"line_number":249,"context_line":"\t}"},{"line_number":250,"context_line":"\tif err :\u003d pl.extendLastPartition(image); err !\u003d nil {"},{"line_number":251,"context_line":"\t\treturn fmt.Errorf(\"while extending a partition: %w\", err)"},{"line_number":252,"context_line":"\t}"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"\t// Build and apply the partition table."}],"source_content_type":"text/x-go","patch_set":8,"id":"ec5ecf3c_6e6fad89","line":251,"range":{"start_line":251,"start_character":37,"end_line":251,"end_character":38},"in_reply_to":"2e14f367_bbabe46a","updated":"2021-11-09 12:32:42.000000000","message":"Done","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"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":"da7693997dde21d5e5a471a4a056ce54634c6099","unresolved":true,"context_lines":[{"line_number":310,"context_line":"\t// block device by stat-ing the output path parameter."},{"line_number":311,"context_line":"\toutInfo, err :\u003d os.Stat(params.OutputPath)"},{"line_number":312,"context_line":"\tif err !\u003d nil \u0026\u0026 !os.IsNotExist(err) {"},{"line_number":313,"context_line":"\t\treturn fmt.Errorf(\"couldn\u0027t stat %q: %w\", params.OutputPath, err)"},{"line_number":314,"context_line":"\t}"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"\t// Calculate the image size (bytes) by summing up partition sizes"}],"source_content_type":"text/x-go","patch_set":8,"id":"374a3d18_f3a7262b","line":313,"range":{"start_line":313,"start_character":35,"end_line":313,"end_character":37},"updated":"2021-11-08 12:58:35.000000000","message":"nit: os.XXX functions are the annoyingly rare exception of stdlib code that returns an error string which already contains information about function call parameters.\n\nEg., a failing os.Stat will return the path it was called with, so there\u0027s no need to repeat it here. It already even says \"stat %s: ...\", so it\u0027s also just fine to `return err` here.","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"37ee49caf84f24313e189512483681fe6afb82ce","unresolved":false,"context_lines":[{"line_number":310,"context_line":"\t// block device by stat-ing the output path parameter."},{"line_number":311,"context_line":"\toutInfo, err :\u003d os.Stat(params.OutputPath)"},{"line_number":312,"context_line":"\tif err !\u003d nil \u0026\u0026 !os.IsNotExist(err) {"},{"line_number":313,"context_line":"\t\treturn fmt.Errorf(\"couldn\u0027t stat %q: %w\", params.OutputPath, err)"},{"line_number":314,"context_line":"\t}"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"\t// Calculate the image size (bytes) by summing up partition sizes"}],"source_content_type":"text/x-go","patch_set":8,"id":"3aa6ada9_76cae79d","line":313,"range":{"start_line":313,"start_character":35,"end_line":313,"end_character":37},"in_reply_to":"374a3d18_f3a7262b","updated":"2021-11-09 12:32:42.000000000","message":"Done","commit_id":"ea07b240f3bbb06922fe649d1f635c8648884716"},{"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":"4470459e5c6203a7230feae364c386acb50c8960","unresolved":false,"context_lines":[{"line_number":300,"context_line":"// Create writes a Metropolis OS image to either a newly created regular"},{"line_number":301,"context_line":"// file or a block device. The image is parametrized by the params"},{"line_number":302,"context_line":"// argument. In case a regular file already exists at params.OutputPath,"},{"line_number":303,"context_line":"// the function will fail. It returns nil on success or an error, if one"},{"line_number":304,"context_line":"// did occur."},{"line_number":305,"context_line":"func Create(params *Params) (*efivarfs.BootEntry, error) {"},{"line_number":306,"context_line":"\t// Validate each parameter before use."},{"line_number":307,"context_line":"\tif params.OutputPath \u003d\u003d \"\" {"}],"source_content_type":"text/x-go","patch_set":17,"id":"c5cfc80e_ef88b67b","line":304,"range":{"start_line":303,"start_character":27,"end_line":304,"end_character":13},"updated":"2021-11-15 14:11:06.000000000","message":"nit: Now that we\u0027re also returning a BootEntry, mention it being returned.\n\n(can be on a separate change to not further block this one)","commit_id":"c6b3fd709fa061d88945fac48cdfd393e36e1190"},{"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":"9c5b2113d81a17cdbe1af1fc6c4dfd4dbac5e4e8","unresolved":true,"context_lines":[{"line_number":376,"context_line":"\tbe :\u003d efivarfs.BootEntry{"},{"line_number":377,"context_line":"\t\tDescription:     \"Metropolis\","},{"line_number":378,"context_line":"\t\tPath:            EFIPayloadPath,"},{"line_number":379,"context_line":"\t\tPartitionGUID:   t.(*gpt.Table).GUID,"},{"line_number":380,"context_line":"\t\tPartitionNumber: 1,"},{"line_number":381,"context_line":"\t\tPartitionStart:  esp.Start,"},{"line_number":382,"context_line":"\t\tPartitionSize:   esp.End - esp.Start,"}],"source_content_type":"text/x-go","patch_set":17,"id":"cb795ed9_855a4e1e","line":379,"range":{"start_line":379,"start_character":19,"end_line":379,"end_character":38},"updated":"2021-11-16 14:11:37.000000000","message":"I rechecked with EDK2 source and this is in fact a partition GUID, not a disk GUID.","commit_id":"c6b3fd709fa061d88945fac48cdfd393e36e1190"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"86198a2e4e68d6461e764556dba960745a4fa4a9","unresolved":false,"context_lines":[{"line_number":376,"context_line":"\tbe :\u003d efivarfs.BootEntry{"},{"line_number":377,"context_line":"\t\tDescription:     \"Metropolis\","},{"line_number":378,"context_line":"\t\tPath:            EFIPayloadPath,"},{"line_number":379,"context_line":"\t\tPartitionGUID:   t.(*gpt.Table).GUID,"},{"line_number":380,"context_line":"\t\tPartitionNumber: 1,"},{"line_number":381,"context_line":"\t\tPartitionStart:  esp.Start,"},{"line_number":382,"context_line":"\t\tPartitionSize:   esp.End - esp.Start,"}],"source_content_type":"text/x-go","patch_set":17,"id":"5dca71ee_3d810850","line":379,"range":{"start_line":379,"start_character":19,"end_line":379,"end_character":38},"in_reply_to":"cb795ed9_855a4e1e","updated":"2021-11-19 15:53:36.000000000","message":"Done","commit_id":"c6b3fd709fa061d88945fac48cdfd393e36e1190"},{"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":"9c5b2113d81a17cdbe1af1fc6c4dfd4dbac5e4e8","unresolved":true,"context_lines":[{"line_number":379,"context_line":"\t\tPartitionGUID:   t.(*gpt.Table).GUID,"},{"line_number":380,"context_line":"\t\tPartitionNumber: 1,"},{"line_number":381,"context_line":"\t\tPartitionStart:  esp.Start,"},{"line_number":382,"context_line":"\t\tPartitionSize:   esp.End - esp.Start,"},{"line_number":383,"context_line":"\t}"},{"line_number":384,"context_line":"\t// Close the image and return the EFI boot entry."},{"line_number":385,"context_line":"\tif err :\u003d diskImg.File.Close(); err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":17,"id":"8dc7e83c_316752ad","line":382,"range":{"start_line":382,"start_character":19,"end_line":382,"end_character":38},"updated":"2021-11-16 14:11:37.000000000","message":"Off-by-one: GUID partitions are inclusive of both boundaries. See Section 5.3.3 of the UEFI 2.9 spec.","commit_id":"c6b3fd709fa061d88945fac48cdfd393e36e1190"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"86198a2e4e68d6461e764556dba960745a4fa4a9","unresolved":false,"context_lines":[{"line_number":379,"context_line":"\t\tPartitionGUID:   t.(*gpt.Table).GUID,"},{"line_number":380,"context_line":"\t\tPartitionNumber: 1,"},{"line_number":381,"context_line":"\t\tPartitionStart:  esp.Start,"},{"line_number":382,"context_line":"\t\tPartitionSize:   esp.End - esp.Start,"},{"line_number":383,"context_line":"\t}"},{"line_number":384,"context_line":"\t// Close the image and return the EFI boot entry."},{"line_number":385,"context_line":"\tif err :\u003d diskImg.File.Close(); err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":17,"id":"552ebd9a_0d74281f","line":382,"range":{"start_line":382,"start_character":19,"end_line":382,"end_character":38},"in_reply_to":"8dc7e83c_316752ad","updated":"2021-11-19 15:53:36.000000000","message":"Done","commit_id":"c6b3fd709fa061d88945fac48cdfd393e36e1190"}]}
