{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":400340703,"defaultBranch":"main","name":"n2","ownerLogin":"evmar","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2021-08-27T00:20:54.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/3847?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1705861643.0","currentOid":""},"activityList":{"items":[{"before":"056985e0acd80b3404b509b1812ad7c3e0fe9a86","after":"a00b815b8ac75ef9a449d99f05b5699f6e57cb5e","ref":"refs/heads/main","pushedAt":"2024-07-16T15:34:21.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"fix another \\r\\n bug\n\nThe n2 handling of escapes around newlines is very unsatisfying and hacky.\nThe underlying issue is that I am not clear on the Ninja rules for when\nan escaped newline is allowed. One idea is that escapes only happen in file names\nor on the right side of variable definitions, while another is that you can escape\na newline anywhere in the text where you have a newline that you want to skip.\n\nIn particular, consider\n build$\n foo: ...\nis that legal because it's the token `build` followed by (escaped) whitespace\nfollowed by a filename, or illegal because we expect a space after `build`?\n\nIn any case this change preserves the existing n2 behavior, just making it\nconsistent in a test we already had but for \\r\\n newlines.","shortMessageHtmlLink":"fix another \\r\\n bug"}},{"before":"5c5011f5a52ca65f612eaac199ed243c5d107d97","after":"056985e0acd80b3404b509b1812ad7c3e0fe9a86","ref":"refs/heads/main","pushedAt":"2024-05-06T03:44:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"use cargo install --locked\n\nApparently `cargo install` means \"install using versions I've never tested\",\r\nwhile `cargo install --locked` means \"install using the versions I specified\".\r\n\r\nFixes #116.","shortMessageHtmlLink":"use cargo install --locked"}},{"before":"4c63be2c3cd2bcfacf7fa84b38130c3fc2714af9","after":"5c5011f5a52ca65f612eaac199ed243c5d107d97","ref":"refs/heads/main","pushedAt":"2024-05-06T03:44:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"fix command line argument order","shortMessageHtmlLink":"fix command line argument order"}},{"before":"15a580d2c17844859d35ed8d098f3ec32d1aa90b","after":"4c63be2c3cd2bcfacf7fa84b38130c3fc2714af9","ref":"refs/heads/main","pushedAt":"2024-05-06T03:36:26.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"use cargo install --locked\n\nApparently `cargo install` means \"install using versions I've never tested\",\r\nwhile `cargo install --locked` means \"install using the versions I specified\".\r\n\r\nFixes #116.","shortMessageHtmlLink":"use cargo install --locked"}},{"before":"8881a661ae63e1124eb47b45f08d9fa1225a5f00","after":"15a580d2c17844859d35ed8d098f3ec32d1aa90b","ref":"refs/heads/main","pushedAt":"2024-05-02T21:19:40.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"Remove dependency on filetime crate\n\nAndroid doesn't have the filetime crate vendored into the tree, but\nas of rust 1.75, the standard library has the ability to change\nfiletimes.","shortMessageHtmlLink":"Remove dependency on filetime crate"}},{"before":"668d9ab5cdbd493a8af356078066423487ac81e2","after":"8881a661ae63e1124eb47b45f08d9fa1225a5f00","ref":"refs/heads/main","pushedAt":"2024-03-05T19:03:57.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"Parse depfiles with multiple targets\n\nThis is needed for android. It just treats all the deps of all targets\nin the depfile as deps for the Build.\n\nIn task.rs there is a TODO to verify that the targets refer to the\noutputs of the Build, but adding that verification breaks the android\nbuild. In android's case, there are some depfiles that contain\n`foo.o: path/to/some/dep.asm` where it should instead be\n`path/to/foo.o: path/to/some/dep.asm`.","shortMessageHtmlLink":"Parse depfiles with multiple targets"}},{"before":"38899de2f32a5c8bb156f5180c6ba3156552124f","after":"668d9ab5cdbd493a8af356078066423487ac81e2","ref":"refs/heads/main","pushedAt":"2024-01-25T08:30:16.000Z","pushType":"pr_merge","commitsCount":4,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"Switch some HashMaps to FxHashMaps\n\nFxHashMap has a faster hashing algorithm,\nat the expense of not being resistent to DOS\nattacks.","shortMessageHtmlLink":"Switch some HashMaps to FxHashMaps"}},{"before":null,"after":"a56956387364fd6f9ecbd0b56d4cb1db4f7a0d5e","ref":"refs/heads/mmap-file-benchmark","pushedAt":"2024-01-21T18:27:23.000Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"benchmark for reading files","shortMessageHtmlLink":"benchmark for reading files"}},{"before":"909ac6087a2d74903c1d6c3772c7e3823d4b259a","after":"38899de2f32a5c8bb156f5180c6ba3156552124f","ref":"refs/heads/main","pushedAt":"2024-01-19T08:15:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"avoid clown shoes allocation of input files\n\nScanner expects its input to be nul terminated, which I implemented as\n buf = std::fs::read(file)\n buf.push(0)\n\nHowever, std::fs::read carefully sizes its buffer to be exactly the file's size,\nwhich means the push() must grow the buffer. This means for e.g. a 40mb input\nfile, we'd read it into a 40mb buffer, then grow the buffer, copying it into an\n80mb buffer, just to add one byte!\n\nFix this by using a buffer of the appropriate size.\n\nI attempted to measure the perf impact here and it wasn't measureable.\nPossibly this buffer growth really is that fast? It seems it will at least\nhave memory impact at least.","shortMessageHtmlLink":"avoid clown shoes allocation of input files"}},{"before":"78650f638cbaf1fb85a9be7e61f99e9c888f53fa","after":"909ac6087a2d74903c1d6c3772c7e3823d4b259a","ref":"refs/heads/main","pushedAt":"2024-01-18T19:03:50.000Z","pushType":"pr_merge","commitsCount":3,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"Evaluate build paths in the context of the build's bindings\n\nThis fixes an incompatibility with ninja.\n\nI've also moved a bunch of variable evaluations out of the\nparser and into the loader, in preparation for parsing the\nbuild file in multiple threads, and then only doing the\nevaluations after all the chunks of the file have been\nparsed.\n\nFixes #91 and #39.","shortMessageHtmlLink":"Evaluate build paths in the context of the build's bindings"}},{"before":"164529c77ff525bd62493d02094a81e3041566d2","after":"78650f638cbaf1fb85a9be7e61f99e9c888f53fa","ref":"refs/heads/main","pushedAt":"2024-01-10T16:24:24.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"drop git lfs\n\nIt's a needless burden for people who don't care about this snapshot.\nI switched to Google Drive for now, shruggie.\n\nFixes #105.","shortMessageHtmlLink":"drop git lfs"}},{"before":"cc45ae4a5d193522e40c05a219aaf464df8b0f6a","after":"164529c77ff525bd62493d02094a81e3041566d2","ref":"refs/heads/main","pushedAt":"2024-01-10T16:18:59.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"drop git lfs\n\nIt's a needless burden for people who don't care about this snapshot.\nI switched to Google Drive for now, shruggie.\n\nFixes #105.","shortMessageHtmlLink":"drop git lfs"}},{"before":"43cfa7fa15b6b5c24cdad9908b04800020fd8c83","after":"cc45ae4a5d193522e40c05a219aaf464df8b0f6a","ref":"refs/heads/main","pushedAt":"2024-01-08T23:59:59.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"Wait for out instead of regular_input\n\nThe test is supposed to ensure that out builds before validation_input.","shortMessageHtmlLink":"Wait for out instead of regular_input"}},{"before":"e3739d886f1afcc44c1aa1dbab1bbb1cf6127054","after":"43cfa7fa15b6b5c24cdad9908b04800020fd8c83","ref":"refs/heads/main","pushedAt":"2024-01-08T21:26:26.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"improve test for validation execution order\n\nThe test wanted to verify that in a file containing\n build foo: ... |@ bar\nit's possible for foo to finish before bar does.\n\nThis changes to the test to make the bar step wait (at runtime) for the\nfoo step to finish, enforcing that that ordering is possible.\n\nFixes #102.","shortMessageHtmlLink":"improve test for validation execution order"}},{"before":"438506aa01ce44d608db7a19ec08512ecd5c42eb","after":"e3739d886f1afcc44c1aa1dbab1bbb1cf6127054","ref":"refs/heads/main","pushedAt":"2024-01-08T21:25:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"improve test for validation execution order\n\nThe test wanted to verify that in a file containing\n build foo: ... |@ bar\nit's possible for foo to finish before bar does.\n\nThis changes to the test to make the bar step wait (at runtime) for the\nfoo step to finish, enforcing that that ordering is possible.\n\nFixes #102.","shortMessageHtmlLink":"improve test for validation execution order"}},{"before":"738e5641f169d96ac634c9437373a9ce4f1f6c61","after":"438506aa01ce44d608db7a19ec08512ecd5c42eb","ref":"refs/heads/main","pushedAt":"2024-01-08T21:07:21.000Z","pushType":"push","commitsCount":3,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"stat outputs of phony rules\n\nCMake has files that are outputs of a phony rule but still used as inputs.\n build ...: ... some_file\n build some_file: phony ...\n\nBefore this change, n2 would just mark all phony outputs as missing, which\nbreaks the above. This change instead makes phony a little closer to how\nnon-phony rules work which fixes #40 and which I hope is a benefit in general.\n\nFixes #40.","shortMessageHtmlLink":"stat outputs of phony rules"}},{"before":"81ebd8649dd2fd7de8fa8dd06c13ee5b62efb912","after":"738e5641f169d96ac634c9437373a9ce4f1f6c61","ref":"refs/heads/main","pushedAt":"2024-01-08T19:08:58.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"allow windows drive letters in depfiles\n\nSee bug report context in #98.\n\nFrom a patch from Tobias Hieta .","shortMessageHtmlLink":"allow windows drive letters in depfiles"}},{"before":"9f61521b322961edb56512d7baccdc3552b81d18","after":"81ebd8649dd2fd7de8fa8dd06c13ee5b62efb912","ref":"refs/heads/main","pushedAt":"2024-01-08T19:03:39.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"Treat missing depfile as a empty list of dependencies.\n\nCMake can sometimes write depfile directives to build.ninja\neven when no depfile is generated. This was handled by \"ninja\"\nby just ignoring the missing file and going on with the build,\nsee the code here:\n\nhttps://github.com/ninja-build/ninja/blob/master/src/build.cc#L894\n\nThis fixes #80","shortMessageHtmlLink":"Treat missing depfile as a empty list of dependencies."}},{"before":"81ebd8649dd2fd7de8fa8dd06c13ee5b62efb912","after":"9f61521b322961edb56512d7baccdc3552b81d18","ref":"refs/heads/main","pushedAt":"2024-01-08T18:58:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"allow windows drive letters in depfiles\n\nSee bug report context in #98.\n\nFrom a patch from Tobias Hieta .","shortMessageHtmlLink":"allow windows drive letters in depfiles"}},{"before":"02f95468632c7811395270283a0fd4fdcef8ec56","after":"81ebd8649dd2fd7de8fa8dd06c13ee5b62efb912","ref":"refs/heads/main","pushedAt":"2024-01-08T18:44:12.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"Treat missing depfile as a empty list of dependencies.\n\nCMake can sometimes write depfile directives to build.ninja\neven when no depfile is generated. This was handled by \"ninja\"\nby just ignoring the missing file and going on with the build,\nsee the code here:\n\nhttps://github.com/ninja-build/ninja/blob/master/src/build.cc#L894\n\nThis fixes #80","shortMessageHtmlLink":"Treat missing depfile as a empty list of dependencies."}},{"before":"d43e8ca9e3e540d31c588158bc51309187cb6a7f","after":"02f95468632c7811395270283a0fd4fdcef8ec56","ref":"refs/heads/main","pushedAt":"2024-01-08T18:34:44.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"Treat missing depfile as a empty list of dependencies.\n\nCMake can sometimes write depfile directives to build.ninja\neven when no depfile is generated. This was handled by \"ninja\"\nby just ignoring the missing file and going on with the build,\nsee the code here:\n\nhttps://github.com/ninja-build/ninja/blob/master/src/build.cc#L894\n\nThis fixes #80","shortMessageHtmlLink":"Treat missing depfile as a empty list of dependencies."}},{"before":"8cafbdaece75f0afa8bc345b4c6be4b493e0a945","after":"d43e8ca9e3e540d31c588158bc51309187cb6a7f","ref":"refs/heads/main","pushedAt":"2024-01-08T17:38:13.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"another pass at documenting variable scope","shortMessageHtmlLink":"another pass at documenting variable scope"}},{"before":"affbe50ca803b947d11d737194893f34999125b4","after":"8cafbdaece75f0afa8bc345b4c6be4b493e0a945","ref":"refs/heads/main","pushedAt":"2024-01-08T17:36:02.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"another pass at documenting variable scope","shortMessageHtmlLink":"another pass at documenting variable scope"}},{"before":"73f6444bbf96621acbf75aa542823497aeb30da2","after":"affbe50ca803b947d11d737194893f34999125b4","ref":"refs/heads/main","pushedAt":"2024-01-08T17:34:22.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"another pass at documenting variable scope","shortMessageHtmlLink":"another pass at documenting variable scope"}},{"before":"86774347351d519deefae46ef7c6ac2f8b11a510","after":"73f6444bbf96621acbf75aa542823497aeb30da2","ref":"refs/heads/main","pushedAt":"2024-01-07T23:43:15.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"another pass at documenting variable scope","shortMessageHtmlLink":"another pass at documenting variable scope"}},{"before":"c26761ec410c351a38499023b7cafd3adb9b9a54","after":"86774347351d519deefae46ef7c6ac2f8b11a510","ref":"refs/heads/main","pushedAt":"2024-01-04T21:19:05.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"design notes on variable scope","shortMessageHtmlLink":"design notes on variable scope"}},{"before":"48091ec676982accb43e18d9b151be7ffd81f677","after":"c26761ec410c351a38499023b7cafd3adb9b9a54","ref":"refs/heads/main","pushedAt":"2024-01-04T19:37:19.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"snapshots of llvm build artifacts","shortMessageHtmlLink":"snapshots of llvm build artifacts"}},{"before":"b6f2188dcfaa137ba875097b4948742d3be6557f","after":"48091ec676982accb43e18d9b151be7ffd81f677","ref":"refs/heads/main","pushedAt":"2024-01-04T19:32:40.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"snapshots of llvm build artifacts","shortMessageHtmlLink":"snapshots of llvm build artifacts"}},{"before":"d5cec949902ea8e3d91ea78654c39b7a7071aae0","after":"b6f2188dcfaa137ba875097b4948742d3be6557f","ref":"refs/heads/main","pushedAt":"2024-01-03T16:50:34.000Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"Canonicalize paths to '.' instead of an empty string\n\nIt's possible to have a ninja dep on '.', meaning the directory that\nninja was run from. Previously, canon_path_fast would canonicalize\nthis to an empty string, which would cause stats and other opterations\nto fail.\n\nThis was found when running the android codebase with n2.","shortMessageHtmlLink":"Canonicalize paths to '.' instead of an empty string"}},{"before":"0f89aa87a7ff0d9fd37fa84745948bf0ba657edd","after":"d5cec949902ea8e3d91ea78654c39b7a7071aae0","ref":"refs/heads/main","pushedAt":"2023-12-30T12:35:08.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"evmar","name":"Evan Martin","path":"/evmar","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/3847?s=80&v=4"},"commit":{"message":"attempt to deflake write_to_input test","shortMessageHtmlLink":"attempt to deflake write_to_input test"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAEgPJbsAA","startCursor":null,"endCursor":null}},"title":"Activity ยท evmar/n2"}