{"push_id":1102158893,"size":54,"distinct_size":49,"ref":"refs/heads/stable","head":"7178d9dcadfddcdac5474c1a8801d55213df65e5","before":"a6802e4d6b5f6ac4ada2256de27effa2b7189d0a","commits":[{"sha":"0b37f385b8cd0d36c1d143949bb67d89465fbf94","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Fix build for a test case with no test data.\n\nBroken in rPHUcde5e8a0fbb260dbfff2cc656dfcbc05d9b199a2.\n\nI'm just not requiring tests to have a JSON blob of the output tree. In this\ntest, failure is \"crash\". If it passes the test is good.","distinct":false,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/0b37f385b8cd0d36c1d143949bb67d89465fbf94"},{"sha":"9380454298b00b3187901f4879a4b6e61b2ba2e1","author":{"email":"c028c213ed5efcf30c3f4fc7361dbde0c893c5b7@freelancer.com","name":"Joshua Spence"},"message":"Remove `asp_tags` from XHPAST\n\nSummary: This is hardcoded to `false` anyway.\n\nTest Plan: Ran unit tests.\n\nReviewers: #blessed_reviewers, epriestley\n\nReviewed By: #blessed_reviewers, epriestley\n\nSubscribers: Korvin\n\nDifferential Revision: https://secure.phabricator.com/D14649","distinct":false,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/9380454298b00b3187901f4879a4b6e61b2ba2e1"},{"sha":"230c3e161c9ad7ee920d003b53e7c4a473a46207","author":{"email":"c028c213ed5efcf30c3f4fc7361dbde0c893c5b7@freelancer.com","name":"Joshua Spence"},"message":"Linter fixes\n\nSummary: Minor linter fixes.\n\nTest Plan: N/A\n\nReviewers: #blessed_reviewers, epriestley\n\nReviewed By: #blessed_reviewers, epriestley\n\nSubscribers: Korvin\n\nDifferential Revision: https://secure.phabricator.com/D14628","distinct":false,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/230c3e161c9ad7ee920d003b53e7c4a473a46207"},{"sha":"4a09be9ffd4a696f42e49785951636f9cdade94d","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Read profile images from Google OAuth correctly\n\nSummary: Fixes T9972. Not sure if this was always a bug or the API changed. There's also a \"url\" we can use now.\n\nTest Plan:\nRefreshed a Google OAuth account link, got a profile picture:\n\n{F1022907}\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T9972\n\nDifferential Revision: https://secure.phabricator.com/D14753","distinct":false,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/4a09be9ffd4a696f42e49785951636f9cdade94d"},{"sha":"e0dd9c4efda10888596e6a3cbed59253be3a4a30","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Fix an issue with removing bytes in PhutilRope\n\nSummary: Via HackerOne, although this is not a security issue. PhutilRope does have a bug with byte handling, though.\n\nTest Plan: Added a failing test and made it pass.\n\nReviewers: chad\n\nReviewed By: chad\n\nDifferential Revision: https://secure.phabricator.com/D14801","distinct":false,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/e0dd9c4efda10888596e6a3cbed59253be3a4a30"},{"sha":"b0843cba1270983c9dabbc00af47d8016ffdabc4","author":{"email":"c34c009102e60d77975598e1f414f8a701c22d0b@chadsdomain.com","name":"Chad Little"},"message":"Add more useful languages\n\nSummary: Adds another variation of English for future use.\n\nTest Plan: See new options in Phabricator Settings\n\nReviewers: epriestley\n\nReviewed By: epriestley\n\nSubscribers: Korvin\n\nDifferential Revision: https://secure.phabricator.com/D14826","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/b0843cba1270983c9dabbc00af47d8016ffdabc4"},{"sha":"14765d36f83acac0a109a047244aaa6fd8e081ea","author":{"email":"c028c213ed5efcf30c3f4fc7361dbde0c893c5b7@freelancer.com","name":"Joshua Spence"},"message":"Don't throw `PhutilMissingSymbolException` from within `method_exists` and `property_exists` calls\n\nSummary: Ref T1116. Fixes T9954. It seems that `method_exists` and `propery_exists` can trigger PHP autoloaders as well.\n\nTest Plan: Fixed the issue described in T9954.\n\nReviewers: #blessed_reviewers, epriestley\n\nReviewed By: #blessed_reviewers, epriestley\n\nSubscribers: Korvin\n\nManiphest Tasks: T1116, T9954\n\nDifferential Revision: https://secure.phabricator.com/D14860","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/14765d36f83acac0a109a047244aaa6fd8e081ea"},{"sha":"a654742b2100503df00254752740455e40b72d01","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"(stable) Promote 2015 Week 52","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/a654742b2100503df00254752740455e40b72d01"},{"sha":"5afd762dc09c2169b2c8e9e9dcef23bc703d4956","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Fix an issue where subprocesses could have data left on stdout/stderr\n\nSummary:\nRef T9724. This is likely a fix for that issue, which could cause hangs on `git clone` and similar requests.\n\nIt appears that we were sometimes leaving data on the subprocess pipes. Specifically, here's what would happen:\n\n  - we'd have full or nearly-full read buffers on the ExecFuture;\n  - we'd update the subprocess;\n  - it would read only some of the data, but not be able to read everything (since the buffers were full, or became full after reading a little bit);\n  - however, since the subprocess //had// exited, we'd terminate the subprocess and close everything down.\n\nIn this situation, we would never read the final bytes off `stdout` or `stderr`.\n\nThis could lead to `git clone` correctly hanging, waiting for those last few bytes, which would never come.\n\nTest Plan:\n  - Ran `git clone ...` against a large repository (Phabricator) in a loop for a long time.\n  - Before the patch, it would very occasionally hang randomly, on the \"Receiving objects: ...\" step (on my local install, I could get this maybe 2-3% of the time?)\n  - After the patch, I can't get it to hang anymore and have been running it for ~10x longer than it ever needed before.\n\nBeyond this, I added a bunch of debugging/logging which seemed to confirm that my analysis/fix are correct. Specifically:\n\n  - I added a log when we were tearing down the process to see if either stdout or stderr were not `feof()`'d. When things hung, this message logged; normally, it did not.\n  - I added logging to show the final bytes read from the subprocess and the final bytes sent to the client. The correct final bytes look something like `...\\002Total 190735 (delta 132738), reused 186896 (delta 129329)\\n0000`. When the error occurred, different final bytes were observed.\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T9724\n\nDifferential Revision: https://secure.phabricator.com/D14920","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/5afd762dc09c2169b2c8e9e9dcef23bc703d4956"},{"sha":"adb8a9c074ba41b9566d340db4e3599bcf097958","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Fix a typo in documentation\n\nSummary: `fpipe()` is not a real thing, this should be `fwrite()`.\n\nTest Plan: Reading.\n\nReviewers: chad\n\nReviewed By: chad\n\nDifferential Revision: https://secure.phabricator.com/D14921","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/adb8a9c074ba41b9566d340db4e3599bcf097958"},{"sha":"7b8d38cd2d4e85edcfebfe5bf60846afd1044e0f","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"(stable) Fix an issue where subprocesses could have data left on stdout/stderr\n\nSummary:\nRef T9724. This is likely a fix for that issue, which could cause hangs on `git clone` and similar requests.\n\nIt appears that we were sometimes leaving data on the subprocess pipes. Specifically, here's what would happen:\n\n  - we'd have full or nearly-full read buffers on the ExecFuture;\n  - we'd update the subprocess;\n  - it would read only some of the data, but not be able to read everything (since the buffers were full, or became full after reading a little bit);\n  - however, since the subprocess //had// exited, we'd terminate the subprocess and close everything down.\n\nIn this situation, we would never read the final bytes off `stdout` or `stderr`.\n\nThis could lead to `git clone` correctly hanging, waiting for those last few bytes, which would never come.\n\nTest Plan:\n  - Ran `git clone ...` against a large repository (Phabricator) in a loop for a long time.\n  - Before the patch, it would very occasionally hang randomly, on the \"Receiving objects: ...\" step (on my local install, I could get this maybe 2-3% of the time?)\n  - After the patch, I can't get it to hang anymore and have been running it for ~10x longer than it ever needed before.\n\nBeyond this, I added a bunch of debugging/logging which seemed to confirm that my analysis/fix are correct. Specifically:\n\n  - I added a log when we were tearing down the process to see if either stdout or stderr were not `feof()`'d. When things hung, this message logged; normally, it did not.\n  - I added logging to show the final bytes read from the subprocess and the final bytes sent to the client. The correct final bytes look something like `...\\002Total 190735 (delta 132738), reused 186896 (delta 129329)\\n0000`. When the error occurred, different final bytes were observed.\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T9724\n\nDifferential Revision: https://secure.phabricator.com/D14920","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/7b8d38cd2d4e85edcfebfe5bf60846afd1044e0f"},{"sha":"f5120574826088cba45c5ed4c2c05be4cbacbc86","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"(stable) Promote 2016 Week 2","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/f5120574826088cba45c5ed4c2c05be4cbacbc86"},{"sha":"0ca806c9e0dc10979c4729e3804a27c676873511","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Implement AWS v4 signature API\n\nSummary:\nRef T5155. AWS introduced a hugely more-complicated \"v4\" API at some point, which all (I hope??) services now use.\n\nI implemented it by following this document:\n\nhttp://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html\n\nTest Plan:\n  - Implemented all the examples in the document above as unit tests.\n  - Ran unit tests.\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T5155\n\nDifferential Revision: https://secure.phabricator.com/D14978","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/0ca806c9e0dc10979c4729e3804a27c676873511"},{"sha":"d6744fb7156134a5b46f818b3bd72c94fdebc1af","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Implement `bin/aws-s3 get ...` and a basic S3 client API\n\nSummary: Ref T5155. This implements pulling file data off S3 using a first-party, Signature v4-compatible API.\n\nTest Plan: {F1057744}\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T5155\n\nDifferential Revision: https://secure.phabricator.com/D14979","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/d6744fb7156134a5b46f818b3bd72c94fdebc1af"},{"sha":"0fa7efbf09d75b7803ef54bd6c72ee3c69a964e4","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Implement Amazon S3 put and delete methods\n\nSummary: Ref T5155. This adds `bin/aws-s3 put` and `bin/aws-s3 delete` methods and the underlying APIs.\n\nTest Plan:\n  - Uploaded some shibes.\n  - Downloaded some shibes.\n  - Verified hashes were the same.\n  - Deleted a shibe. :(\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T5155\n\nDifferential Revision: https://secure.phabricator.com/D14980","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/0fa7efbf09d75b7803ef54bd6c72ee3c69a964e4"},{"sha":"c3fd3a8bb2c319982279ead972354c8bf760145c","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"fix bug\n\nSummary: big bug\n\nTest Plan: !!!!!\n\nReviewers: chad\n\nReviewed By: chad\n\nDifferential Revision: https://secure.phabricator.com/D15025","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/c3fd3a8bb2c319982279ead972354c8bf760145c"},{"sha":"f10d2a5325354b2a98a46e80929c81bbe07afe9d","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"(stable) Promote 2016 Week 3","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/f10d2a5325354b2a98a46e80929c81bbe07afe9d"},{"sha":"b4edc1af066d881e4c1b28b865af179560d0698b","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Give PhutilRope and LinesOfALarge a couple new capabilities\n\nSummary:\nRef T10186. To fix that, I need to stream files out of commands like `git cat` directly into file storage.\n\nThis adds two capabilities to support this:\n\n  - LinesOfALarge can now just ignore delimiters and stream all the data directly.\n  - PhutilRope can now produce a prefix of a specific length (this is used to produce a chunk-sized prefix).\n\nTest Plan: See next revision.\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T10186\n\nDifferential Revision: https://secure.phabricator.com/D15071","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/b4edc1af066d881e4c1b28b865af179560d0698b"},{"sha":"f43291e99d36045bc459e5133454c0d8fd8768ea","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Distinguish more carefully between different kinds of MySQL connection errors\n\nSummary:\nRef T10195. Root issue: if the MySQL user doesn't have permission to access all the databases, we give them a fairly generic error instead of telling them exactly what's wrong.\n\nCurrently, we throw a generic exception on connection failure. Instead, throw a more granular one, and distinguish between bad credentials and no access.\n\nTest Plan: See next revision.\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T10195\n\nDifferential Revision: https://secure.phabricator.com/D15078","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/f43291e99d36045bc459e5133454c0d8fd8768ea"},{"sha":"9c472e7c9b64395424c6cd25734bf239cb3c113d","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"(stable) Promote 2016 Week 4","distinct":true,"url":"https://api.github.com/repos/barcelonascience/libphutil/commits/9c472e7c9b64395424c6cd25734bf239cb3c113d"}]}