{"push_id":969903354,"size":965,"distinct_size":965,"ref":"refs/heads/urz/stable","head":"76ac01642dea09719700801e9050660f8b0fb243","before":"4b4b27fc69aea6078cab87ba072fe536a2039810","commits":[{"sha":"3ef270b2926eabe16f9efb9bed6912c0dba206e7","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Allow transaction publishers to pass binary data to workers\n\nSummary:\nRef T8672. Ref T9187. Root issue in at least one case is:\n\n  - User makes a commit including a file with some non-UTF8 text (say, a Japanese file full of Shift-JIS).\n  - We pass the file to the TransactionEditor so it can inline or attach the patch if the server is configured for these things.\n    - When inlining patches, we convert them to UTF8 before inlining. We must do this since the rest of the mail is UTF8.\n    - When attaching patches, we send them in the original encoding (as file attachments). This is correct, and means we need to give the worker the raw patch in whatever encoding it was originally in: we can't just convert it to utf8 earlier, or we'd attach the wrong patch in some cases.\n  - TransactionEditor does its thing (e.g., creates the commit), then gets ready to send mail about whatever it did.\n  - The publishing work now happens in the daemon queue, so we prepare to queue a PublishWorker and pass it the patch (with some other data).\n  - When we queue workers, we serialize the state data with JSON.\n\nSo far, so good. But this is where things go wrong:\n\n  - JSON can't encode binary data, and can't encode Shift-JIS. The encoding silently fails and we ignore it.\n\nThen we get to the worker, and things go wrong-er:\n\n  - Since the data is bad, we fatal. This isn't a permanent failure, so we continue retrying the task indefinitely.\n\nThis applies several fixes:\n\n  # When queueing tasks, fail loudly when JSON encoding fails.\n  # In the worker, fail permanently when data can't be decoded.\n  # Allow Editors to specify that some of their data is binary and needs special handling.\n\nThis is fairly messy, but some simpler alternatives don't seem like good ways forward:\n\n  - We can't convert to UTF8 earlier, because we need the original raw patch when adding it as an attachment.\n  - We could encode //only// this field, but I suspect some other fields will also need attention, so that adding a mechanism will be worthwhile. In particular, I suspect filenames //may// be causing a similar problem in some cases.\n  - We could convert task data to always use a serialize()-based binary safe encoding, but this is a larger change and I think it's correct that things are UTF8 by default, even if it makes a bit of a mess. I'd rather have an explicit mess like this than a lot of binary data floating around.\n\nThe change to make `LiskDAO` will almost certainly catch some other problems too, so I'm going to hold this until after `stable` is cut. These problems were existing problems (i.e., the code was previously breaking or destroying data) so it's definitely correct to catch them, but this will make the problems much more obvious/urgent than they previously were.\n\nTest Plan:\n  - Created a commit with a bunch of Shift-JIS stuff in a file.\n  - Tried to import it.\n\nPrior to patch:\n\n  - Broken PublishWorker with distant, irrelevant error message.\n\nWith patch partially applied (only new error checking):\n\n  - Explicit, local error message about bad key in serialized data.\n\nWith patch fully applied:\n\n  - Import went fine and mail generated.\n\nReviewers: chad\n\nReviewed By: chad\n\nSubscribers: devurandom, nevogd\n\nManiphest Tasks: T8672, T9187\n\nDifferential Revision: https://secure.phabricator.com/D13939","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/3ef270b2926eabe16f9efb9bed6912c0dba206e7"},{"sha":"b5672e7e55bd9f9a90f7971f4808d19474b3febc","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Add a main page to Nuance\n\nSummary: Ref T8783. There's nothing at `/nuance/` right now, put something basic there.\n\nTest Plan: {F747078}\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T8783\n\nDifferential Revision: https://secure.phabricator.com/D13965","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/b5672e7e55bd9f9a90f7971f4808d19474b3febc"},{"sha":"5caeb5c4db9982324f831bbb4b0c53acef57708e","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Allow Nuance source definitions to add actions to source views\n\nSummary:\nRef T8783. If you have a source (like a \"report bug\" form), let it put a link (like \"View Form\") on the source detail page.\n\nThis also straightens out getting definitions from sources, which had a bug with the modern way we do `PhutilClassMapQuery`.\n\nSpecifically, if you called the old mechanism on two different sources, they'd return the same definition object, but they need to return different definitions.\n\nTest Plan:\n{F747093}\n\n{F747092}\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T8783\n\nDifferential Revision: https://secure.phabricator.com/D13966","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/5caeb5c4db9982324f831bbb4b0c53acef57708e"},{"sha":"459e0d2fa3f8989bc1470138ef638604ece61d1d","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Tune document details in Legalpad\n\nSummary:\nFixes T9245. These picked up some possibly-confusing metadata, like in the screenshot on T9245 where \"Subscribers\" appears in the middle of the page for no obvious reason.\n\n  - Make these pages a little cleaner by removing elements which aren't important for signing agreements.\n  - Use the last time the actual document text was updated as the modification time, not the last time the \"Document\" object was modified. The latter will change for trivial things like altering the view/edit policy, but that could be confusing if you see that a TOS was \"last updated yesterday\" but can't figure out what actually changed (since nothing changed).\n\nTest Plan: Viewed signature page for a document.\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T9245\n\nDifferential Revision: https://secure.phabricator.com/D13982","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/459e0d2fa3f8989bc1470138ef638604ece61d1d"},{"sha":"9e3f3e692d7f941a35ab6174d81358f1d42a9248","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Use didRejectResult() when querying workboard columns\n\nSummary: Fixes T9250. Ref T4345.\n\nTest Plan:\nFaked a policy error:\n\n{F748975}\n\nReviewers: joshuaspence, chad\n\nReviewed By: chad\n\nManiphest Tasks: T4345, T9250\n\nDifferential Revision: https://secure.phabricator.com/D13981","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/9e3f3e692d7f941a35ab6174d81358f1d42a9248"},{"sha":"c69d4658918c10d4f26fe5844fd219667d8e5799","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Add basic \"View\" and \"Edit\" features to Nuance\n\nSummary:\nRef T8783.\n\nThe \"View\" UI is where a user would check their request for feedback or a resolution, if it's something that makes sense for them to interact with from the web UI.\n\nThe \"Edit\" UI is the manage/admin UI where you'd respond to a request. It's similar to the view UI but will have actions and eventually some queue UI, etc.\n\n(I don't think items need a normal \"Edit\" UI -- it doesn't make sense to \"Edit\" a tweet or inbound email -- but maybe this will shuffle around a little eventually.)\n\nTest Plan:\nView\n\n{F747218}\n\nEdit\n\n{F747219}\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T8783\n\nDifferential Revision: https://secure.phabricator.com/D13980","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/c69d4658918c10d4f26fe5844fd219667d8e5799"},{"sha":"254b394f2c2b299e29f8a16f93aa80488028afe7","author":{"email":"7f6516e627669864f1dab8cfad9f043da1f2c430@redpointsoftware.com.au","name":"June Rhodes"},"message":"Associate Harbormaster build target with leases\n\nSummary: Ref T1049.  This ensures the Harbormaster build target is associated with leases, so in the future we can query things and find out whether builds are still running with associated leases.\n\nTest Plan: Leased a host, checked the DB and saw the field populated.\n\nReviewers: #blessed_reviewers, epriestley\n\nReviewed By: #blessed_reviewers, epriestley\n\nSubscribers: joshuaspence, Korvin, epriestley\n\nManiphest Tasks: T1049\n\nDifferential Revision: https://secure.phabricator.com/D10870","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/254b394f2c2b299e29f8a16f93aa80488028afe7"},{"sha":"ea3d528c4c8f2e7a05494af9478c4302aa462604","author":{"email":"7f6516e627669864f1dab8cfad9f043da1f2c430@redpointsoftware.com.au","name":"June Rhodes"},"message":"Show time on Drydock logs\n\nSummary: Show the time in addition to the date in the Drydock logs.\n\nTest Plan: Brought forward from D10479.\n\nReviewers: epriestley, #blessed_reviewers\n\nReviewed By: epriestley, #blessed_reviewers\n\nSubscribers: joshuaspence, Korvin, epriestley\n\nDifferential Revision: https://secure.phabricator.com/D10909","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/ea3d528c4c8f2e7a05494af9478c4302aa462604"},{"sha":"0d4f9363a0f2b4141e922e82117d3e0194bbb57a","author":{"email":"7f6516e627669864f1dab8cfad9f043da1f2c430@redpointsoftware.com.au","name":"June Rhodes"},"message":"Improve Drydock log search engine\n\nSummary: Ref T2015.  This allows searching based on blueprints, resources or leases when viewing the logs, which helps when searching for events that occured to a particular blueprint / resource / lease.  Unlike the logs shown on the resource / lease pages, the search engine supports paging properly, which means it can be used to find entries in the past.\n\nTest Plan: Used the Drydock log search page.\n\nReviewers: epriestley, #blessed_reviewers\n\nReviewed By: epriestley, #blessed_reviewers\n\nSubscribers: joshuaspence, Korvin, epriestley\n\nManiphest Tasks: T2015\n\nDifferential Revision: https://secure.phabricator.com/D10874","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/0d4f9363a0f2b4141e922e82117d3e0194bbb57a"},{"sha":"e55a197dd6833d658a6065e676e6246c5b4ce69f","author":{"email":"7f6516e627669864f1dab8cfad9f043da1f2c430@redpointsoftware.com.au","name":"June Rhodes"},"message":"Fix issues where Drydock queries didn't work correctly with empty arrays\n\nSummary: Ref T2015.  This fixes issues where the Drydock queries wouldn't filter (or throw an exception) when passed empty arrays for their `with` methods.  In addition, this also adds `array_unique` to the resource and lease subqueries so that we don't pull in a bunch of stuff if logs or leases have the same related objects.\n\nTest Plan: Tested it by using DarkConsole on the log controller.\n\nReviewers: epriestley, #blessed_reviewers\n\nReviewed By: epriestley, #blessed_reviewers\n\nSubscribers: joshuaspence, Korvin, epriestley\n\nManiphest Tasks: T2015\n\nDifferential Revision: https://secure.phabricator.com/D10879","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/e55a197dd6833d658a6065e676e6246c5b4ce69f"},{"sha":"c6125798542deffa6cb044c4f98485b6719523e3","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Add very basic routing to Nuance\n\nSummary:\nRef T8783. Sort out some relationships and fields:\n\n  - Make Items 1:1 with Queues: each item is always in exactly one queue. Minor discussion on T8783. I think this is easier to understand and reason about (and implement!) and can't come up with any real cases where it isn't powerful enough.\n  - Remove \"QueueItem\", which allowed items to be in multiple queues at once.\n  - Remove \"dateNuanced\", which is equivalent to \"dateCreated\" in all cases.\n\nThen add really basic routing:\n\n  - Add \"Default Queue\" for Sources. New items from the source route into that queue.\n  - (Some day there will be routing rules, but for now the rule is \"always route into the default queue\".)\n  - Show queue on items.\n  - Show more / more useful edit history and transactions in several UIs.\n\nTest Plan:\n{F749445}\n\n{F749446}\n\n{F749447}\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T8783\n\nDifferential Revision: https://secure.phabricator.com/D13988","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/c6125798542deffa6cb044c4f98485b6719523e3"},{"sha":"779a612e417261686be63f65d099a42f5bfcc0c3","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Fix mail parameter error with old migrations\n\nSummary:\nFixes T9251. Old mail could get saved with bad parameters for two reasons that I can come up with:\n\n  - Nothing ever set a parameter on it -- not sure this could ever actually happen; or\n  - some field contained non-UTF8 data prior to D13939 and we silently failed to encode it.\n\nMy guess is that the second case is probably the culprit here.\n\nIn any case, recover from this so `20150622.metamta.5.actor-phid-mig.php` can proceed.\n\nTest Plan: Same effective patch as user patch in T9251; looked at some mail to make sure it was still pulling parameters properly.\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T9251\n\nDifferential Revision: https://secure.phabricator.com/D13990","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/779a612e417261686be63f65d099a42f5bfcc0c3"},{"sha":"10966519e2ebf9e12322b3d73d3a16305e5efb47","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Prevent \"commit message magic words\" parser from exploding on \"reverts aaaa.....aaz\"\n\nSummary:\nFixes T9268. Currently, we try to match any string like \"a2f313f1\" as a commit/revision, so short hashes will get picked up.\n\nHowever, we don't require a word boundary or terminal after the match, so for input like \"aaa...aaaaz\" the engine can get stuck trying to split the string into sub-matches.\n\nThat is, in the original case, the input \"aaaz\" had valid matches against `[rA-Z0-9a-f]+` up to \"z\" of:\n\n  aaa\n  aa a\n  a aa\n  a a a\n\nAll of these will fail once it hits \"z\", but it has to try them all. This complexity is explosive with longer strings.\n\nInstead, require a word boundary or EOL after the match, so this is the only valid match:\n\n  aaa\n\nThen the engine sees the \"z\", says \"nope, no match\" and doesn't have to backtrack across all possible combinations.\n\nTest Plan: Added a failing unit test, applied patch, clean test.\n\nReviewers: chad\n\nReviewed By: chad\n\nManiphest Tasks: T9268\n\nDifferential Revision: https://secure.phabricator.com/D13997","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/10966519e2ebf9e12322b3d73d3a16305e5efb47"},{"sha":"55b44f53f87f911d64268751df7d92b208206ba6","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"Fix possible recursive embeds in Dashboard text panels\n\nSummary:\nWe currently detect tab panels embedding themselves, but do not detect text panels embedding themselves with `{Wxx}`.\n\nDetect these self-embedding panels.\n\nI had to add a bit of a hack to pass the parent panel PHIDs to the rule. Generally, I got the Markup API kind of wrong and want to update it, I'll file a followup with details about how I'd like to move forward.\n\nTest Plan:\nCreated a text panel embedding itself, a tab panel embedding a text panel embedding itself, a tab panel embedding a text panel embedding the tab panel, etc.\n\nRendered all panels standalone and as `{Wxx}` from a different context.\n\n{F761158}\n\n{F761159}\n\n{F761160}\n\n{F761161}\n\n{F761162}\n\nReviewers: chad, jbeta\n\nReviewed By: chad, jbeta\n\nDifferential Revision: https://secure.phabricator.com/D13999","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/55b44f53f87f911d64268751df7d92b208206ba6"},{"sha":"960a574dd538363da2bcecd06f8f13e45c170428","author":{"email":"bc4bd52f99de2e3a917136da4aaf9cc42f1711b5@gmail.com","name":"Aviv Eyal"},"message":"lose help cursor on blur\n\nSummary:\nFixes T8501.\nWhen losing focus while holding ctrl, we never get a key-up event; ctrl-f/d/tab make the browser tab lose focus.\nSo treat 'blur' (unfocus) as if the user released ctrl.\n\nTest Plan: ctrl-f/ctrl-d/ctrl-tab, ctrl-click-outside-of-window, and move mouse over the content - see no help suggestions.\n\nReviewers: #blessed_reviewers, epriestley\n\nReviewed By: #blessed_reviewers, epriestley\n\nSubscribers: epriestley\n\nManiphest Tasks: T8501\n\nDifferential Revision: https://secure.phabricator.com/D13260","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/960a574dd538363da2bcecd06f8f13e45c170428"},{"sha":"328d336c8bb366e70d8174573095cc07586aff8d","author":{"email":"bc4bd52f99de2e3a917136da4aaf9cc42f1711b5@gmail.com","name":"Aviv Eyal"},"message":"Symbol Search: Allow ctrl-click with no hover\n\nSummary: Fix T8710. I had hopes of doing something cleaver with `highlighted` (Like trying to understand `foo.bar` when clicking `bar`, but I obviously didn't do it.\n\nTest Plan: ctrl-click.\n\nReviewers: #blessed_reviewers, epriestley\n\nReviewed By: #blessed_reviewers, epriestley\n\nSubscribers: joshuaspence, epriestley, gena2x, Korvin\n\nManiphest Tasks: T8710\n\nDifferential Revision: https://secure.phabricator.com/D13550","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/328d336c8bb366e70d8174573095cc07586aff8d"},{"sha":"786b135a662c41ebba44f1eb3169f98771fd49c4","author":{"email":"35c0c104757712978a110a5d6b64d40cc6c261b0@gmail.com","name":"cburroughs"},"message":"variable days back for `bin/mail volume`\n\nSummary:\nEmail is so exciting I can't wait 30 days for initial results.\n\nref T9161\n\nTest Plan:\n * `./bin/mail volume --days 60` took longer and gave plausibly larger\n   results.\n * `./bin/mail volume --days 0` quickly told me no mail had been sent.\n * `./bin/mail volume` Said it was still looking 30 days back.\n\nReviewers: #blessed_reviewers, epriestley\n\nReviewed By: #blessed_reviewers, epriestley\n\nSubscribers: epriestley\n\nManiphest Tasks: T9161\n\nDifferential Revision: https://secure.phabricator.com/D13901","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/786b135a662c41ebba44f1eb3169f98771fd49c4"},{"sha":"fd189f14fb2621dd69c0c2ce96813edc39bf9768","author":{"email":"c34c009102e60d77975598e1f414f8a701c22d0b@chadsdomain.com","name":"Chad Little"},"message":"Fix diviner symbols documentation\n\nSummary: Fixes T9267. Removes preceeding r.\n\nTest Plan: Ran Sample, did not get error.\n\nReviewers: epriestley, joshuaspence\n\nReviewed By: epriestley, joshuaspence\n\nSubscribers: Korvin\n\nManiphest Tasks: T9267\n\nDifferential Revision: https://secure.phabricator.com/D14000","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/fd189f14fb2621dd69c0c2ce96813edc39bf9768"},{"sha":"ff6ccd5f68ac553445b11e20f6a4fa46de08da6b","author":{"email":"c028c213ed5efcf30c3f4fc7361dbde0c893c5b7@joshuaspence.com","name":"Joshua Spence"},"message":"Remove leftover code for \"postponed\" lint and unit status\n\nSummary: Ref T9134. It looks like this functionality was removed in D13848.\n\nTest Plan: Submitted a diff successfully.\n\nReviewers: #blessed_reviewers, epriestley\n\nReviewed By: #blessed_reviewers, epriestley\n\nSubscribers: Korvin\n\nManiphest Tasks: T9134\n\nDifferential Revision: https://secure.phabricator.com/D13869","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/ff6ccd5f68ac553445b11e20f6a4fa46de08da6b"},{"sha":"5125045738265c3ef781d9de0282d0e0b32fae29","author":{"email":"46f1a0bd5592a2f9244ca321b129902a06b53e03@epriestley.com","name":"epriestley"},"message":"(stable) Promote 2015 Week 35","distinct":true,"url":"https://api.github.com/repos/uhd-urz/phabricator/commits/5125045738265c3ef781d9de0282d0e0b32fae29"}]}