{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":507435090,"defaultBranch":"master","name":"avbroot","ownerLogin":"chenxiaolong","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2022-06-25T23:13:24.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/646253?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1725245399.0","currentOid":""},"activityList":{"items":[{"before":"040dcd1a5c9839a2ea237fee4fde5cfd1a6fb1fb","after":null,"ref":"refs/heads/exit","pushedAt":"2024-09-02T02:49:59.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"}},{"before":"41a578975f5a25f19766afce0fc2080b9d838cdc","after":"040dcd1a5c9839a2ea237fee4fde5cfd1a6fb1fb","ref":"refs/heads/master","pushedAt":"2024-09-02T02:49:56.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"Return ExitCode from main\n\nstd::process::exit() calls the exit syscall, which doesn't run\ndestructors. It doesn't matter for avbroot, but better to use ExitCode\nanyway.\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"Return ExitCode from main"}},{"before":null,"after":"040dcd1a5c9839a2ea237fee4fde5cfd1a6fb1fb","ref":"refs/heads/exit","pushedAt":"2024-09-02T02:37:38.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"Return ExitCode from main\n\nstd::process::exit() calls the exit syscall, which doesn't run\ndestructors. It doesn't matter for avbroot, but better to use ExitCode\nanyway.\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"Return ExitCode from main"}},{"before":"e9638d25b029def77137eaaba0020d7845fd7e0f","after":null,"ref":"refs/heads/sparse","pushedAt":"2024-09-01T06:23:19.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"}},{"before":"e25080ddef4fea688e40d6d069e7f62bc64799a9","after":"41a578975f5a25f19766afce0fc2080b9d838cdc","ref":"refs/heads/master","pushedAt":"2024-09-01T06:23:14.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"CHANGELOG.md: Add entry for PR #347\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"CHANGELOG.md: Add entry for PR #347"}},{"before":"243008b570d3226d6302630318b26df71ea3807d","after":"e9638d25b029def77137eaaba0020d7845fd7e0f","ref":"refs/heads/sparse","pushedAt":"2024-09-01T06:14:15.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"Add support for packing and unpacking Android sparse images\n\nThis supports all features of Android sparse images, including holes,\nand CRC32 (both full image checksum and CRC32 chunks).\n\nPartial sparse images, like those included in GrapheneOS' new optimized\nfactory images, can also be packed and unpacked with these new commands,\nunlike AOSP's simg2img and img2simg tools.\n\nThis new functionality is not relevant for avbroot's main use case, but\nis useful for unpacking certain factory images for comparison with OTAs\nduring troubleshooting.\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"Add support for packing and unpacking Android sparse images"}},{"before":null,"after":"243008b570d3226d6302630318b26df71ea3807d","ref":"refs/heads/sparse","pushedAt":"2024-09-01T05:45:17.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"Add support for packing and unpacking Android sparse images\n\nThis supports all features of Android sparse images, including holes,\nand CRC32 (both full image checksum and CRC32 chunks).\n\nPartial sparse images, like those included in GrapheneOS' new optimized\nfactory images, can also be packed and unpacked with these new commands,\nunlike AOSP's simg2img and img2simg tools.\n\nThis new functionality is not relevant for avbroot's main use case, but\nis useful for unpacking certain factory images for comparison with OTAs\nduring troubleshooting.\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"Add support for packing and unpacking Android sparse images"}},{"before":"8ca1a289a8111da76ac0cc25ec64fdb2b051f643","after":"e25080ddef4fea688e40d6d069e7f62bc64799a9","ref":"refs/heads/master","pushedAt":"2024-08-31T16:43:49.000Z","pushType":"pr_merge","commitsCount":2,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"Merge pull request #346 from bugreportion/patch-1\n\nREADME.ru.md: update translation","shortMessageHtmlLink":"Merge pull request #346 from bugreportion/patch-1"}},{"before":"dfbc2f807fcd2e17c08e4305790020ba65f3249d","after":"8ca1a289a8111da76ac0cc25ec64fdb2b051f643","ref":"refs/heads/master","pushedAt":"2024-08-30T23:14:16.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"README.md: Split setting ANDROID_PRODUCT_OUT env var to separate step\n\nAlso add examples for powershell and cmd instead of assuming bash\nsyntax.\n\nFixes: #340\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"README.md: Split setting ANDROID_PRODUCT_OUT env var to separate step"}},{"before":"e55cf3d6790802207b9d1edf75e2deccb788177f","after":null,"ref":"refs/heads/lp","pushedAt":"2024-08-28T22:37:51.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"}},{"before":"7c38c5609b2f4f8fd2f86a7766e024791b2bd181","after":"dfbc2f807fcd2e17c08e4305790020ba65f3249d","ref":"refs/heads/master","pushedAt":"2024-08-28T22:37:47.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"CHANGELOG.md: Add entry for PR #343\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"CHANGELOG.md: Add entry for PR #343"}},{"before":null,"after":"e55cf3d6790802207b9d1edf75e2deccb788177f","ref":"refs/heads/lp","pushedAt":"2024-08-28T22:32:07.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"lp: Sparse files are not required when packing and unpacking empty images\n\nEmpty images don't contain any extent metadata so the partition sizes\nare just discarded.\n\nDon't write parsers when you're tired, folks!\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"lp: Sparse files are not required when packing and unpacking empty im…"}},{"before":"13c910274eeef4e5b2ce8e7ad838eadd47b1ef92","after":null,"ref":"refs/heads/lp","pushedAt":"2024-08-28T03:58:26.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"}},{"before":"dd40f64918c3ab43e9f1420c92d9b9ab2108f22c","after":"7c38c5609b2f4f8fd2f86a7766e024791b2bd181","ref":"refs/heads/master","pushedAt":"2024-08-28T03:58:22.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"CHANGELOG.md: Add entry for PR #342\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"CHANGELOG.md: Add entry for PR #342"}},{"before":null,"after":"13c910274eeef4e5b2ce8e7ad838eadd47b1ef92","ref":"refs/heads/lp","pushedAt":"2024-08-28T03:35:48.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"Add support for packing and unpacking logical partition images\n\nThis supports both empty and normal LP images, including those that span\nmultiple files/devices.\n\nCurrently, repacked files are semantically equivalent, but not exactly\nidentical. avbroot's data structure for the metadata does not preserve\nthe arbitrary partition ordering of the LP image. Instead, to make the\nAPI a bit nicer, it only preserves the relative partition ordering\nwithin partition groups.\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"Add support for packing and unpacking logical partition images"}},{"before":"7113fb32efc9d1db5c76529d28317fcd3e42ebcb","after":null,"ref":"refs/heads/seekable","pushedAt":"2024-08-21T01:38:06.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"}},{"before":"9c9d656ea2902e5154c09f340d14bb59594a0ce6","after":"dd40f64918c3ab43e9f1420c92d9b9ab2108f22c","ref":"refs/heads/master","pushedAt":"2024-08-21T01:38:02.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"CHANGELOG.md: Add entry for PR #337\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"CHANGELOG.md: Add entry for PR #337"}},{"before":"f6f2c18a2295e437df8daacfb71582537989c3e8","after":"7113fb32efc9d1db5c76529d28317fcd3e42ebcb","ref":"refs/heads/seekable","pushedAt":"2024-08-21T01:31:40.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"Add support for outputting zip files with no data descriptors\n\nThis commit adds a new `--zip-mode` parameter to `avbroot ota patch` to\ncontrol whether the patched OTA zip is written with data descriptors or\nnot. By default, the `streaming` mode is used, which matches the current\nbehavior where the zip is hashed for signing as it is being written. The\nnew `seekable` mode fully writes the zip before rereading it to hash the\ncontents.\n\nThe new mode is useful for devices with broken zip parsers that fail to\nproperly handle data descriptors.\n\nAll of the end-to-end tests have been duplicated to test both modes.\n\nAdding the seekable mode necessitated a couple other changes:\n\n* BufWriter is no longer used. Type erasure is very painful in Rust, so\n we need to keep the writer types the same for both the streaming and\n seekable modes. BufWriter is unusable in the seekable mode because we\n need to be able to read back what was written, which isn't supported.\n\n* HolePunchingWriter has been removed. It was a simple way to produce\n sparse files by seeking whenever a write buffer consists fully of\n zeros. When combined with BufWriter, there was previously never a\n situation where this was undesirable. However, with the new seekable\n mode and the zip library's pattern of writing one field at a time, the\n final 2 zero bytes (representing an empty archive comment) is never\n written and the file size is not increased either.\n\n Removing this is not a big deal since we no longer use stripped OTAs\n for the end-to-end tests. Those were really the only OTAs that\n benefitted from sparse files. A real OTA has very few zero bytes due\n to compression.\n\nIssue: #328\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"Add support for outputting zip files with no data descriptors"}},{"before":null,"after":"f6f2c18a2295e437df8daacfb71582537989c3e8","ref":"refs/heads/seekable","pushedAt":"2024-08-20T01:01:56.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"Add support for outputting zip files with no data descriptors\n\nThis commit adds a new `--zip-mode` parameter to `avbroot ota patch` to\ncontrol whether the patched OTA zip is written with data descriptors or\nnot. By default, the `streaming` mode is used, which matches the current\nbehavior where the zip is hashed for signing as it is being written. The\nnew `seekable` mode fully writes the zip before rereading it to hash the\ncontents.\n\nThe new mode is useful for devices with broken zip parsers that fail to\nproperly handle data descriptors.\n\nAll of the end-to-end tests have been duplicated to test both modes.\n\nAdding the seekable mode necessitated a couple other changes:\n\n* BufWriter is no longer used. Type erasure is very painful in Rust, so\n we need to keep the writer types the same for both the streaming and\n seekable modes. BufWriter is unusable in the seekable mode because we\n need to be able to read back what was written, which isn't supported.\n\n* HolePunchingWriter has been removed. It was a simple way to produce\n sparse files by seeking whenever a write buffer consists fully of\n zeros. When combined with BufWriter, there was previously never a\n situation where this was undesirable. However, with the new seekable\n mode and the zip library's pattern of writing one field at a time, the\n final 2 zero bytes (representing an empty archive comment) is never\n written and the file size is not increased either.\n\n Removing this is not a big deal since we no longer use stripped OTAs\n for the end-to-end tests. Those were really the only OTAs that\n benefitted from sparse files. A real OTA has very few zero bytes due\n to compression.\n\nIssue: #328\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"Add support for outputting zip files with no data descriptors"}},{"before":"e06674a7f0d06bb6e11b54a9848c90d102140d0e","after":null,"ref":"refs/heads/tty","pushedAt":"2024-08-19T19:03:33.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"}},{"before":"cf5ef13e4726ade531161c0762986e4300bad4c9","after":"9c9d656ea2902e5154c09f340d14bb59594a0ce6","ref":"refs/heads/master","pushedAt":"2024-08-19T19:03:29.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"CHANGELOG.md: Add entry for PR #336\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"CHANGELOG.md: Add entry for PR #336"}},{"before":null,"after":"e06674a7f0d06bb6e11b54a9848c90d102140d0e","ref":"refs/heads/tty","pushedAt":"2024-08-19T18:57:58.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"Print a useful error message when there's no TTY for a password prompt\n\nENXIO (No such device or address) and ENOTTY (Inappropriate ioctl for\ndevice) are not very user-friendly error messages.\n\nIssue: https://github.com/chenxiaolong/my-avbroot-setup/issues/2\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"Print a useful error message when there's no TTY for a password prompt"}},{"before":"d2db8a1365541e11f9ba4f1f8d81006d723824c2","after":null,"ref":"refs/heads/what-is-tty","pushedAt":"2024-08-19T17:13:06.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"}},{"before":null,"after":"d2db8a1365541e11f9ba4f1f8d81006d723824c2","ref":"refs/heads/what-is-tty","pushedAt":"2024-08-19T17:12:14.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"what is /dev/tty in github actions","shortMessageHtmlLink":"what is /dev/tty in github actions"}},{"before":"5fada419cb62c7d92b75df92fbaa7b06b10a056a","after":"cf5ef13e4726ade531161c0762986e4300bad4c9","ref":"refs/heads/master","pushedAt":"2024-08-19T04:03:55.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"Version 3.6.0\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"Version 3.6.0"}},{"before":"eeea9f41b4635ccdfc9d03d74a4eb3e1977dc5c2","after":null,"ref":"refs/heads/log-level","pushedAt":"2024-08-19T04:03:12.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"}},{"before":"0bebf120c6f23d71d495565694c634c3914f3f5c","after":"5fada419cb62c7d92b75df92fbaa7b06b10a056a","ref":"refs/heads/master","pushedAt":"2024-08-19T04:03:09.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"CHANGELOG.md: Add entry for PR #335\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"CHANGELOG.md: Add entry for PR #335"}},{"before":null,"after":"eeea9f41b4635ccdfc9d03d74a4eb3e1977dc5c2","ref":"refs/heads/log-level","pushedAt":"2024-08-19T03:58:25.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"cli/args: Use tracing::Level directly\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"cli/args: Use tracing::Level directly"}},{"before":"264c602fdb1eaa42e1146260222f1e3f89278c8c","after":null,"ref":"refs/heads/mutex","pushedAt":"2024-08-19T03:57:48.000Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"}},{"before":"343e2e279c5f8209a80d92ed5140497e8865b2af","after":"0bebf120c6f23d71d495565694c634c3914f3f5c","ref":"refs/heads/master","pushedAt":"2024-08-19T03:57:43.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"chenxiaolong","name":"Andrew Gunnerson","path":"/chenxiaolong","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/646253?s=80&v=4"},"commit":{"message":"CHANGELOG.md: Add entry for PR #334\n\nSigned-off-by: Andrew Gunnerson ","shortMessageHtmlLink":"CHANGELOG.md: Add entry for PR #334"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEqiRu3QA","startCursor":null,"endCursor":null}},"title":"Activity · chenxiaolong/avbroot"}