diff --git a/resources/celerity/map.php b/resources/celerity/map.php index 90183aaf6e..a3aadfe9d7 100644 --- a/resources/celerity/map.php +++ b/resources/celerity/map.php @@ -7,18 +7,18 @@ */ return array( 'names' => array( - 'core.pkg.css' => 'c7fc5aec', - 'core.pkg.js' => '10275c16', + 'core.pkg.css' => 'b6b40555', + 'core.pkg.js' => 'f2139810', 'darkconsole.pkg.js' => 'e7393ebb', 'differential.pkg.css' => 'b3eea3f5', - 'differential.pkg.js' => '4b7d8f19', + 'differential.pkg.js' => '01a010d6', 'diffusion.pkg.css' => '91c5d3a6', 'diffusion.pkg.js' => '3a9a8bfa', 'maniphest.pkg.css' => '4845691a', 'maniphest.pkg.js' => '949a7498', 'rsrc/css/aphront/aphront-bars.css' => '231ac33c', 'rsrc/css/aphront/dark-console.css' => 'f54bf286', - 'rsrc/css/aphront/dialog-view.css' => 'b4334e08', + 'rsrc/css/aphront/dialog-view.css' => '913c172e', 'rsrc/css/aphront/lightbox-attachment.css' => '7acac05d', 'rsrc/css/aphront/list-filter-view.css' => '5d6f0526', 'rsrc/css/aphront/multi-column.css' => 'fd18389d', @@ -28,7 +28,7 @@ return array( 'rsrc/css/aphront/table-view.css' => '9258e19f', 'rsrc/css/aphront/tokenizer.css' => '056da01b', 'rsrc/css/aphront/tooltip.css' => '1a07aea8', - 'rsrc/css/aphront/typeahead-browse.css' => 'd8581d2c', + 'rsrc/css/aphront/typeahead-browse.css' => '8904346a', 'rsrc/css/aphront/typeahead.css' => 'd4f16145', 'rsrc/css/application/almanac/almanac.css' => 'dbb9b3af', 'rsrc/css/application/auth/auth.css' => '0877ed6e', @@ -124,7 +124,7 @@ return array( 'rsrc/css/phui/phui-badge.css' => '3baef8db', 'rsrc/css/phui/phui-big-info-view.css' => 'bd903741', 'rsrc/css/phui/phui-box.css' => '5c8387cf', - 'rsrc/css/phui/phui-button.css' => 'a64a8de6', + 'rsrc/css/phui/phui-button.css' => '4a5fbe3d', 'rsrc/css/phui/phui-chart.css' => '6bf6f78e', 'rsrc/css/phui/phui-crumbs-view.css' => '6b813619', 'rsrc/css/phui/phui-curtain-view.css' => '7148ae25', @@ -149,13 +149,13 @@ return array( 'rsrc/css/phui/phui-pager.css' => 'bea33d23', 'rsrc/css/phui/phui-pinboard-view.css' => '2495140e', 'rsrc/css/phui/phui-profile-menu.css' => 'c8557f33', - 'rsrc/css/phui/phui-property-list-view.css' => 'd4bbd0cb', + 'rsrc/css/phui/phui-property-list-view.css' => '6d8e58ac', 'rsrc/css/phui/phui-remarkup-preview.css' => '1a8f2591', 'rsrc/css/phui/phui-segment-bar-view.css' => '46342871', 'rsrc/css/phui/phui-spacing.css' => '042804d6', 'rsrc/css/phui/phui-status.css' => 'd5263e49', 'rsrc/css/phui/phui-tag-view.css' => '6bbd83e2', - 'rsrc/css/phui/phui-timeline-view.css' => '8ea41b25', + 'rsrc/css/phui/phui-timeline-view.css' => 'c3782437', 'rsrc/css/phui/phui-two-column-view.css' => '9fb86c85', 'rsrc/css/phui/workboards/phui-workboard-color.css' => 'ac6fe6a7', 'rsrc/css/phui/workboards/phui-workboard.css' => 'e6d89647', @@ -245,7 +245,7 @@ return array( 'rsrc/externals/javelin/lib/URI.js' => 'c989ade3', 'rsrc/externals/javelin/lib/Vector.js' => '2caa8fb8', 'rsrc/externals/javelin/lib/WebSocket.js' => 'e292eaf4', - 'rsrc/externals/javelin/lib/Workflow.js' => '0eb34d1d', + 'rsrc/externals/javelin/lib/Workflow.js' => '1e911d0f', 'rsrc/externals/javelin/lib/__tests__/Cookie.js' => '5ed109e8', 'rsrc/externals/javelin/lib/__tests__/DOM.js' => 'c984504b', 'rsrc/externals/javelin/lib/__tests__/JSON.js' => '837a7d68', @@ -339,6 +339,7 @@ return array( 'rsrc/image/people/washington.png' => '40dd301c', 'rsrc/image/phrequent_active.png' => 'a466a8ed', 'rsrc/image/phrequent_inactive.png' => 'bfc15a69', + 'rsrc/image/resize.png' => 'fd476de4', 'rsrc/image/sprite-login-X2.png' => 'e3991e37', 'rsrc/image/sprite-login.png' => '03d5af29', 'rsrc/image/sprite-menu-X2.png' => 'cfd8fca5', @@ -494,7 +495,7 @@ return array( 'rsrc/js/core/behavior-lightbox-attachments.js' => 'f8ba29d7', 'rsrc/js/core/behavior-line-linker.js' => '1499a8cb', 'rsrc/js/core/behavior-more.js' => 'a80d0378', - 'rsrc/js/core/behavior-object-selector.js' => '49b73b36', + 'rsrc/js/core/behavior-object-selector.js' => '9030ebef', 'rsrc/js/core/behavior-oncopy.js' => '2926fff2', 'rsrc/js/core/behavior-phabricator-nav.js' => '56a1ca03', 'rsrc/js/core/behavior-phabricator-remarkup-assist.js' => '116cf19b', @@ -515,14 +516,15 @@ return array( 'rsrc/js/core/behavior-watch-anchor.js' => '9f36c42d', 'rsrc/js/core/behavior-workflow.js' => '0a3f3021', 'rsrc/js/core/phtize.js' => 'd254d646', - 'rsrc/js/phui/behavior-phui-dropdown-menu.js' => '54733475', + 'rsrc/js/phui/behavior-phui-dropdown-menu.js' => '1aa4c968', 'rsrc/js/phui/behavior-phui-file-upload.js' => 'b003d4fb', 'rsrc/js/phui/behavior-phui-object-box-tabs.js' => '2bfa2836', 'rsrc/js/phui/behavior-phui-profile-menu.js' => '12884df9', + 'rsrc/js/phui/behavior-phui-submenu.js' => 'a6f7a73b', 'rsrc/js/phuix/PHUIXActionListView.js' => 'b5c256b8', 'rsrc/js/phuix/PHUIXActionView.js' => '8cf6d262', 'rsrc/js/phuix/PHUIXAutocomplete.js' => '9196fb06', - 'rsrc/js/phuix/PHUIXDropdownMenu.js' => 'bd4c8dca', + 'rsrc/js/phuix/PHUIXDropdownMenu.js' => '82e270da', 'rsrc/js/phuix/PHUIXFormControl.js' => 'e15869a8', 'rsrc/js/phuix/PHUIXIconView.js' => 'bff6884b', ), @@ -530,7 +532,7 @@ return array( 'almanac-css' => 'dbb9b3af', 'aphront-bars' => '231ac33c', 'aphront-dark-console-css' => 'f54bf286', - 'aphront-dialog-view-css' => 'b4334e08', + 'aphront-dialog-view-css' => '913c172e', 'aphront-list-filter-view-css' => '5d6f0526', 'aphront-multi-column-view-css' => 'fd18389d', 'aphront-panel-view-css' => '8427b78d', @@ -656,7 +658,7 @@ return array( 'javelin-behavior-phabricator-line-linker' => '1499a8cb', 'javelin-behavior-phabricator-nav' => '56a1ca03', 'javelin-behavior-phabricator-notification-example' => '8ce821c5', - 'javelin-behavior-phabricator-object-selector' => '49b73b36', + 'javelin-behavior-phabricator-object-selector' => '9030ebef', 'javelin-behavior-phabricator-oncopy' => '2926fff2', 'javelin-behavior-phabricator-remarkup-assist' => '116cf19b', 'javelin-behavior-phabricator-reveal-content' => '60821bc7', @@ -668,11 +670,12 @@ return array( 'javelin-behavior-phabricator-watch-anchor' => '9f36c42d', 'javelin-behavior-pholio-mock-edit' => 'bee502c8', 'javelin-behavior-pholio-mock-view' => 'fbe497e7', - 'javelin-behavior-phui-dropdown-menu' => '54733475', + 'javelin-behavior-phui-dropdown-menu' => '1aa4c968', 'javelin-behavior-phui-file-upload' => 'b003d4fb', 'javelin-behavior-phui-hovercards' => 'bcaccd64', 'javelin-behavior-phui-object-box-tabs' => '2bfa2836', 'javelin-behavior-phui-profile-menu' => '12884df9', + 'javelin-behavior-phui-submenu' => 'a6f7a73b', 'javelin-behavior-policy-control' => 'd0c516d5', 'javelin-behavior-policy-rule-editor' => '5e9f347c', 'javelin-behavior-project-boards' => '14a1faae', @@ -749,7 +752,7 @@ return array( 'javelin-workboard-card' => 'c587b80f', 'javelin-workboard-column' => 'bae58312', 'javelin-workboard-controller' => '55baf5ed', - 'javelin-workflow' => '0eb34d1d', + 'javelin-workflow' => '1e911d0f', 'lightbox-attachment-css' => '7acac05d', 'maniphest-batch-editor' => 'b0f0b6d5', 'maniphest-report-css' => '9b9580b7', @@ -821,7 +824,7 @@ return array( 'phui-badge-view-css' => '3baef8db', 'phui-big-info-view-css' => 'bd903741', 'phui-box-css' => '5c8387cf', - 'phui-button-css' => 'a64a8de6', + 'phui-button-css' => '4a5fbe3d', 'phui-calendar-css' => 'ccabe893', 'phui-calendar-day-css' => 'd1cf6f93', 'phui-calendar-list-css' => '56e6381a', @@ -853,14 +856,14 @@ return array( 'phui-pager-css' => 'bea33d23', 'phui-pinboard-view-css' => '2495140e', 'phui-profile-menu-css' => 'c8557f33', - 'phui-property-list-view-css' => 'd4bbd0cb', + 'phui-property-list-view-css' => '6d8e58ac', 'phui-remarkup-preview-css' => '1a8f2591', 'phui-segment-bar-view-css' => '46342871', 'phui-spacing-css' => '042804d6', 'phui-status-list-view-css' => 'd5263e49', 'phui-tag-view-css' => '6bbd83e2', 'phui-theme-css' => '027ba77e', - 'phui-timeline-view-css' => '8ea41b25', + 'phui-timeline-view-css' => 'c3782437', 'phui-two-column-view-css' => '9fb86c85', 'phui-workboard-color-css' => 'ac6fe6a7', 'phui-workboard-view-css' => 'e6d89647', @@ -869,7 +872,7 @@ return array( 'phuix-action-list-view' => 'b5c256b8', 'phuix-action-view' => '8cf6d262', 'phuix-autocomplete' => '9196fb06', - 'phuix-dropdown-menu' => 'bd4c8dca', + 'phuix-dropdown-menu' => '82e270da', 'phuix-form-control-view' => 'e15869a8', 'phuix-icon-view' => 'bff6884b', 'policy-css' => '957ea14c', @@ -889,7 +892,7 @@ return array( 'syntax-default-css' => '9923583c', 'syntax-highlighting-css' => '9fc496d5', 'tokens-css' => '3d0f239e', - 'typeahead-browse-css' => 'd8581d2c', + 'typeahead-browse-css' => '8904346a', 'unhandled-exception-css' => '4c96257a', ), 'requires' => array( @@ -981,17 +984,6 @@ return array( 'javelin-dom', 'javelin-router', ), - '0eb34d1d' => array( - 'javelin-stratcom', - 'javelin-request', - 'javelin-dom', - 'javelin-vector', - 'javelin-install', - 'javelin-util', - 'javelin-mask', - 'javelin-uri', - 'javelin-routable', - ), '0f764c35' => array( 'javelin-install', 'javelin-util', @@ -1034,6 +1026,12 @@ return array( 'javelin-workflow', 'javelin-workboard-controller', ), + '1aa4c968' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + 'phuix-dropdown-menu', + ), '1ad0a787' => array( 'javelin-install', 'javelin-reactor', @@ -1071,6 +1069,17 @@ return array( 'javelin-dom', 'javelin-reactor-dom', ), + '1e911d0f' => array( + 'javelin-stratcom', + 'javelin-request', + 'javelin-dom', + 'javelin-vector', + 'javelin-install', + 'javelin-util', + 'javelin-mask', + 'javelin-uri', + 'javelin-routable', + ), '21ba5861' => array( 'javelin-behavior', 'javelin-dom', @@ -1205,12 +1214,6 @@ return array( 'javelin-uri', 'phabricator-notification', ), - '49b73b36' => array( - 'javelin-behavior', - 'javelin-dom', - 'javelin-request', - 'javelin-util', - ), '4b700e9e' => array( 'javelin-behavior', 'javelin-dom', @@ -1274,12 +1277,6 @@ return array( 'javelin-leader', 'javelin-json', ), - 54733475 => array( - 'javelin-behavior', - 'javelin-stratcom', - 'javelin-dom', - 'phuix-dropdown-menu', - ), '54b612ba' => array( 'javelin-color', 'javelin-install', @@ -1528,6 +1525,13 @@ return array( 'javelin-vector', 'javelin-stratcom', ), + '82e270da' => array( + 'javelin-install', + 'javelin-util', + 'javelin-dom', + 'javelin-vector', + 'javelin-stratcom', + ), '834a1173' => array( 'javelin-behavior', 'javelin-scrollbar', @@ -1598,6 +1602,12 @@ return array( 'javelin-dom', 'javelin-request', ), + '9030ebef' => array( + 'javelin-behavior', + 'javelin-dom', + 'javelin-request', + 'javelin-util', + ), '9196fb06' => array( 'javelin-install', 'javelin-dom', @@ -1692,6 +1702,11 @@ return array( 'javelin-uri', 'phabricator-notification', ), + 'a6f7a73b' => array( + 'javelin-behavior', + 'javelin-stratcom', + 'javelin-dom', + ), 'a80d0378' => array( 'javelin-behavior', 'javelin-stratcom', @@ -1845,13 +1860,6 @@ return array( 'javelin-vector', 'phui-hovercard', ), - 'bd4c8dca' => array( - 'javelin-install', - 'javelin-util', - 'javelin-dom', - 'javelin-vector', - 'javelin-stratcom', - ), 'bdaf4d04' => array( 'javelin-behavior', 'javelin-dom', diff --git a/resources/sql/autopatches/20160620.phame.blog.parentdomain.2.sql b/resources/sql/autopatches/20160620.phame.blog.parentdomain.2.sql new file mode 100644 index 0000000000..3ad4b0d040 --- /dev/null +++ b/resources/sql/autopatches/20160620.phame.blog.parentdomain.2.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD parentDomain VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160620.phame.blog.parentsite.1.sql b/resources/sql/autopatches/20160620.phame.blog.parentsite.1.sql new file mode 100644 index 0000000000..cfb4f157b1 --- /dev/null +++ b/resources/sql/autopatches/20160620.phame.blog.parentsite.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD parentSite VARCHAR(128) NOT NULL COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160623.phame.blog.fulldomain.1.sql b/resources/sql/autopatches/20160623.phame.blog.fulldomain.1.sql new file mode 100644 index 0000000000..96fc3b27ba --- /dev/null +++ b/resources/sql/autopatches/20160623.phame.blog.fulldomain.1.sql @@ -0,0 +1,2 @@ +ALTER TABLE {$NAMESPACE}_phame.phame_blog + ADD domainFullURI VARCHAR(128) COLLATE {$COLLATE_TEXT}; diff --git a/resources/sql/autopatches/20160623.phame.blog.fulldomain.2.sql b/resources/sql/autopatches/20160623.phame.blog.fulldomain.2.sql new file mode 100644 index 0000000000..a323333c85 --- /dev/null +++ b/resources/sql/autopatches/20160623.phame.blog.fulldomain.2.sql @@ -0,0 +1,3 @@ +UPDATE {$NAMESPACE}_phame.phame_blog + SET domainFullURI = CONCAT('http://', domain, '/') + WHERE domain IS NOT NULL; diff --git a/resources/sql/autopatches/20160623.phame.blog.fulldomain.3.sql b/resources/sql/autopatches/20160623.phame.blog.fulldomain.3.sql new file mode 100644 index 0000000000..05f6009de1 --- /dev/null +++ b/resources/sql/autopatches/20160623.phame.blog.fulldomain.3.sql @@ -0,0 +1,3 @@ +UPDATE {$NAMESPACE}_phame.phame_blogtransaction + SET transactionType = 'phame.blog.full.domain' + WHERE transactionType = 'phame.blog.domain'; diff --git a/resources/sql/quickstart.sql b/resources/sql/quickstart.sql index 1d1defd6de..0574c57c8e 100644 --- a/resources/sql/quickstart.sql +++ b/resources/sql/quickstart.sql @@ -269,6 +269,8 @@ CREATE TABLE `countdown` ( `mailKey` binary(20) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_phid` (`phid`), + KEY `key_epoch` (`epoch`), + KEY `key_author` (`authorPHID`,`epoch`), KEY `key_space` (`spacePHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; @@ -713,6 +715,15 @@ CREATE TABLE `drydock_blueprint` ( UNIQUE KEY `key_phid` (`phid`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `drydock_blueprintname_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `drydock_blueprinttransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, @@ -825,6 +836,24 @@ CREATE TABLE `drydock_slotlock` ( KEY `key_owner` (`ownerPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_feed` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; USE `{$NAMESPACE}_feed`; @@ -1149,10 +1178,12 @@ CREATE TABLE `harbormaster_buildartifact` ( `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, `buildTargetPHID` varbinary(64) NOT NULL, + `isReleased` tinyint(1) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_artifact` (`artifactType`,`artifactIndex`), UNIQUE KEY `key_phid` (`phid`), - KEY `key_garbagecollect` (`artifactType`,`dateCreated`) + KEY `key_garbagecollect` (`artifactType`,`dateCreated`), + KEY `key_target` (`buildTargetPHID`,`artifactType`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; CREATE TABLE `harbormaster_buildcommand` ( @@ -1236,6 +1267,15 @@ CREATE TABLE `harbormaster_buildplan` ( KEY `key_name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `harbormaster_buildplanname_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `harbormaster_buildplantransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, @@ -1577,7 +1617,6 @@ CREATE TABLE `maniphest_task` ( `phid` varbinary(64) NOT NULL, `authorPHID` varbinary(64) NOT NULL, `ownerPHID` varbinary(64) DEFAULT NULL, - `attached` longtext COLLATE {$COLLATE_TEXT} NOT NULL, `status` varchar(12) COLLATE {$COLLATE_TEXT} NOT NULL, `priority` int(10) unsigned NOT NULL, `title` longtext CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, @@ -1585,7 +1624,6 @@ CREATE TABLE `maniphest_task` ( `description` longtext COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `projectPHIDs` longtext COLLATE {$COLLATE_TEXT} NOT NULL, `mailKey` binary(20) NOT NULL, `ownerOrdering` varchar(64) COLLATE {$COLLATE_TEXT} DEFAULT NULL, `originalEmailSource` varchar(255) COLLATE {$COLLATE_TEXT} DEFAULT NULL, @@ -1593,8 +1631,12 @@ CREATE TABLE `maniphest_task` ( `viewPolicy` varbinary(64) NOT NULL, `editPolicy` varbinary(64) NOT NULL, `spacePHID` varbinary(64) DEFAULT NULL, + `properties` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `points` double DEFAULT NULL, + `bridgedObjectPHID` varbinary(64) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `phid` (`phid`), + UNIQUE KEY `key_bridgedobject` (`bridgedObjectPHID`), KEY `priority` (`priority`,`status`), KEY `status` (`status`), KEY `ownerPHID` (`ownerPHID`,`status`), @@ -1657,7 +1699,7 @@ CREATE TABLE `patch_status` ( PRIMARY KEY (`patch`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -INSERT INTO `patch_status` VALUES ('phabricator:000.project.sql',1453226118,NULL),('phabricator:0000.legacy.sql',1453226118,NULL),('phabricator:001.maniphest_projects.sql',1453226118,NULL),('phabricator:002.oauth.sql',1453226118,NULL),('phabricator:003.more_oauth.sql',1453226118,NULL),('phabricator:004.daemonrepos.sql',1453226118,NULL),('phabricator:005.workers.sql',1453226118,NULL),('phabricator:006.repository.sql',1453226118,NULL),('phabricator:007.daemonlog.sql',1453226118,NULL),('phabricator:008.repoopt.sql',1453226118,NULL),('phabricator:009.repo_summary.sql',1453226118,NULL),('phabricator:010.herald.sql',1453226118,NULL),('phabricator:011.badcommit.sql',1453226118,NULL),('phabricator:012.dropphidtype.sql',1453226118,NULL),('phabricator:013.commitdetail.sql',1453226118,NULL),('phabricator:014.shortcuts.sql',1453226118,NULL),('phabricator:015.preferences.sql',1453226118,NULL),('phabricator:016.userrealnameindex.sql',1453226118,NULL),('phabricator:017.sessionkeys.sql',1453226118,NULL),('phabricator:018.owners.sql',1453226118,NULL),('phabricator:019.arcprojects.sql',1453226118,NULL),('phabricator:020.pathcapital.sql',1453226118,NULL),('phabricator:021.xhpastview.sql',1453226118,NULL),('phabricator:022.differentialcommit.sql',1453226118,NULL),('phabricator:023.dxkeys.sql',1453226118,NULL),('phabricator:024.mlistkeys.sql',1453226118,NULL),('phabricator:025.commentopt.sql',1453226118,NULL),('phabricator:026.diffpropkey.sql',1453226118,NULL),('phabricator:027.metamtakeys.sql',1453226118,NULL),('phabricator:028.systemagent.sql',1453226118,NULL),('phabricator:029.cursors.sql',1453226118,NULL),('phabricator:030.imagemacro.sql',1453226118,NULL),('phabricator:031.workerrace.sql',1453226118,NULL),('phabricator:032.viewtime.sql',1453226118,NULL),('phabricator:033.privtest.sql',1453226118,NULL),('phabricator:034.savedheader.sql',1453226118,NULL),('phabricator:035.proxyimage.sql',1453226118,NULL),('phabricator:036.mailkey.sql',1453226119,NULL),('phabricator:037.setuptest.sql',1453226119,NULL),('phabricator:038.admin.sql',1453226119,NULL),('phabricator:039.userlog.sql',1453226119,NULL),('phabricator:040.transform.sql',1453226119,NULL),('phabricator:041.heraldrepetition.sql',1453226119,NULL),('phabricator:042.commentmetadata.sql',1453226119,NULL),('phabricator:043.pastebin.sql',1453226119,NULL),('phabricator:044.countdown.sql',1453226119,NULL),('phabricator:045.timezone.sql',1453226119,NULL),('phabricator:046.conduittoken.sql',1453226119,NULL),('phabricator:047.projectstatus.sql',1453226119,NULL),('phabricator:048.relationshipkeys.sql',1453226119,NULL),('phabricator:049.projectowner.sql',1453226119,NULL),('phabricator:050.taskdenormal.sql',1453226119,NULL),('phabricator:051.projectfilter.sql',1453226119,NULL),('phabricator:052.pastelanguage.sql',1453226119,NULL),('phabricator:053.feed.sql',1453226119,NULL),('phabricator:054.subscribers.sql',1453226119,NULL),('phabricator:055.add_author_to_files.sql',1453226119,NULL),('phabricator:056.slowvote.sql',1453226119,NULL),('phabricator:057.parsecache.sql',1453226119,NULL),('phabricator:058.missingkeys.sql',1453226119,NULL),('phabricator:059.engines.php',1453226120,NULL),('phabricator:060.phriction.sql',1453226120,NULL),('phabricator:061.phrictioncontent.sql',1453226120,NULL),('phabricator:062.phrictionmenu.sql',1453226120,NULL),('phabricator:063.pasteforks.sql',1453226120,NULL),('phabricator:064.subprojects.sql',1453226120,NULL),('phabricator:065.sshkeys.sql',1453226120,NULL),('phabricator:066.phrictioncontent.sql',1453226120,NULL),('phabricator:067.preferences.sql',1453226120,NULL),('phabricator:068.maniphestauxiliarystorage.sql',1453226120,NULL),('phabricator:069.heraldxscript.sql',1453226120,NULL),('phabricator:070.differentialaux.sql',1453226120,NULL),('phabricator:071.contentsource.sql',1453226120,NULL),('phabricator:072.blamerevert.sql',1453226120,NULL),('phabricator:073.reposymbols.sql',1453226120,NULL),('phabricator:074.affectedpath.sql',1453226120,NULL),('phabricator:075.revisionhash.sql',1453226120,NULL),('phabricator:076.indexedlanguages.sql',1453226120,NULL),('phabricator:077.originalemail.sql',1453226120,NULL),('phabricator:078.nametoken.sql',1453226120,NULL),('phabricator:079.nametokenindex.php',1453226120,NULL),('phabricator:080.filekeys.sql',1453226120,NULL),('phabricator:081.filekeys.php',1453226120,NULL),('phabricator:082.xactionkey.sql',1453226120,NULL),('phabricator:083.dxviewtime.sql',1453226120,NULL),('phabricator:084.pasteauthorkey.sql',1453226120,NULL),('phabricator:085.packagecommitrelationship.sql',1453226120,NULL),('phabricator:086.formeraffil.sql',1453226120,NULL),('phabricator:087.phrictiondelete.sql',1453226120,NULL),('phabricator:088.audit.sql',1453226120,NULL),('phabricator:089.projectwiki.sql',1453226120,NULL),('phabricator:090.forceuniqueprojectnames.php',1453226120,NULL),('phabricator:091.uniqueslugkey.sql',1453226120,NULL),('phabricator:092.dropgithubnotification.sql',1453226120,NULL),('phabricator:093.gitremotes.php',1453226120,NULL),('phabricator:094.phrictioncolumn.sql',1453226120,NULL),('phabricator:095.directory.sql',1453226120,NULL),('phabricator:096.filename.sql',1453226120,NULL),('phabricator:097.heraldruletypes.sql',1453226120,NULL),('phabricator:098.heraldruletypemigration.php',1453226120,NULL),('phabricator:099.drydock.sql',1453226120,NULL),('phabricator:100.projectxaction.sql',1453226120,NULL),('phabricator:101.heraldruleapplied.sql',1453226120,NULL),('phabricator:102.heraldcleanup.php',1453226120,NULL),('phabricator:103.heraldedithistory.sql',1453226120,NULL),('phabricator:104.searchkey.sql',1453226120,NULL),('phabricator:105.mimetype.sql',1453226120,NULL),('phabricator:106.chatlog.sql',1453226120,NULL),('phabricator:107.oauthserver.sql',1453226120,NULL),('phabricator:108.oauthscope.sql',1453226120,NULL),('phabricator:109.oauthclientphidkey.sql',1453226120,NULL),('phabricator:110.commitaudit.sql',1453226121,NULL),('phabricator:111.commitauditmigration.php',1453226121,NULL),('phabricator:112.oauthaccesscoderedirecturi.sql',1453226121,NULL),('phabricator:113.lastreviewer.sql',1453226121,NULL),('phabricator:114.auditrequest.sql',1453226121,NULL),('phabricator:115.prepareutf8.sql',1453226121,NULL),('phabricator:116.utf8-backup-first-expect-wait.sql',1453226122,NULL),('phabricator:117.repositorydescription.php',1453226122,NULL),('phabricator:118.auditinline.sql',1453226122,NULL),('phabricator:119.filehash.sql',1453226123,NULL),('phabricator:120.noop.sql',1453226123,NULL),('phabricator:121.drydocklog.sql',1453226123,NULL),('phabricator:122.flag.sql',1453226123,NULL),('phabricator:123.heraldrulelog.sql',1453226123,NULL),('phabricator:124.subpriority.sql',1453226123,NULL),('phabricator:125.ipv6.sql',1453226123,NULL),('phabricator:126.edges.sql',1453226123,NULL),('phabricator:127.userkeybody.sql',1453226123,NULL),('phabricator:128.phabricatorcom.sql',1453226123,NULL),('phabricator:129.savedquery.sql',1453226123,NULL),('phabricator:130.denormalrevisionquery.sql',1453226123,NULL),('phabricator:131.migraterevisionquery.php',1453226123,NULL),('phabricator:132.phame.sql',1453226123,NULL),('phabricator:133.imagemacro.sql',1453226123,NULL),('phabricator:134.emptysearch.sql',1453226123,NULL),('phabricator:135.datecommitted.sql',1453226123,NULL),('phabricator:136.sex.sql',1453226123,NULL),('phabricator:137.auditmetadata.sql',1453226123,NULL),('phabricator:138.notification.sql',1453226123,NULL),('phabricator:20121209.pholioxactions.sql',1453226124,NULL),('phabricator:20121209.xmacroadd.sql',1453226124,NULL),('phabricator:20121209.xmacromigrate.php',1453226124,NULL),('phabricator:20121209.xmacromigratekey.sql',1453226124,NULL),('phabricator:20121220.generalcache.sql',1453226124,NULL),('phabricator:20121226.config.sql',1453226124,NULL),('phabricator:20130101.confxaction.sql',1453226124,NULL),('phabricator:20130102.metamtareceivedmailmessageidhash.sql',1453226124,NULL),('phabricator:20130103.filemetadata.sql',1453226124,NULL),('phabricator:20130111.conpherence.sql',1453226124,NULL),('phabricator:20130127.altheraldtranscript.sql',1453226124,NULL),('phabricator:20130131.conpherencepics.sql',1453226124,NULL),('phabricator:20130201.revisionunsubscribed.php',1453226124,NULL),('phabricator:20130201.revisionunsubscribed.sql',1453226124,NULL),('phabricator:20130214.chatlogchannel.sql',1453226124,NULL),('phabricator:20130214.chatlogchannelid.sql',1453226124,NULL),('phabricator:20130214.token.sql',1453226124,NULL),('phabricator:20130215.phabricatorfileaddttl.sql',1453226124,NULL),('phabricator:20130217.cachettl.sql',1453226124,NULL),('phabricator:20130218.longdaemon.sql',1453226124,NULL),('phabricator:20130218.updatechannelid.php',1453226124,NULL),('phabricator:20130219.commitsummary.sql',1453226124,NULL),('phabricator:20130219.commitsummarymig.php',1453226124,NULL),('phabricator:20130222.dropchannel.sql',1453226124,NULL),('phabricator:20130226.commitkey.sql',1453226124,NULL),('phabricator:20130304.lintauthor.sql',1453226124,NULL),('phabricator:20130310.xactionmeta.sql',1453226124,NULL),('phabricator:20130317.phrictionedge.sql',1453226124,NULL),('phabricator:20130319.conpherence.sql',1453226124,NULL),('phabricator:20130319.phabricatorfileexplicitupload.sql',1453226124,NULL),('phabricator:20130320.phlux.sql',1453226124,NULL),('phabricator:20130321.token.sql',1453226124,NULL),('phabricator:20130322.phortune.sql',1453226124,NULL),('phabricator:20130323.phortunepayment.sql',1453226124,NULL),('phabricator:20130324.phortuneproduct.sql',1453226124,NULL),('phabricator:20130330.phrequent.sql',1453226124,NULL),('phabricator:20130403.conpherencecache.sql',1453226124,NULL),('phabricator:20130403.conpherencecachemig.php',1453226124,NULL),('phabricator:20130409.commitdrev.php',1453226124,NULL),('phabricator:20130417.externalaccount.sql',1453226124,NULL),('phabricator:20130423.conpherenceindices.sql',1453226125,NULL),('phabricator:20130423.phortunepaymentrevised.sql',1453226125,NULL),('phabricator:20130423.updateexternalaccount.sql',1453226124,NULL),('phabricator:20130426.search_savedquery.sql',1453226125,NULL),('phabricator:20130502.countdownrevamp1.sql',1453226125,NULL),('phabricator:20130502.countdownrevamp2.php',1453226125,NULL),('phabricator:20130502.countdownrevamp3.sql',1453226125,NULL),('phabricator:20130507.releephrqmailkey.sql',1453226125,NULL),('phabricator:20130507.releephrqmailkeypop.php',1453226125,NULL),('phabricator:20130507.releephrqsimplifycols.sql',1453226125,NULL),('phabricator:20130508.releephtransactions.sql',1453226125,NULL),('phabricator:20130508.releephtransactionsmig.php',1453226125,NULL),('phabricator:20130508.search_namedquery.sql',1453226125,NULL),('phabricator:20130513.receviedmailstatus.sql',1453226125,NULL),('phabricator:20130519.diviner.sql',1453226125,NULL),('phabricator:20130521.dropconphimages.sql',1453226125,NULL),('phabricator:20130523.maniphest_owners.sql',1453226125,NULL),('phabricator:20130524.repoxactions.sql',1453226125,NULL),('phabricator:20130529.macroauthor.sql',1453226125,NULL),('phabricator:20130529.macroauthormig.php',1453226125,NULL),('phabricator:20130530.macrodatekey.sql',1453226125,NULL),('phabricator:20130530.pastekeys.sql',1453226125,NULL),('phabricator:20130530.sessionhash.php',1453226125,NULL),('phabricator:20130531.filekeys.sql',1453226125,NULL),('phabricator:20130602.morediviner.sql',1453226125,NULL),('phabricator:20130602.namedqueries.sql',1453226125,NULL),('phabricator:20130606.userxactions.sql',1453226125,NULL),('phabricator:20130607.xaccount.sql',1453226125,NULL),('phabricator:20130611.migrateoauth.php',1453226125,NULL),('phabricator:20130611.nukeldap.php',1453226125,NULL),('phabricator:20130613.authdb.sql',1453226125,NULL),('phabricator:20130619.authconf.php',1453226125,NULL),('phabricator:20130620.diffxactions.sql',1453226125,NULL),('phabricator:20130621.diffcommentphid.sql',1453226125,NULL),('phabricator:20130621.diffcommentphidmig.php',1453226125,NULL),('phabricator:20130621.diffcommentunphid.sql',1453226125,NULL),('phabricator:20130622.doorkeeper.sql',1453226125,NULL),('phabricator:20130628.legalpadv0.sql',1453226125,NULL),('phabricator:20130701.conduitlog.sql',1453226125,NULL),('phabricator:20130703.legalpaddocdenorm.php',1453226125,NULL),('phabricator:20130703.legalpaddocdenorm.sql',1453226125,NULL),('phabricator:20130709.droptimeline.sql',1453226125,NULL),('phabricator:20130709.legalpadsignature.sql',1453226125,NULL),('phabricator:20130711.pholioimageobsolete.php',1453226126,NULL),('phabricator:20130711.pholioimageobsolete.sql',1453226126,NULL),('phabricator:20130711.pholioimageobsolete2.sql',1453226126,NULL),('phabricator:20130711.trimrealnames.php',1453226125,NULL),('phabricator:20130714.votexactions.sql',1453226125,NULL),('phabricator:20130715.votecomments.php',1453226125,NULL),('phabricator:20130715.voteedges.sql',1453226125,NULL),('phabricator:20130716.archivememberlessprojects.php',1453226126,NULL),('phabricator:20130722.pholioreplace.sql',1453226126,NULL),('phabricator:20130723.taskstarttime.sql',1453226126,NULL),('phabricator:20130726.ponderxactions.sql',1453226126,NULL),('phabricator:20130727.ponderquestionstatus.sql',1453226126,NULL),('phabricator:20130728.ponderunique.php',1453226126,NULL),('phabricator:20130728.ponderuniquekey.sql',1453226126,NULL),('phabricator:20130728.ponderxcomment.php',1453226126,NULL),('phabricator:20130731.releephcutpointidentifier.sql',1453226126,NULL),('phabricator:20130731.releephproject.sql',1453226126,NULL),('phabricator:20130731.releephrepoid.sql',1453226126,NULL),('phabricator:20130801.pastexactions.php',1453226126,NULL),('phabricator:20130801.pastexactions.sql',1453226126,NULL),('phabricator:20130802.heraldphid.sql',1453226126,NULL),('phabricator:20130802.heraldphids.php',1453226126,NULL),('phabricator:20130802.heraldphidukey.sql',1453226126,NULL),('phabricator:20130802.heraldxactions.sql',1453226126,NULL),('phabricator:20130805.pasteedges.sql',1453226126,NULL),('phabricator:20130805.pastemailkey.sql',1453226126,NULL),('phabricator:20130805.pastemailkeypop.php',1453226126,NULL),('phabricator:20130814.usercustom.sql',1453226126,NULL),('phabricator:20130820.file-mailkey-populate.php',1453226126,NULL),('phabricator:20130820.filemailkey.sql',1453226126,NULL),('phabricator:20130820.filexactions.sql',1453226126,NULL),('phabricator:20130820.releephxactions.sql',1453226126,NULL),('phabricator:20130826.divinernode.sql',1453226126,NULL),('phabricator:20130912.maniphest.1.touch.sql',1453226126,NULL),('phabricator:20130912.maniphest.2.created.sql',1453226126,NULL),('phabricator:20130912.maniphest.3.nameindex.sql',1453226126,NULL),('phabricator:20130912.maniphest.4.fillindex.php',1453226126,NULL),('phabricator:20130913.maniphest.1.migratesearch.php',1453226126,NULL),('phabricator:20130914.usercustom.sql',1453226126,NULL),('phabricator:20130915.maniphestcustom.sql',1453226126,NULL),('phabricator:20130915.maniphestmigrate.php',1453226126,NULL),('phabricator:20130915.maniphestqdrop.sql',1453226126,NULL),('phabricator:20130919.mfieldconf.php',1453226126,NULL),('phabricator:20130920.repokeyspolicy.sql',1453226126,NULL),('phabricator:20130921.mtransactions.sql',1453226126,NULL),('phabricator:20130921.xmigratemaniphest.php',1453226126,NULL),('phabricator:20130923.mrename.sql',1453226126,NULL),('phabricator:20130924.mdraftkey.sql',1453226126,NULL),('phabricator:20130925.mpolicy.sql',1453226126,NULL),('phabricator:20130925.xpolicy.sql',1453226126,NULL),('phabricator:20130926.dcustom.sql',1453226126,NULL),('phabricator:20130926.dinkeys.sql',1453226126,NULL),('phabricator:20130926.dinline.php',1453226126,NULL),('phabricator:20130927.audiomacro.sql',1453226126,NULL),('phabricator:20130929.filepolicy.sql',1453226126,NULL),('phabricator:20131004.dxedgekey.sql',1453226126,NULL),('phabricator:20131004.dxreviewers.php',1453226126,NULL),('phabricator:20131006.hdisable.sql',1453226126,NULL),('phabricator:20131010.pstorage.sql',1453226126,NULL),('phabricator:20131015.cpolicy.sql',1453226126,NULL),('phabricator:20131020.col1.sql',1453226126,NULL),('phabricator:20131020.harbormaster.sql',1453226126,NULL),('phabricator:20131020.pcustom.sql',1453226126,NULL),('phabricator:20131020.pxaction.sql',1453226126,NULL),('phabricator:20131020.pxactionmig.php',1453226126,NULL),('phabricator:20131025.repopush.sql',1453226127,NULL),('phabricator:20131026.commitstatus.sql',1453226127,NULL),('phabricator:20131030.repostatusmessage.sql',1453226127,NULL),('phabricator:20131031.vcspassword.sql',1453226127,NULL),('phabricator:20131105.buildstep.sql',1453226127,NULL),('phabricator:20131106.diffphid.1.col.sql',1453226127,NULL),('phabricator:20131106.diffphid.2.mig.php',1453226127,NULL),('phabricator:20131106.diffphid.3.key.sql',1453226127,NULL),('phabricator:20131106.nuance-v0.sql',1453226127,NULL),('phabricator:20131107.buildlog.sql',1453226127,NULL),('phabricator:20131112.userverified.1.col.sql',1453226127,NULL),('phabricator:20131112.userverified.2.mig.php',1453226127,NULL),('phabricator:20131118.ownerorder.php',1453226127,NULL),('phabricator:20131119.passphrase.sql',1453226127,NULL),('phabricator:20131120.nuancesourcetype.sql',1453226127,NULL),('phabricator:20131121.passphraseedge.sql',1453226127,NULL),('phabricator:20131121.repocredentials.1.col.sql',1453226127,NULL),('phabricator:20131121.repocredentials.2.mig.php',1453226127,NULL),('phabricator:20131122.repomirror.sql',1453226127,NULL),('phabricator:20131123.drydockblueprintpolicy.sql',1453226127,NULL),('phabricator:20131129.drydockresourceblueprint.sql',1453226127,NULL),('phabricator:20131204.pushlog.sql',1453226127,NULL),('phabricator:20131205.buildsteporder.sql',1453226127,NULL),('phabricator:20131205.buildstepordermig.php',1453226127,NULL),('phabricator:20131205.buildtargets.sql',1453226127,NULL),('phabricator:20131206.phragment.sql',1453226127,NULL),('phabricator:20131206.phragmentnull.sql',1453226127,NULL),('phabricator:20131208.phragmentsnapshot.sql',1453226127,NULL),('phabricator:20131211.phragmentedges.sql',1453226127,NULL),('phabricator:20131217.pushlogphid.1.col.sql',1453226127,NULL),('phabricator:20131217.pushlogphid.2.mig.php',1453226127,NULL),('phabricator:20131217.pushlogphid.3.key.sql',1453226127,NULL),('phabricator:20131219.pxdrop.sql',1453226127,NULL),('phabricator:20131224.harbormanual.sql',1453226127,NULL),('phabricator:20131227.heraldobject.sql',1453226127,NULL),('phabricator:20131231.dropshortcut.sql',1453226127,NULL),('phabricator:20131302.maniphestvalue.sql',1453226124,NULL),('phabricator:20140104.harbormastercmd.sql',1453226127,NULL),('phabricator:20140106.macromailkey.1.sql',1453226127,NULL),('phabricator:20140106.macromailkey.2.php',1453226127,NULL),('phabricator:20140108.ddbpname.1.sql',1453226127,NULL),('phabricator:20140108.ddbpname.2.php',1453226127,NULL),('phabricator:20140109.ddxactions.sql',1453226127,NULL),('phabricator:20140109.projectcolumnsdates.sql',1453226127,NULL),('phabricator:20140113.legalpadsig.1.sql',1453226127,NULL),('phabricator:20140113.legalpadsig.2.php',1453226127,NULL),('phabricator:20140115.auth.1.id.sql',1453226128,NULL),('phabricator:20140115.auth.2.expires.sql',1453226128,NULL),('phabricator:20140115.auth.3.unlimit.php',1453226128,NULL),('phabricator:20140115.legalpadsigkey.sql',1453226128,NULL),('phabricator:20140116.reporefcursor.sql',1453226128,NULL),('phabricator:20140126.diff.1.parentrevisionid.sql',1453226128,NULL),('phabricator:20140126.diff.2.repositoryphid.sql',1453226128,NULL),('phabricator:20140130.dash.1.board.sql',1453226128,NULL),('phabricator:20140130.dash.2.panel.sql',1453226128,NULL),('phabricator:20140130.dash.3.boardxaction.sql',1453226128,NULL),('phabricator:20140130.dash.4.panelxaction.sql',1453226128,NULL),('phabricator:20140130.mail.1.retry.sql',1453226128,NULL),('phabricator:20140130.mail.2.next.sql',1453226128,NULL),('phabricator:20140201.gc.1.mailsent.sql',1453226128,NULL),('phabricator:20140201.gc.2.mailreceived.sql',1453226128,NULL),('phabricator:20140205.cal.1.rename.sql',1453226128,NULL),('phabricator:20140205.cal.2.phid-col.sql',1453226128,NULL),('phabricator:20140205.cal.3.phid-mig.php',1453226128,NULL),('phabricator:20140205.cal.4.phid-key.sql',1453226128,NULL),('phabricator:20140210.herald.rule-condition-mig.php',1453226128,NULL),('phabricator:20140210.projcfield.1.blurb.php',1453226128,NULL),('phabricator:20140210.projcfield.2.piccol.sql',1453226128,NULL),('phabricator:20140210.projcfield.3.picmig.sql',1453226128,NULL),('phabricator:20140210.projcfield.4.memmig.sql',1453226128,NULL),('phabricator:20140210.projcfield.5.dropprofile.sql',1453226128,NULL),('phabricator:20140211.dx.1.nullablechangesetid.sql',1453226128,NULL),('phabricator:20140211.dx.2.migcommenttext.php',1453226128,NULL),('phabricator:20140211.dx.3.migsubscriptions.sql',1453226128,NULL),('phabricator:20140211.dx.999.drop.relationships.sql',1453226128,NULL),('phabricator:20140212.dx.1.armageddon.php',1453226128,NULL),('phabricator:20140214.clean.1.legacycommentid.sql',1453226128,NULL),('phabricator:20140214.clean.2.dropcomment.sql',1453226128,NULL),('phabricator:20140214.clean.3.dropinline.sql',1453226128,NULL),('phabricator:20140218.differentialdraft.sql',1453226128,NULL),('phabricator:20140218.passwords.1.extend.sql',1453226128,NULL),('phabricator:20140218.passwords.2.prefix.sql',1453226128,NULL),('phabricator:20140218.passwords.3.vcsextend.sql',1453226128,NULL),('phabricator:20140218.passwords.4.vcs.php',1453226128,NULL),('phabricator:20140223.bigutf8scratch.sql',1453226128,NULL),('phabricator:20140224.dxclean.1.datecommitted.sql',1453226128,NULL),('phabricator:20140226.dxcustom.1.fielddata.php',1453226128,NULL),('phabricator:20140226.dxcustom.99.drop.sql',1453226128,NULL),('phabricator:20140228.dxcomment.1.sql',1453226128,NULL),('phabricator:20140305.diviner.1.slugcol.sql',1453226128,NULL),('phabricator:20140305.diviner.2.slugkey.sql',1453226128,NULL),('phabricator:20140311.mdroplegacy.sql',1453226128,NULL),('phabricator:20140314.projectcolumn.1.statuscol.sql',1453226128,NULL),('phabricator:20140314.projectcolumn.2.statuskey.sql',1453226128,NULL),('phabricator:20140317.mupdatedkey.sql',1453226128,NULL),('phabricator:20140321.harbor.1.bxaction.sql',1453226128,NULL),('phabricator:20140321.mstatus.1.col.sql',1453226128,NULL),('phabricator:20140321.mstatus.2.mig.php',1453226128,NULL),('phabricator:20140323.harbor.1.renames.php',1453226128,NULL),('phabricator:20140323.harbor.2.message.sql',1453226128,NULL),('phabricator:20140325.push.1.event.sql',1453226128,NULL),('phabricator:20140325.push.2.eventphid.sql',1453226128,NULL),('phabricator:20140325.push.3.groups.php',1453226128,NULL),('phabricator:20140325.push.4.prune.sql',1453226128,NULL),('phabricator:20140326.project.1.colxaction.sql',1453226128,NULL),('phabricator:20140328.releeph.1.productxaction.sql',1453226128,NULL),('phabricator:20140330.flagtext.sql',1453226128,NULL),('phabricator:20140402.actionlog.sql',1453226128,NULL),('phabricator:20140410.accountsecret.1.sql',1453226128,NULL),('phabricator:20140410.accountsecret.2.php',1453226128,NULL),('phabricator:20140416.harbor.1.sql',1453226128,NULL),('phabricator:20140420.rel.1.objectphid.sql',1453226128,NULL),('phabricator:20140420.rel.2.objectmig.php',1453226128,NULL),('phabricator:20140421.slowvotecolumnsisclosed.sql',1453226128,NULL),('phabricator:20140423.session.1.hisec.sql',1453226128,NULL),('phabricator:20140427.mfactor.1.sql',1453226128,NULL),('phabricator:20140430.auth.1.partial.sql',1453226128,NULL),('phabricator:20140430.dash.1.paneltype.sql',1453226128,NULL),('phabricator:20140430.dash.2.edge.sql',1453226128,NULL),('phabricator:20140501.passphraselockcredential.sql',1453226128,NULL),('phabricator:20140501.remove.1.dlog.sql',1453226128,NULL),('phabricator:20140507.smstable.sql',1453226128,NULL),('phabricator:20140509.coverage.1.sql',1453226128,NULL),('phabricator:20140509.dashboardlayoutconfig.sql',1453226128,NULL),('phabricator:20140512.dparents.1.sql',1453226128,NULL),('phabricator:20140514.harbormasterbuildabletransaction.sql',1453226128,NULL),('phabricator:20140514.pholiomockclose.sql',1453226129,NULL),('phabricator:20140515.trust-emails.sql',1453226129,NULL),('phabricator:20140517.dxbinarycache.sql',1453226129,NULL),('phabricator:20140518.dxmorebinarycache.sql',1453226129,NULL),('phabricator:20140519.dashboardinstall.sql',1453226129,NULL),('phabricator:20140520.authtemptoken.sql',1453226129,NULL),('phabricator:20140521.projectslug.1.create.sql',1453226129,NULL),('phabricator:20140521.projectslug.2.mig.php',1453226129,NULL),('phabricator:20140522.projecticon.sql',1453226129,NULL),('phabricator:20140524.auth.mfa.cache.sql',1453226129,NULL),('phabricator:20140525.hunkmodern.sql',1453226129,NULL),('phabricator:20140615.pholioedit.1.sql',1453226129,NULL),('phabricator:20140615.pholioedit.2.sql',1453226129,NULL),('phabricator:20140617.daemon.explicit-argv.sql',1453226129,NULL),('phabricator:20140617.daemonlog.sql',1453226129,NULL),('phabricator:20140624.projcolor.1.sql',1453226129,NULL),('phabricator:20140624.projcolor.2.sql',1453226129,NULL),('phabricator:20140629.dasharchive.1.sql',1453226129,NULL),('phabricator:20140629.legalsig.1.sql',1453226129,NULL),('phabricator:20140629.legalsig.2.php',1453226129,NULL),('phabricator:20140701.legalexemption.1.sql',1453226129,NULL),('phabricator:20140701.legalexemption.2.sql',1453226129,NULL),('phabricator:20140703.legalcorp.1.sql',1453226129,NULL),('phabricator:20140703.legalcorp.2.sql',1453226129,NULL),('phabricator:20140703.legalcorp.3.sql',1453226129,NULL),('phabricator:20140703.legalcorp.4.sql',1453226129,NULL),('phabricator:20140703.legalcorp.5.sql',1453226129,NULL),('phabricator:20140704.harbormasterstep.1.sql',1453226129,NULL),('phabricator:20140704.harbormasterstep.2.sql',1453226129,NULL),('phabricator:20140704.legalpreamble.1.sql',1453226129,NULL),('phabricator:20140706.harbormasterdepend.1.php',1453226129,NULL),('phabricator:20140706.pedge.1.sql',1453226129,NULL),('phabricator:20140711.pnames.1.sql',1453226129,NULL),('phabricator:20140711.pnames.2.php',1453226129,NULL),('phabricator:20140711.workerpriority.sql',1453226129,NULL),('phabricator:20140712.projcoluniq.sql',1453226129,NULL),('phabricator:20140721.phortune.1.cart.sql',1453226129,NULL),('phabricator:20140721.phortune.2.purchase.sql',1453226129,NULL),('phabricator:20140721.phortune.3.charge.sql',1453226129,NULL),('phabricator:20140721.phortune.4.cartstatus.sql',1453226129,NULL),('phabricator:20140721.phortune.5.cstatusdefault.sql',1453226129,NULL),('phabricator:20140721.phortune.6.onetimecharge.sql',1453226129,NULL),('phabricator:20140721.phortune.7.nullmethod.sql',1453226129,NULL),('phabricator:20140722.appname.php',1453226129,NULL),('phabricator:20140722.audit.1.xactions.sql',1453226129,NULL),('phabricator:20140722.audit.2.comments.sql',1453226129,NULL),('phabricator:20140722.audit.3.miginlines.php',1453226129,NULL),('phabricator:20140722.audit.4.migtext.php',1453226129,NULL),('phabricator:20140722.renameauth.php',1453226129,NULL),('phabricator:20140723.apprenamexaction.sql',1453226129,NULL),('phabricator:20140725.audit.1.migxactions.php',1453226129,NULL),('phabricator:20140731.audit.1.subscribers.php',1453226129,NULL),('phabricator:20140731.cancdn.php',1453226129,NULL),('phabricator:20140731.harbormasterstepdesc.sql',1453226129,NULL),('phabricator:20140805.boardcol.1.sql',1453226129,NULL),('phabricator:20140805.boardcol.2.php',1453226129,NULL),('phabricator:20140807.harbormastertargettime.sql',1453226129,NULL),('phabricator:20140808.boardprop.1.sql',1453226129,NULL),('phabricator:20140808.boardprop.2.sql',1453226129,NULL),('phabricator:20140808.boardprop.3.php',1453226129,NULL),('phabricator:20140811.blob.1.sql',1453226129,NULL),('phabricator:20140811.blob.2.sql',1453226129,NULL),('phabricator:20140812.projkey.1.sql',1453226129,NULL),('phabricator:20140812.projkey.2.sql',1453226129,NULL),('phabricator:20140814.passphrasecredentialconduit.sql',1453226129,NULL),('phabricator:20140815.cancdncase.php',1453226129,NULL),('phabricator:20140818.harbormasterindex.1.sql',1453226129,NULL),('phabricator:20140821.harbormasterbuildgen.1.sql',1453226129,NULL),('phabricator:20140822.daemonenvhash.sql',1453226129,NULL),('phabricator:20140902.almanacdevice.1.sql',1453226129,NULL),('phabricator:20140904.macroattach.php',1453226129,NULL),('phabricator:20140911.fund.1.initiative.sql',1453226129,NULL),('phabricator:20140911.fund.2.xaction.sql',1453226129,NULL),('phabricator:20140911.fund.3.edge.sql',1453226129,NULL),('phabricator:20140911.fund.4.backer.sql',1453226129,NULL),('phabricator:20140911.fund.5.backxaction.sql',1453226129,NULL),('phabricator:20140914.betaproto.php',1453226129,NULL),('phabricator:20140917.project.canlock.sql',1453226129,NULL),('phabricator:20140918.schema.1.dropaudit.sql',1453226129,NULL),('phabricator:20140918.schema.2.dropauditinline.sql',1453226129,NULL),('phabricator:20140918.schema.3.wipecache.sql',1453226129,NULL),('phabricator:20140918.schema.4.cachetype.sql',1453226129,NULL),('phabricator:20140918.schema.5.slowvote.sql',1453226129,NULL),('phabricator:20140919.schema.01.calstatus.sql',1453226129,NULL),('phabricator:20140919.schema.02.calname.sql',1453226129,NULL),('phabricator:20140919.schema.03.dropaux.sql',1453226129,NULL),('phabricator:20140919.schema.04.droptaskproj.sql',1453226129,NULL),('phabricator:20140926.schema.01.droprelev.sql',1453226129,NULL),('phabricator:20140926.schema.02.droprelreqev.sql',1453226129,NULL),('phabricator:20140926.schema.03.dropldapinfo.sql',1453226129,NULL),('phabricator:20140926.schema.04.dropoauthinfo.sql',1453226129,NULL),('phabricator:20140926.schema.05.dropprojaffil.sql',1453226129,NULL),('phabricator:20140926.schema.06.dropsubproject.sql',1453226129,NULL),('phabricator:20140926.schema.07.droppondcom.sql',1453226129,NULL),('phabricator:20140927.schema.01.dropsearchq.sql',1453226129,NULL),('phabricator:20140927.schema.02.pholio1.sql',1453226129,NULL),('phabricator:20140927.schema.03.pholio2.sql',1453226129,NULL),('phabricator:20140927.schema.04.pholio3.sql',1453226129,NULL),('phabricator:20140927.schema.05.phragment1.sql',1453226130,NULL),('phabricator:20140927.schema.06.releeph1.sql',1453226130,NULL),('phabricator:20141001.schema.01.version.sql',1453226130,NULL),('phabricator:20141001.schema.02.taskmail.sql',1453226130,NULL),('phabricator:20141002.schema.01.liskcounter.sql',1453226130,NULL),('phabricator:20141002.schema.02.draftnull.sql',1453226130,NULL),('phabricator:20141004.currency.01.sql',1453226130,NULL),('phabricator:20141004.currency.02.sql',1453226130,NULL),('phabricator:20141004.currency.03.sql',1453226130,NULL),('phabricator:20141004.currency.04.sql',1453226130,NULL),('phabricator:20141004.currency.05.sql',1453226130,NULL),('phabricator:20141004.currency.06.sql',1453226130,NULL),('phabricator:20141004.harborliskcounter.sql',1453226130,NULL),('phabricator:20141005.phortuneproduct.sql',1453226130,NULL),('phabricator:20141006.phortunecart.sql',1453226130,NULL),('phabricator:20141006.phortunemerchant.sql',1453226130,NULL),('phabricator:20141006.phortunemerchantx.sql',1453226130,NULL),('phabricator:20141007.fundmerchant.sql',1453226130,NULL),('phabricator:20141007.fundrisks.sql',1453226130,NULL),('phabricator:20141007.fundtotal.sql',1453226130,NULL),('phabricator:20141007.phortunecartmerchant.sql',1453226130,NULL),('phabricator:20141007.phortunecharge.sql',1453226130,NULL),('phabricator:20141007.phortunepayment.sql',1453226130,NULL),('phabricator:20141007.phortuneprovider.sql',1453226130,NULL),('phabricator:20141007.phortuneproviderx.sql',1453226130,NULL),('phabricator:20141008.phortunemerchdesc.sql',1453226130,NULL),('phabricator:20141008.phortuneprovdis.sql',1453226130,NULL),('phabricator:20141008.phortunerefund.sql',1453226130,NULL),('phabricator:20141010.fundmailkey.sql',1453226130,NULL),('phabricator:20141011.phortunemerchedit.sql',1453226130,NULL),('phabricator:20141012.phortunecartxaction.sql',1453226130,NULL),('phabricator:20141013.phortunecartkey.sql',1453226130,NULL),('phabricator:20141016.almanac.device.sql',1453226130,NULL),('phabricator:20141016.almanac.dxaction.sql',1453226130,NULL),('phabricator:20141016.almanac.interface.sql',1453226130,NULL),('phabricator:20141016.almanac.network.sql',1453226130,NULL),('phabricator:20141016.almanac.nxaction.sql',1453226130,NULL),('phabricator:20141016.almanac.service.sql',1453226130,NULL),('phabricator:20141016.almanac.sxaction.sql',1453226130,NULL),('phabricator:20141017.almanac.binding.sql',1453226130,NULL),('phabricator:20141017.almanac.bxaction.sql',1453226130,NULL),('phabricator:20141025.phriction.1.xaction.sql',1453226130,NULL),('phabricator:20141025.phriction.2.xaction.sql',1453226130,NULL),('phabricator:20141025.phriction.mailkey.sql',1453226130,NULL),('phabricator:20141103.almanac.1.delprop.sql',1453226130,NULL),('phabricator:20141103.almanac.2.addprop.sql',1453226131,NULL),('phabricator:20141104.almanac.3.edge.sql',1453226131,NULL),('phabricator:20141105.ssh.1.rename.sql',1453226131,NULL),('phabricator:20141106.dropold.sql',1453226131,NULL),('phabricator:20141106.uniqdrafts.php',1453226131,NULL),('phabricator:20141107.phriction.policy.1.sql',1453226131,NULL),('phabricator:20141107.phriction.policy.2.php',1453226131,NULL),('phabricator:20141107.phriction.popkeys.php',1453226131,NULL),('phabricator:20141107.ssh.1.colname.sql',1453226131,NULL),('phabricator:20141107.ssh.2.keyhash.sql',1453226131,NULL),('phabricator:20141107.ssh.3.keyindex.sql',1453226131,NULL),('phabricator:20141107.ssh.4.keymig.php',1453226131,NULL),('phabricator:20141107.ssh.5.indexnull.sql',1453226131,NULL),('phabricator:20141107.ssh.6.indexkey.sql',1453226131,NULL),('phabricator:20141107.ssh.7.colnull.sql',1453226131,NULL),('phabricator:20141113.auditdupes.php',1453226131,NULL),('phabricator:20141118.diffxaction.sql',1453226131,NULL),('phabricator:20141119.commitpedge.sql',1453226131,NULL),('phabricator:20141119.differential.diff.policy.sql',1453226131,NULL),('phabricator:20141119.sshtrust.sql',1453226131,NULL),('phabricator:20141123.taskpriority.1.sql',1453226131,NULL),('phabricator:20141123.taskpriority.2.sql',1453226131,NULL),('phabricator:20141210.maniphestsubscribersmig.1.sql',1453226131,NULL),('phabricator:20141210.maniphestsubscribersmig.2.sql',1453226131,NULL),('phabricator:20141210.reposervice.sql',1453226131,NULL),('phabricator:20141212.conduittoken.sql',1453226131,NULL),('phabricator:20141215.almanacservicetype.sql',1453226131,NULL),('phabricator:20141217.almanacdevicelock.sql',1453226131,NULL),('phabricator:20141217.almanaclock.sql',1453226131,NULL),('phabricator:20141218.maniphestcctxn.php',1453226131,NULL),('phabricator:20141222.maniphestprojtxn.php',1453226131,NULL),('phabricator:20141223.daemonloguser.sql',1453226131,NULL),('phabricator:20141223.daemonobjectphid.sql',1453226131,NULL),('phabricator:20141230.pasteeditpolicycolumn.sql',1453226131,NULL),('phabricator:20141230.pasteeditpolicyexisting.sql',1453226131,NULL),('phabricator:20150102.policyname.php',1453226131,NULL),('phabricator:20150102.tasksubscriber.sql',1453226131,NULL),('phabricator:20150105.conpsearch.sql',1453226131,NULL),('phabricator:20150114.oauthserver.client.policy.sql',1453226131,NULL),('phabricator:20150115.applicationemails.sql',1453226131,NULL),('phabricator:20150115.trigger.1.sql',1453226131,NULL),('phabricator:20150115.trigger.2.sql',1453226131,NULL),('phabricator:20150116.maniphestapplicationemails.php',1453226131,NULL),('phabricator:20150120.maniphestdefaultauthor.php',1453226131,NULL),('phabricator:20150124.subs.1.sql',1453226131,NULL),('phabricator:20150129.pastefileapplicationemails.php',1453226131,NULL),('phabricator:20150130.phortune.1.subphid.sql',1453226131,NULL),('phabricator:20150130.phortune.2.subkey.sql',1453226131,NULL),('phabricator:20150131.phortune.1.defaultpayment.sql',1453226131,NULL),('phabricator:20150205.authprovider.autologin.sql',1453226131,NULL),('phabricator:20150205.daemonenv.sql',1453226131,NULL),('phabricator:20150209.invite.sql',1453226131,NULL),('phabricator:20150209.oauthclient.trust.sql',1453226131,NULL),('phabricator:20150210.invitephid.sql',1453226131,NULL),('phabricator:20150212.legalpad.session.1.sql',1453226131,NULL),('phabricator:20150212.legalpad.session.2.sql',1453226131,NULL),('phabricator:20150219.scratch.nonmutable.sql',1453226131,NULL),('phabricator:20150223.daemon.1.id.sql',1453226131,NULL),('phabricator:20150223.daemon.2.idlegacy.sql',1453226131,NULL),('phabricator:20150223.daemon.3.idkey.sql',1453226131,NULL),('phabricator:20150312.filechunk.1.sql',1453226131,NULL),('phabricator:20150312.filechunk.2.sql',1453226131,NULL),('phabricator:20150312.filechunk.3.sql',1453226131,NULL),('phabricator:20150317.conpherence.isroom.1.sql',1453226131,NULL),('phabricator:20150317.conpherence.isroom.2.sql',1453226131,NULL),('phabricator:20150317.conpherence.policy.sql',1453226131,NULL),('phabricator:20150410.nukeruleedit.sql',1453226131,NULL),('phabricator:20150420.invoice.1.sql',1453226131,NULL),('phabricator:20150420.invoice.2.sql',1453226131,NULL),('phabricator:20150425.isclosed.sql',1453226131,NULL),('phabricator:20150427.calendar.1.edge.sql',1453226131,NULL),('phabricator:20150427.calendar.1.xaction.sql',1453226131,NULL),('phabricator:20150427.calendar.2.xaction.sql',1453226131,NULL),('phabricator:20150428.calendar.1.iscancelled.sql',1453226131,NULL),('phabricator:20150428.calendar.1.name.sql',1453226131,NULL),('phabricator:20150429.calendar.1.invitee.sql',1453226131,NULL),('phabricator:20150430.calendar.1.policies.sql',1453226132,NULL),('phabricator:20150430.multimeter.1.sql',1453226132,NULL),('phabricator:20150430.multimeter.2.host.sql',1453226132,NULL),('phabricator:20150430.multimeter.3.viewer.sql',1453226132,NULL),('phabricator:20150430.multimeter.4.context.sql',1453226132,NULL),('phabricator:20150430.multimeter.5.label.sql',1453226132,NULL),('phabricator:20150501.calendar.1.reply.sql',1453226132,NULL),('phabricator:20150501.calendar.2.reply.php',1453226132,NULL),('phabricator:20150501.conpherencepics.sql',1453226132,NULL),('phabricator:20150503.repositorysymbols.1.sql',1453226132,NULL),('phabricator:20150503.repositorysymbols.2.php',1453226132,NULL),('phabricator:20150503.repositorysymbols.3.sql',1453226132,NULL),('phabricator:20150504.symbolsproject.1.php',1453226132,NULL),('phabricator:20150504.symbolsproject.2.sql',1453226132,NULL),('phabricator:20150506.calendarunnamedevents.1.php',1453226132,NULL),('phabricator:20150507.calendar.1.isallday.sql',1453226132,NULL),('phabricator:20150513.user.cache.1.sql',1453226132,NULL),('phabricator:20150514.calendar.status.sql',1453226132,NULL),('phabricator:20150514.phame.blog.xaction.sql',1453226132,NULL),('phabricator:20150514.user.cache.2.sql',1453226132,NULL),('phabricator:20150515.phame.post.xaction.sql',1453226132,NULL),('phabricator:20150515.project.mailkey.1.sql',1453226132,NULL),('phabricator:20150515.project.mailkey.2.php',1453226132,NULL),('phabricator:20150519.calendar.calendaricon.sql',1453226132,NULL),('phabricator:20150521.releephrepository.sql',1453226132,NULL),('phabricator:20150525.diff.hidden.1.sql',1453226132,NULL),('phabricator:20150526.owners.mailkey.1.sql',1453226132,NULL),('phabricator:20150526.owners.mailkey.2.php',1453226132,NULL),('phabricator:20150526.owners.xaction.sql',1453226132,NULL),('phabricator:20150527.calendar.recurringevents.sql',1453226132,NULL),('phabricator:20150601.spaces.1.namespace.sql',1453226132,NULL),('phabricator:20150601.spaces.2.xaction.sql',1453226132,NULL),('phabricator:20150602.mlist.1.sql',1453226132,NULL),('phabricator:20150602.mlist.2.php',1453226132,NULL),('phabricator:20150604.spaces.1.sql',1453226132,NULL),('phabricator:20150605.diviner.edges.sql',1453226132,NULL),('phabricator:20150605.diviner.editPolicy.sql',1453226132,NULL),('phabricator:20150605.diviner.xaction.sql',1453226132,NULL),('phabricator:20150606.mlist.1.php',1453226132,NULL),('phabricator:20150609.inline.sql',1453226132,NULL),('phabricator:20150609.spaces.1.pholio.sql',1453226132,NULL),('phabricator:20150609.spaces.2.maniphest.sql',1453226132,NULL),('phabricator:20150610.spaces.1.desc.sql',1453226132,NULL),('phabricator:20150610.spaces.2.edge.sql',1453226132,NULL),('phabricator:20150610.spaces.3.archive.sql',1453226132,NULL),('phabricator:20150611.spaces.1.mailxaction.sql',1453226132,NULL),('phabricator:20150611.spaces.2.appmail.sql',1453226132,NULL),('phabricator:20150616.divinerrepository.sql',1453226132,NULL),('phabricator:20150617.harbor.1.lint.sql',1453226132,NULL),('phabricator:20150617.harbor.2.unit.sql',1453226132,NULL),('phabricator:20150618.harbor.1.planauto.sql',1453226132,NULL),('phabricator:20150618.harbor.2.stepauto.sql',1453226132,NULL),('phabricator:20150618.harbor.3.buildauto.sql',1453226132,NULL),('phabricator:20150619.conpherencerooms.1.sql',1453226132,NULL),('phabricator:20150619.conpherencerooms.2.sql',1453226132,NULL),('phabricator:20150619.conpherencerooms.3.sql',1453226132,NULL),('phabricator:20150621.phrase.1.sql',1453226132,NULL),('phabricator:20150621.phrase.2.sql',1453226132,NULL),('phabricator:20150622.bulk.1.job.sql',1453226132,NULL),('phabricator:20150622.bulk.2.task.sql',1453226132,NULL),('phabricator:20150622.bulk.3.xaction.sql',1453226132,NULL),('phabricator:20150622.bulk.4.edge.sql',1453226132,NULL),('phabricator:20150622.metamta.1.phid-col.sql',1453226132,NULL),('phabricator:20150622.metamta.2.phid-mig.php',1453226132,NULL),('phabricator:20150622.metamta.3.phid-key.sql',1453226132,NULL),('phabricator:20150622.metamta.4.actor-phid-col.sql',1453226132,NULL),('phabricator:20150622.metamta.5.actor-phid-mig.php',1453226132,NULL),('phabricator:20150622.metamta.6.actor-phid-key.sql',1453226132,NULL),('phabricator:20150624.spaces.1.repo.sql',1453226132,NULL),('phabricator:20150626.spaces.1.calendar.sql',1453226132,NULL),('phabricator:20150630.herald.1.sql',1453226132,NULL),('phabricator:20150630.herald.2.sql',1453226132,NULL),('phabricator:20150701.herald.1.sql',1453226132,NULL),('phabricator:20150701.herald.2.sql',1453226132,NULL),('phabricator:20150702.spaces.1.slowvote.sql',1453226133,NULL),('phabricator:20150706.herald.1.sql',1453226133,NULL),('phabricator:20150707.herald.1.sql',1453226133,NULL),('phabricator:20150708.arcanistproject.sql',1453226133,NULL),('phabricator:20150708.herald.1.sql',1453226133,NULL),('phabricator:20150708.herald.2.sql',1453226133,NULL),('phabricator:20150708.herald.3.sql',1453226133,NULL),('phabricator:20150712.badges.1.sql',1453226133,NULL),('phabricator:20150714.spaces.countdown.1.sql',1453226133,NULL),('phabricator:20150717.herald.1.sql',1453226133,NULL),('phabricator:20150719.countdown.1.sql',1453226133,NULL),('phabricator:20150719.countdown.2.sql',1453226133,NULL),('phabricator:20150719.countdown.3.sql',1453226133,NULL),('phabricator:20150721.phurl.1.url.sql',1453226133,NULL),('phabricator:20150721.phurl.2.xaction.sql',1453226133,NULL),('phabricator:20150721.phurl.3.xactioncomment.sql',1453226133,NULL),('phabricator:20150721.phurl.4.url.sql',1453226133,NULL),('phabricator:20150721.phurl.5.edge.sql',1453226133,NULL),('phabricator:20150721.phurl.6.alias.sql',1453226133,NULL),('phabricator:20150721.phurl.7.authorphid.sql',1453226133,NULL),('phabricator:20150722.dashboard.1.sql',1453226133,NULL),('phabricator:20150722.dashboard.2.sql',1453226133,NULL),('phabricator:20150723.countdown.1.sql',1453226133,NULL),('phabricator:20150724.badges.comments.1.sql',1453226133,NULL),('phabricator:20150724.countdown.comments.1.sql',1453226133,NULL),('phabricator:20150725.badges.mailkey.1.sql',1453226133,NULL),('phabricator:20150725.badges.mailkey.2.php',1453226133,NULL),('phabricator:20150725.badges.viewpolicy.3.sql',1453226133,NULL),('phabricator:20150725.countdown.mailkey.1.sql',1453226133,NULL),('phabricator:20150725.countdown.mailkey.2.php',1453226133,NULL),('phabricator:20150725.slowvote.mailkey.1.sql',1453226133,NULL),('phabricator:20150725.slowvote.mailkey.2.php',1453226133,NULL),('phabricator:20150727.heraldaction.1.sql',1453226133,NULL),('phabricator:20150730.herald.1.sql',1453226133,NULL),('phabricator:20150730.herald.2.sql',1453226133,NULL),('phabricator:20150730.herald.3.sql',1453226133,NULL),('phabricator:20150730.herald.4.sql',1453226133,NULL),('phabricator:20150730.herald.5.sql',1453226133,NULL),('phabricator:20150730.herald.6.sql',1453226133,NULL),('phabricator:20150730.herald.7.sql',1453226133,NULL),('phabricator:20150803.herald.1.sql',1453226133,NULL),('phabricator:20150803.herald.2.sql',1453226133,NULL),('phabricator:20150804.ponder.answer.mailkey.1.sql',1453226133,NULL),('phabricator:20150804.ponder.answer.mailkey.2.php',1453226133,NULL),('phabricator:20150804.ponder.question.1.sql',1453226133,NULL),('phabricator:20150804.ponder.question.2.sql',1453226133,NULL),('phabricator:20150804.ponder.question.3.sql',1453226133,NULL),('phabricator:20150804.ponder.spaces.4.sql',1453226133,NULL),('phabricator:20150805.paste.status.1.sql',1453226133,NULL),('phabricator:20150805.paste.status.2.sql',1453226133,NULL),('phabricator:20150806.ponder.answer.1.sql',1453226133,NULL),('phabricator:20150806.ponder.editpolicy.2.sql',1453226133,NULL),('phabricator:20150806.ponder.status.1.sql',1453226133,NULL),('phabricator:20150806.ponder.status.2.sql',1453226133,NULL),('phabricator:20150806.ponder.status.3.sql',1453226133,NULL),('phabricator:20150808.ponder.vote.1.sql',1453226133,NULL),('phabricator:20150808.ponder.vote.2.sql',1453226133,NULL),('phabricator:20150812.ponder.answer.1.sql',1453226133,NULL),('phabricator:20150812.ponder.answer.2.sql',1453226133,NULL),('phabricator:20150814.harbormater.artifact.phid.sql',1453226133,NULL),('phabricator:20150815.owners.status.1.sql',1453226133,NULL),('phabricator:20150815.owners.status.2.sql',1453226133,NULL),('phabricator:20150823.nuance.queue.1.sql',1453226133,NULL),('phabricator:20150823.nuance.queue.2.sql',1453226133,NULL),('phabricator:20150823.nuance.queue.3.sql',1453226133,NULL),('phabricator:20150823.nuance.queue.4.sql',1453226133,NULL),('phabricator:20150828.ponder.wiki.1.sql',1453226133,NULL),('phabricator:20150829.ponder.dupe.1.sql',1453226133,NULL),('phabricator:20150904.herald.1.sql',1453226133,NULL),('phabricator:20150906.mailinglist.sql',1453226133,NULL),('phabricator:20150910.owners.custom.1.sql',1453226133,NULL),('phabricator:20150916.drydock.slotlocks.1.sql',1453226133,NULL),('phabricator:20150922.drydock.commands.1.sql',1453226133,NULL),('phabricator:20150923.drydock.resourceid.1.sql',1453226133,NULL),('phabricator:20150923.drydock.resourceid.2.sql',1453226133,NULL),('phabricator:20150923.drydock.resourceid.3.sql',1453226133,NULL),('phabricator:20150923.drydock.taskid.1.sql',1453226133,NULL),('phabricator:20150924.drydock.disable.1.sql',1453226133,NULL),('phabricator:20150924.drydock.status.1.sql',1453226133,NULL),('phabricator:20150928.drydock.rexpire.1.sql',1453226133,NULL),('phabricator:20150930.drydock.log.1.sql',1453226134,NULL),('phabricator:20151001.drydock.rname.1.sql',1453226134,NULL),('phabricator:20151002.dashboard.status.1.sql',1453226134,NULL),('phabricator:20151002.harbormaster.bparam.1.sql',1453226134,NULL),('phabricator:20151009.drydock.auth.1.sql',1453226134,NULL),('phabricator:20151010.drydock.auth.2.sql',1453226134,NULL),('phabricator:20151013.drydock.op.1.sql',1453226134,NULL),('phabricator:20151023.harborpolicy.1.sql',1453226134,NULL),('phabricator:20151023.harborpolicy.2.php',1453226134,NULL),('phabricator:20151023.patchduration.sql',1453226134,14142),('phabricator:20151030.harbormaster.initiator.sql',1453226134,35726),('phabricator:20151106.editengine.1.table.sql',1453226134,8030),('phabricator:20151106.editengine.2.xactions.sql',1453226134,7392),('phabricator:20151106.phame.post.mailkey.1.sql',1453226134,18595),('phabricator:20151106.phame.post.mailkey.2.php',1453226134,1616),('phabricator:20151107.phame.blog.mailkey.1.sql',1453226134,19832),('phabricator:20151107.phame.blog.mailkey.2.php',1453226134,1389),('phabricator:20151108.phame.blog.joinpolicy.sql',1453226134,16415),('phabricator:20151108.xhpast.stderr.sql',1453226134,24424),('phabricator:20151109.phame.post.comments.1.sql',1453226134,8007),('phabricator:20151109.repository.coverage.1.sql',1453226134,1405),('phabricator:20151109.xhpast.db.1.sql',1453226134,1559),('phabricator:20151109.xhpast.db.2.sql',1453226134,599),('phabricator:20151110.daemonenvhash.sql',1453226134,39904),('phabricator:20151111.phame.blog.archive.1.sql',1453226134,15720),('phabricator:20151111.phame.blog.archive.2.sql',1453226134,534),('phabricator:20151112.herald.edge.sql',1453226134,13618),('phabricator:20151116.owners.edge.sql',1453226134,13570),('phabricator:20151128.phame.blog.picture.1.sql',1453226134,15964),('phabricator:20151130.phurl.mailkey.1.sql',1453226134,10402),('phabricator:20151130.phurl.mailkey.2.php',1453226134,1457),('phabricator:20151202.versioneddraft.1.sql',1453226134,8923),('phabricator:20151207.editengine.1.sql',1453226134,76111),('phabricator:20151210.land.1.refphid.sql',1453226134,19463),('phabricator:20151210.land.2.refphid.php',1453226134,833),('phabricator:20151215.phame.1.autotitle.sql',1453226134,21510),('phabricator:20151218.key.1.keyphid.sql',1453226134,14834),('phabricator:20151218.key.2.keyphid.php',1453226134,429),('phabricator:20151219.proj.01.prislug.sql',1453226134,21059),('phabricator:20151219.proj.02.prislugkey.sql',1453226134,16233),('phabricator:20151219.proj.03.copyslug.sql',1453226134,474),('phabricator:20151219.proj.04.dropslugkey.sql',1453226134,7782),('phabricator:20151219.proj.05.dropslug.sql',1453226134,20865),('phabricator:20151219.proj.06.defaultpolicy.php',1453226134,1358),('phabricator:20151219.proj.07.viewnull.sql',1453226134,16753),('phabricator:20151219.proj.08.editnull.sql',1453226134,13683),('phabricator:20151219.proj.09.joinnull.sql',1453226134,10924),('phabricator:20151219.proj.10.subcolumns.sql',1453226134,129879),('phabricator:20151219.proj.11.subprojectphids.sql',1453226135,26586),('phabricator:20151221.search.1.version.sql',1453226135,14029),('phabricator:20151221.search.2.ownersngrams.sql',1453226135,7390),('phabricator:20151221.search.3.reindex.php',1453226135,436),('phabricator:20151223.proj.01.paths.sql',1453226135,22387),('phabricator:20151223.proj.02.depths.sql',1453226135,28069),('phabricator:20151223.proj.03.pathkey.sql',1453226135,12562),('phabricator:20151223.proj.04.keycol.sql',1453226135,24719),('phabricator:20151223.proj.05.updatekeys.php',1453226135,463),('phabricator:20151223.proj.06.uniq.sql',1453226135,12857),('phabricator:20151226.reop.1.sql',1453226135,19351),('phabricator:20151227.proj.01.materialize.sql',1453226135,697),('phabricator:20151231.proj.01.icon.php',1453226135,3273),('phabricator:20160110.repo.01.slug.sql',1453226135,31556),('phabricator:20160110.repo.02.slug.php',1453226135,461),('phabricator:20160111.repo.01.slugx.sql',1453226135,745),('phabricator:20160112.repo.01.uri.sql',1453226135,7698),('phabricator:20160112.repo.02.uri.index.php',1453226135,437),('phabricator:20160113.propanel.1.storage.sql',1453226135,6273),('phabricator:20160113.propanel.2.xaction.sql',1453226135,7608),('phabricator:daemonstatus.sql',1453226123,NULL),('phabricator:daemonstatuskey.sql',1453226123,NULL),('phabricator:daemontaskarchive.sql',1453226124,NULL),('phabricator:db.almanac',1453226117,NULL),('phabricator:db.audit',1453226117,NULL),('phabricator:db.auth',1453226117,NULL),('phabricator:db.badges',1453226117,NULL),('phabricator:db.cache',1453226117,NULL),('phabricator:db.calendar',1453226117,NULL),('phabricator:db.chatlog',1453226117,NULL),('phabricator:db.conduit',1453226117,NULL),('phabricator:db.config',1453226117,NULL),('phabricator:db.conpherence',1453226117,NULL),('phabricator:db.countdown',1453226117,NULL),('phabricator:db.daemon',1453226117,NULL),('phabricator:db.dashboard',1453226117,NULL),('phabricator:db.differential',1453226117,NULL),('phabricator:db.diviner',1453226117,NULL),('phabricator:db.doorkeeper',1453226117,NULL),('phabricator:db.draft',1453226117,NULL),('phabricator:db.drydock',1453226117,NULL),('phabricator:db.fact',1453226117,NULL),('phabricator:db.feed',1453226117,NULL),('phabricator:db.file',1453226117,NULL),('phabricator:db.flag',1453226117,NULL),('phabricator:db.fund',1453226117,NULL),('phabricator:db.harbormaster',1453226117,NULL),('phabricator:db.herald',1453226117,NULL),('phabricator:db.legalpad',1453226117,NULL),('phabricator:db.maniphest',1453226117,NULL),('phabricator:db.meta_data',1453226117,NULL),('phabricator:db.metamta',1453226117,NULL),('phabricator:db.multimeter',1453226117,NULL),('phabricator:db.nuance',1453226117,NULL),('phabricator:db.oauth_server',1453226117,NULL),('phabricator:db.owners',1453226117,NULL),('phabricator:db.passphrase',1453226117,NULL),('phabricator:db.pastebin',1453226117,NULL),('phabricator:db.phame',1453226117,NULL),('phabricator:db.phlux',1453226117,NULL),('phabricator:db.pholio',1453226117,NULL),('phabricator:db.phortune',1453226117,NULL),('phabricator:db.phragment',1453226117,NULL),('phabricator:db.phrequent',1453226117,NULL),('phabricator:db.phriction',1453226117,NULL),('phabricator:db.phurl',1453226117,NULL),('phabricator:db.policy',1453226117,NULL),('phabricator:db.ponder',1453226117,NULL),('phabricator:db.project',1453226117,NULL),('phabricator:db.releeph',1453226117,NULL),('phabricator:db.repository',1453226117,NULL),('phabricator:db.search',1453226117,NULL),('phabricator:db.slowvote',1453226117,NULL),('phabricator:db.spaces',1453226117,NULL),('phabricator:db.system',1453226117,NULL),('phabricator:db.timeline',1453226117,NULL),('phabricator:db.token',1453226117,NULL),('phabricator:db.user',1453226117,NULL),('phabricator:db.worker',1453226117,NULL),('phabricator:db.xhpast',1453226117,NULL),('phabricator:db.xhpastview',1453226117,NULL),('phabricator:db.xhprof',1453226117,NULL),('phabricator:differentialbookmarks.sql',1453226123,NULL),('phabricator:draft-metadata.sql',1453226123,NULL),('phabricator:dropfileproxyimage.sql',1453226124,NULL),('phabricator:drydockresoucetype.sql',1453226124,NULL),('phabricator:drydocktaskid.sql',1453226124,NULL),('phabricator:edgetype.sql',1453226123,NULL),('phabricator:emailtable.sql',1453226123,NULL),('phabricator:emailtableport.sql',1453226123,NULL),('phabricator:emailtableremove.sql',1453226123,NULL),('phabricator:fact-raw.sql',1453226123,NULL),('phabricator:harbormasterobject.sql',1453226123,NULL),('phabricator:holidays.sql',1453226123,NULL),('phabricator:ldapinfo.sql',1453226123,NULL),('phabricator:legalpad-mailkey-populate.php',1453226125,NULL),('phabricator:legalpad-mailkey.sql',1453226125,NULL),('phabricator:liskcounters-task.sql',1453226124,NULL),('phabricator:liskcounters.php',1453226124,NULL),('phabricator:liskcounters.sql',1453226124,NULL),('phabricator:maniphestxcache.sql',1453226123,NULL),('phabricator:markupcache.sql',1453226123,NULL),('phabricator:migrate-differential-dependencies.php',1453226123,NULL),('phabricator:migrate-maniphest-dependencies.php',1453226123,NULL),('phabricator:migrate-maniphest-revisions.php',1453226123,NULL),('phabricator:migrate-project-edges.php',1453226123,NULL),('phabricator:owners-exclude.sql',1453226124,NULL),('phabricator:pastepolicy.sql',1453226123,NULL),('phabricator:phameblog.sql',1453226123,NULL),('phabricator:phamedomain.sql',1453226123,NULL),('phabricator:phameoneblog.sql',1453226123,NULL),('phabricator:phamepolicy.sql',1453226123,NULL),('phabricator:phiddrop.sql',1453226123,NULL),('phabricator:pholio.sql',1453226124,NULL),('phabricator:policy-project.sql',1453226123,NULL),('phabricator:ponder-comments.sql',1453226123,NULL),('phabricator:ponder-mailkey-populate.php',1453226123,NULL),('phabricator:ponder-mailkey.sql',1453226123,NULL),('phabricator:ponder.sql',1453226123,NULL),('phabricator:releeph.sql',1453226124,NULL),('phabricator:repository-lint.sql',1453226124,NULL),('phabricator:statustxt.sql',1453226124,NULL),('phabricator:symbolcontexts.sql',1453226123,NULL),('phabricator:testdatabase.sql',1453226123,NULL),('phabricator:threadtopic.sql',1453226123,NULL),('phabricator:userstatus.sql',1453226123,NULL),('phabricator:usertranslation.sql',1453226123,NULL),('phabricator:xhprof.sql',1453226123,NULL); +INSERT INTO `patch_status` VALUES ('phabricator:000.project.sql',1466802850,NULL),('phabricator:0000.legacy.sql',1466802850,NULL),('phabricator:001.maniphest_projects.sql',1466802850,NULL),('phabricator:002.oauth.sql',1466802850,NULL),('phabricator:003.more_oauth.sql',1466802851,NULL),('phabricator:004.daemonrepos.sql',1466802851,NULL),('phabricator:005.workers.sql',1466802851,NULL),('phabricator:006.repository.sql',1466802851,NULL),('phabricator:007.daemonlog.sql',1466802851,NULL),('phabricator:008.repoopt.sql',1466802851,NULL),('phabricator:009.repo_summary.sql',1466802851,NULL),('phabricator:010.herald.sql',1466802851,NULL),('phabricator:011.badcommit.sql',1466802851,NULL),('phabricator:012.dropphidtype.sql',1466802851,NULL),('phabricator:013.commitdetail.sql',1466802851,NULL),('phabricator:014.shortcuts.sql',1466802851,NULL),('phabricator:015.preferences.sql',1466802851,NULL),('phabricator:016.userrealnameindex.sql',1466802851,NULL),('phabricator:017.sessionkeys.sql',1466802851,NULL),('phabricator:018.owners.sql',1466802851,NULL),('phabricator:019.arcprojects.sql',1466802851,NULL),('phabricator:020.pathcapital.sql',1466802851,NULL),('phabricator:021.xhpastview.sql',1466802851,NULL),('phabricator:022.differentialcommit.sql',1466802851,NULL),('phabricator:023.dxkeys.sql',1466802851,NULL),('phabricator:024.mlistkeys.sql',1466802851,NULL),('phabricator:025.commentopt.sql',1466802851,NULL),('phabricator:026.diffpropkey.sql',1466802851,NULL),('phabricator:027.metamtakeys.sql',1466802851,NULL),('phabricator:028.systemagent.sql',1466802851,NULL),('phabricator:029.cursors.sql',1466802851,NULL),('phabricator:030.imagemacro.sql',1466802851,NULL),('phabricator:031.workerrace.sql',1466802851,NULL),('phabricator:032.viewtime.sql',1466802851,NULL),('phabricator:033.privtest.sql',1466802851,NULL),('phabricator:034.savedheader.sql',1466802851,NULL),('phabricator:035.proxyimage.sql',1466802851,NULL),('phabricator:036.mailkey.sql',1466802851,NULL),('phabricator:037.setuptest.sql',1466802851,NULL),('phabricator:038.admin.sql',1466802851,NULL),('phabricator:039.userlog.sql',1466802851,NULL),('phabricator:040.transform.sql',1466802851,NULL),('phabricator:041.heraldrepetition.sql',1466802851,NULL),('phabricator:042.commentmetadata.sql',1466802852,NULL),('phabricator:043.pastebin.sql',1466802852,NULL),('phabricator:044.countdown.sql',1466802852,NULL),('phabricator:045.timezone.sql',1466802852,NULL),('phabricator:046.conduittoken.sql',1466802852,NULL),('phabricator:047.projectstatus.sql',1466802852,NULL),('phabricator:048.relationshipkeys.sql',1466802852,NULL),('phabricator:049.projectowner.sql',1466802852,NULL),('phabricator:050.taskdenormal.sql',1466802852,NULL),('phabricator:051.projectfilter.sql',1466802852,NULL),('phabricator:052.pastelanguage.sql',1466802852,NULL),('phabricator:053.feed.sql',1466802852,NULL),('phabricator:054.subscribers.sql',1466802852,NULL),('phabricator:055.add_author_to_files.sql',1466802852,NULL),('phabricator:056.slowvote.sql',1466802852,NULL),('phabricator:057.parsecache.sql',1466802852,NULL),('phabricator:058.missingkeys.sql',1466802852,NULL),('phabricator:059.engines.php',1466802852,NULL),('phabricator:060.phriction.sql',1466802852,NULL),('phabricator:061.phrictioncontent.sql',1466802852,NULL),('phabricator:062.phrictionmenu.sql',1466802852,NULL),('phabricator:063.pasteforks.sql',1466802852,NULL),('phabricator:064.subprojects.sql',1466802852,NULL),('phabricator:065.sshkeys.sql',1466802852,NULL),('phabricator:066.phrictioncontent.sql',1466802852,NULL),('phabricator:067.preferences.sql',1466802852,NULL),('phabricator:068.maniphestauxiliarystorage.sql',1466802852,NULL),('phabricator:069.heraldxscript.sql',1466802852,NULL),('phabricator:070.differentialaux.sql',1466802852,NULL),('phabricator:071.contentsource.sql',1466802852,NULL),('phabricator:072.blamerevert.sql',1466802852,NULL),('phabricator:073.reposymbols.sql',1466802852,NULL),('phabricator:074.affectedpath.sql',1466802852,NULL),('phabricator:075.revisionhash.sql',1466802852,NULL),('phabricator:076.indexedlanguages.sql',1466802852,NULL),('phabricator:077.originalemail.sql',1466802852,NULL),('phabricator:078.nametoken.sql',1466802852,NULL),('phabricator:079.nametokenindex.php',1466802852,NULL),('phabricator:080.filekeys.sql',1466802852,NULL),('phabricator:081.filekeys.php',1466802852,NULL),('phabricator:082.xactionkey.sql',1466802852,NULL),('phabricator:083.dxviewtime.sql',1466802852,NULL),('phabricator:084.pasteauthorkey.sql',1466802852,NULL),('phabricator:085.packagecommitrelationship.sql',1466802852,NULL),('phabricator:086.formeraffil.sql',1466802852,NULL),('phabricator:087.phrictiondelete.sql',1466802853,NULL),('phabricator:088.audit.sql',1466802853,NULL),('phabricator:089.projectwiki.sql',1466802853,NULL),('phabricator:090.forceuniqueprojectnames.php',1466802853,NULL),('phabricator:091.uniqueslugkey.sql',1466802853,NULL),('phabricator:092.dropgithubnotification.sql',1466802853,NULL),('phabricator:093.gitremotes.php',1466802853,NULL),('phabricator:094.phrictioncolumn.sql',1466802853,NULL),('phabricator:095.directory.sql',1466802853,NULL),('phabricator:096.filename.sql',1466802853,NULL),('phabricator:097.heraldruletypes.sql',1466802853,NULL),('phabricator:098.heraldruletypemigration.php',1466802853,NULL),('phabricator:099.drydock.sql',1466802853,NULL),('phabricator:100.projectxaction.sql',1466802853,NULL),('phabricator:101.heraldruleapplied.sql',1466802853,NULL),('phabricator:102.heraldcleanup.php',1466802853,NULL),('phabricator:103.heraldedithistory.sql',1466802853,NULL),('phabricator:104.searchkey.sql',1466802853,NULL),('phabricator:105.mimetype.sql',1466802853,NULL),('phabricator:106.chatlog.sql',1466802853,NULL),('phabricator:107.oauthserver.sql',1466802853,NULL),('phabricator:108.oauthscope.sql',1466802853,NULL),('phabricator:109.oauthclientphidkey.sql',1466802853,NULL),('phabricator:110.commitaudit.sql',1466802853,NULL),('phabricator:111.commitauditmigration.php',1466802853,NULL),('phabricator:112.oauthaccesscoderedirecturi.sql',1466802853,NULL),('phabricator:113.lastreviewer.sql',1466802853,NULL),('phabricator:114.auditrequest.sql',1466802853,NULL),('phabricator:115.prepareutf8.sql',1466802853,NULL),('phabricator:116.utf8-backup-first-expect-wait.sql',1466802855,NULL),('phabricator:117.repositorydescription.php',1466802855,NULL),('phabricator:118.auditinline.sql',1466802855,NULL),('phabricator:119.filehash.sql',1466802855,NULL),('phabricator:120.noop.sql',1466802855,NULL),('phabricator:121.drydocklog.sql',1466802855,NULL),('phabricator:122.flag.sql',1466802855,NULL),('phabricator:123.heraldrulelog.sql',1466802855,NULL),('phabricator:124.subpriority.sql',1466802855,NULL),('phabricator:125.ipv6.sql',1466802855,NULL),('phabricator:126.edges.sql',1466802855,NULL),('phabricator:127.userkeybody.sql',1466802855,NULL),('phabricator:128.phabricatorcom.sql',1466802855,NULL),('phabricator:129.savedquery.sql',1466802855,NULL),('phabricator:130.denormalrevisionquery.sql',1466802855,NULL),('phabricator:131.migraterevisionquery.php',1466802855,NULL),('phabricator:132.phame.sql',1466802855,NULL),('phabricator:133.imagemacro.sql',1466802855,NULL),('phabricator:134.emptysearch.sql',1466802855,NULL),('phabricator:135.datecommitted.sql',1466802855,NULL),('phabricator:136.sex.sql',1466802855,NULL),('phabricator:137.auditmetadata.sql',1466802855,NULL),('phabricator:138.notification.sql',1466802855,NULL),('phabricator:20121209.pholioxactions.sql',1466802856,NULL),('phabricator:20121209.xmacroadd.sql',1466802856,NULL),('phabricator:20121209.xmacromigrate.php',1466802856,NULL),('phabricator:20121209.xmacromigratekey.sql',1466802856,NULL),('phabricator:20121220.generalcache.sql',1466802856,NULL),('phabricator:20121226.config.sql',1466802856,NULL),('phabricator:20130101.confxaction.sql',1466802856,NULL),('phabricator:20130102.metamtareceivedmailmessageidhash.sql',1466802856,NULL),('phabricator:20130103.filemetadata.sql',1466802856,NULL),('phabricator:20130111.conpherence.sql',1466802856,NULL),('phabricator:20130127.altheraldtranscript.sql',1466802856,NULL),('phabricator:20130131.conpherencepics.sql',1466802857,NULL),('phabricator:20130201.revisionunsubscribed.php',1466802856,NULL),('phabricator:20130201.revisionunsubscribed.sql',1466802857,NULL),('phabricator:20130214.chatlogchannel.sql',1466802857,NULL),('phabricator:20130214.chatlogchannelid.sql',1466802857,NULL),('phabricator:20130214.token.sql',1466802857,NULL),('phabricator:20130215.phabricatorfileaddttl.sql',1466802857,NULL),('phabricator:20130217.cachettl.sql',1466802857,NULL),('phabricator:20130218.longdaemon.sql',1466802857,NULL),('phabricator:20130218.updatechannelid.php',1466802857,NULL),('phabricator:20130219.commitsummary.sql',1466802857,NULL),('phabricator:20130219.commitsummarymig.php',1466802857,NULL),('phabricator:20130222.dropchannel.sql',1466802857,NULL),('phabricator:20130226.commitkey.sql',1466802857,NULL),('phabricator:20130304.lintauthor.sql',1466802857,NULL),('phabricator:20130310.xactionmeta.sql',1466802857,NULL),('phabricator:20130317.phrictionedge.sql',1466802857,NULL),('phabricator:20130319.conpherence.sql',1466802857,NULL),('phabricator:20130319.phabricatorfileexplicitupload.sql',1466802857,NULL),('phabricator:20130320.phlux.sql',1466802857,NULL),('phabricator:20130321.token.sql',1466802857,NULL),('phabricator:20130322.phortune.sql',1466802857,NULL),('phabricator:20130323.phortunepayment.sql',1466802857,NULL),('phabricator:20130324.phortuneproduct.sql',1466802857,NULL),('phabricator:20130330.phrequent.sql',1466802857,NULL),('phabricator:20130403.conpherencecache.sql',1466802857,NULL),('phabricator:20130403.conpherencecachemig.php',1466802857,NULL),('phabricator:20130409.commitdrev.php',1466802857,NULL),('phabricator:20130417.externalaccount.sql',1466802857,NULL),('phabricator:20130423.conpherenceindices.sql',1466802857,NULL),('phabricator:20130423.phortunepaymentrevised.sql',1466802857,NULL),('phabricator:20130423.updateexternalaccount.sql',1466802857,NULL),('phabricator:20130426.search_savedquery.sql',1466802857,NULL),('phabricator:20130502.countdownrevamp1.sql',1466802857,NULL),('phabricator:20130502.countdownrevamp2.php',1466802857,NULL),('phabricator:20130502.countdownrevamp3.sql',1466802857,NULL),('phabricator:20130507.releephrqmailkey.sql',1466802857,NULL),('phabricator:20130507.releephrqmailkeypop.php',1466802857,NULL),('phabricator:20130507.releephrqsimplifycols.sql',1466802857,NULL),('phabricator:20130508.releephtransactions.sql',1466802857,NULL),('phabricator:20130508.releephtransactionsmig.php',1466802857,NULL),('phabricator:20130508.search_namedquery.sql',1466802857,NULL),('phabricator:20130513.receviedmailstatus.sql',1466802857,NULL),('phabricator:20130519.diviner.sql',1466802857,NULL),('phabricator:20130521.dropconphimages.sql',1466802857,NULL),('phabricator:20130523.maniphest_owners.sql',1466802857,NULL),('phabricator:20130524.repoxactions.sql',1466802857,NULL),('phabricator:20130529.macroauthor.sql',1466802857,NULL),('phabricator:20130529.macroauthormig.php',1466802857,NULL),('phabricator:20130530.macrodatekey.sql',1466802857,NULL),('phabricator:20130530.pastekeys.sql',1466802857,NULL),('phabricator:20130530.sessionhash.php',1466802857,NULL),('phabricator:20130531.filekeys.sql',1466802857,NULL),('phabricator:20130602.morediviner.sql',1466802858,NULL),('phabricator:20130602.namedqueries.sql',1466802858,NULL),('phabricator:20130606.userxactions.sql',1466802858,NULL),('phabricator:20130607.xaccount.sql',1466802858,NULL),('phabricator:20130611.migrateoauth.php',1466802858,NULL),('phabricator:20130611.nukeldap.php',1466802858,NULL),('phabricator:20130613.authdb.sql',1466802858,NULL),('phabricator:20130619.authconf.php',1466802858,NULL),('phabricator:20130620.diffxactions.sql',1466802858,NULL),('phabricator:20130621.diffcommentphid.sql',1466802858,NULL),('phabricator:20130621.diffcommentphidmig.php',1466802858,NULL),('phabricator:20130621.diffcommentunphid.sql',1466802858,NULL),('phabricator:20130622.doorkeeper.sql',1466802858,NULL),('phabricator:20130628.legalpadv0.sql',1466802858,NULL),('phabricator:20130701.conduitlog.sql',1466802858,NULL),('phabricator:20130703.legalpaddocdenorm.php',1466802858,NULL),('phabricator:20130703.legalpaddocdenorm.sql',1466802858,NULL),('phabricator:20130709.droptimeline.sql',1466802858,NULL),('phabricator:20130709.legalpadsignature.sql',1466802858,NULL),('phabricator:20130711.pholioimageobsolete.php',1466802858,NULL),('phabricator:20130711.pholioimageobsolete.sql',1466802858,NULL),('phabricator:20130711.pholioimageobsolete2.sql',1466802858,NULL),('phabricator:20130711.trimrealnames.php',1466802858,NULL),('phabricator:20130714.votexactions.sql',1466802858,NULL),('phabricator:20130715.votecomments.php',1466802858,NULL),('phabricator:20130715.voteedges.sql',1466802858,NULL),('phabricator:20130716.archivememberlessprojects.php',1466802858,NULL),('phabricator:20130722.pholioreplace.sql',1466802858,NULL),('phabricator:20130723.taskstarttime.sql',1466802858,NULL),('phabricator:20130726.ponderxactions.sql',1466802858,NULL),('phabricator:20130727.ponderquestionstatus.sql',1466802858,NULL),('phabricator:20130728.ponderunique.php',1466802858,NULL),('phabricator:20130728.ponderuniquekey.sql',1466802858,NULL),('phabricator:20130728.ponderxcomment.php',1466802858,NULL),('phabricator:20130731.releephcutpointidentifier.sql',1466802858,NULL),('phabricator:20130731.releephproject.sql',1466802858,NULL),('phabricator:20130731.releephrepoid.sql',1466802858,NULL),('phabricator:20130801.pastexactions.php',1466802858,NULL),('phabricator:20130801.pastexactions.sql',1466802858,NULL),('phabricator:20130802.heraldphid.sql',1466802858,NULL),('phabricator:20130802.heraldphids.php',1466802858,NULL),('phabricator:20130802.heraldphidukey.sql',1466802858,NULL),('phabricator:20130802.heraldxactions.sql',1466802858,NULL),('phabricator:20130805.pasteedges.sql',1466802858,NULL),('phabricator:20130805.pastemailkey.sql',1466802858,NULL),('phabricator:20130805.pastemailkeypop.php',1466802858,NULL),('phabricator:20130814.usercustom.sql',1466802858,NULL),('phabricator:20130820.file-mailkey-populate.php',1466802859,NULL),('phabricator:20130820.filemailkey.sql',1466802859,NULL),('phabricator:20130820.filexactions.sql',1466802859,NULL),('phabricator:20130820.releephxactions.sql',1466802858,NULL),('phabricator:20130826.divinernode.sql',1466802859,NULL),('phabricator:20130912.maniphest.1.touch.sql',1466802859,NULL),('phabricator:20130912.maniphest.2.created.sql',1466802859,NULL),('phabricator:20130912.maniphest.3.nameindex.sql',1466802859,NULL),('phabricator:20130912.maniphest.4.fillindex.php',1466802859,NULL),('phabricator:20130913.maniphest.1.migratesearch.php',1466802859,NULL),('phabricator:20130914.usercustom.sql',1466802859,NULL),('phabricator:20130915.maniphestcustom.sql',1466802859,NULL),('phabricator:20130915.maniphestmigrate.php',1466802859,NULL),('phabricator:20130915.maniphestqdrop.sql',1466802859,NULL),('phabricator:20130919.mfieldconf.php',1466802859,NULL),('phabricator:20130920.repokeyspolicy.sql',1466802859,NULL),('phabricator:20130921.mtransactions.sql',1466802859,NULL),('phabricator:20130921.xmigratemaniphest.php',1466802859,NULL),('phabricator:20130923.mrename.sql',1466802859,NULL),('phabricator:20130924.mdraftkey.sql',1466802859,NULL),('phabricator:20130925.mpolicy.sql',1466802859,NULL),('phabricator:20130925.xpolicy.sql',1466802859,NULL),('phabricator:20130926.dcustom.sql',1466802859,NULL),('phabricator:20130926.dinkeys.sql',1466802859,NULL),('phabricator:20130926.dinline.php',1466802859,NULL),('phabricator:20130927.audiomacro.sql',1466802859,NULL),('phabricator:20130929.filepolicy.sql',1466802859,NULL),('phabricator:20131004.dxedgekey.sql',1466802859,NULL),('phabricator:20131004.dxreviewers.php',1466802859,NULL),('phabricator:20131006.hdisable.sql',1466802859,NULL),('phabricator:20131010.pstorage.sql',1466802859,NULL),('phabricator:20131015.cpolicy.sql',1466802859,NULL),('phabricator:20131020.col1.sql',1466802859,NULL),('phabricator:20131020.harbormaster.sql',1466802859,NULL),('phabricator:20131020.pcustom.sql',1466802859,NULL),('phabricator:20131020.pxaction.sql',1466802859,NULL),('phabricator:20131020.pxactionmig.php',1466802859,NULL),('phabricator:20131025.repopush.sql',1466802859,NULL),('phabricator:20131026.commitstatus.sql',1466802859,NULL),('phabricator:20131030.repostatusmessage.sql',1466802859,NULL),('phabricator:20131031.vcspassword.sql',1466802859,NULL),('phabricator:20131105.buildstep.sql',1466802859,NULL),('phabricator:20131106.diffphid.1.col.sql',1466802859,NULL),('phabricator:20131106.diffphid.2.mig.php',1466802859,NULL),('phabricator:20131106.diffphid.3.key.sql',1466802859,NULL),('phabricator:20131106.nuance-v0.sql',1466802859,NULL),('phabricator:20131107.buildlog.sql',1466802859,NULL),('phabricator:20131112.userverified.1.col.sql',1466802859,NULL),('phabricator:20131112.userverified.2.mig.php',1466802859,NULL),('phabricator:20131118.ownerorder.php',1466802859,NULL),('phabricator:20131119.passphrase.sql',1466802859,NULL),('phabricator:20131120.nuancesourcetype.sql',1466802860,NULL),('phabricator:20131121.passphraseedge.sql',1466802860,NULL),('phabricator:20131121.repocredentials.1.col.sql',1466802860,NULL),('phabricator:20131121.repocredentials.2.mig.php',1466802860,NULL),('phabricator:20131122.repomirror.sql',1466802860,NULL),('phabricator:20131123.drydockblueprintpolicy.sql',1466802860,NULL),('phabricator:20131129.drydockresourceblueprint.sql',1466802860,NULL),('phabricator:20131204.pushlog.sql',1466802860,NULL),('phabricator:20131205.buildsteporder.sql',1466802860,NULL),('phabricator:20131205.buildstepordermig.php',1466802860,NULL),('phabricator:20131205.buildtargets.sql',1466802860,NULL),('phabricator:20131206.phragment.sql',1466802860,NULL),('phabricator:20131206.phragmentnull.sql',1466802860,NULL),('phabricator:20131208.phragmentsnapshot.sql',1466802860,NULL),('phabricator:20131211.phragmentedges.sql',1466802860,NULL),('phabricator:20131217.pushlogphid.1.col.sql',1466802860,NULL),('phabricator:20131217.pushlogphid.2.mig.php',1466802860,NULL),('phabricator:20131217.pushlogphid.3.key.sql',1466802860,NULL),('phabricator:20131219.pxdrop.sql',1466802860,NULL),('phabricator:20131224.harbormanual.sql',1466802860,NULL),('phabricator:20131227.heraldobject.sql',1466802860,NULL),('phabricator:20131231.dropshortcut.sql',1466802860,NULL),('phabricator:20131302.maniphestvalue.sql',1466802857,NULL),('phabricator:20140104.harbormastercmd.sql',1466802860,NULL),('phabricator:20140106.macromailkey.1.sql',1466802860,NULL),('phabricator:20140106.macromailkey.2.php',1466802860,NULL),('phabricator:20140108.ddbpname.1.sql',1466802860,NULL),('phabricator:20140108.ddbpname.2.php',1466802860,NULL),('phabricator:20140109.ddxactions.sql',1466802860,NULL),('phabricator:20140109.projectcolumnsdates.sql',1466802860,NULL),('phabricator:20140113.legalpadsig.1.sql',1466802860,NULL),('phabricator:20140113.legalpadsig.2.php',1466802860,NULL),('phabricator:20140115.auth.1.id.sql',1466802860,NULL),('phabricator:20140115.auth.2.expires.sql',1466802860,NULL),('phabricator:20140115.auth.3.unlimit.php',1466802860,NULL),('phabricator:20140115.legalpadsigkey.sql',1466802860,NULL),('phabricator:20140116.reporefcursor.sql',1466802860,NULL),('phabricator:20140126.diff.1.parentrevisionid.sql',1466802860,NULL),('phabricator:20140126.diff.2.repositoryphid.sql',1466802860,NULL),('phabricator:20140130.dash.1.board.sql',1466802860,NULL),('phabricator:20140130.dash.2.panel.sql',1466802860,NULL),('phabricator:20140130.dash.3.boardxaction.sql',1466802860,NULL),('phabricator:20140130.dash.4.panelxaction.sql',1466802860,NULL),('phabricator:20140130.mail.1.retry.sql',1466802860,NULL),('phabricator:20140130.mail.2.next.sql',1466802860,NULL),('phabricator:20140201.gc.1.mailsent.sql',1466802860,NULL),('phabricator:20140201.gc.2.mailreceived.sql',1466802860,NULL),('phabricator:20140205.cal.1.rename.sql',1466802860,NULL),('phabricator:20140205.cal.2.phid-col.sql',1466802860,NULL),('phabricator:20140205.cal.3.phid-mig.php',1466802860,NULL),('phabricator:20140205.cal.4.phid-key.sql',1466802860,NULL),('phabricator:20140210.herald.rule-condition-mig.php',1466802860,NULL),('phabricator:20140210.projcfield.1.blurb.php',1466802860,NULL),('phabricator:20140210.projcfield.2.piccol.sql',1466802860,NULL),('phabricator:20140210.projcfield.3.picmig.sql',1466802860,NULL),('phabricator:20140210.projcfield.4.memmig.sql',1466802860,NULL),('phabricator:20140210.projcfield.5.dropprofile.sql',1466802860,NULL),('phabricator:20140211.dx.1.nullablechangesetid.sql',1466802860,NULL),('phabricator:20140211.dx.2.migcommenttext.php',1466802860,NULL),('phabricator:20140211.dx.3.migsubscriptions.sql',1466802860,NULL),('phabricator:20140211.dx.999.drop.relationships.sql',1466802860,NULL),('phabricator:20140212.dx.1.armageddon.php',1466802860,NULL),('phabricator:20140214.clean.1.legacycommentid.sql',1466802860,NULL),('phabricator:20140214.clean.2.dropcomment.sql',1466802860,NULL),('phabricator:20140214.clean.3.dropinline.sql',1466802860,NULL),('phabricator:20140218.differentialdraft.sql',1466802860,NULL),('phabricator:20140218.passwords.1.extend.sql',1466802860,NULL),('phabricator:20140218.passwords.2.prefix.sql',1466802860,NULL),('phabricator:20140218.passwords.3.vcsextend.sql',1466802860,NULL),('phabricator:20140218.passwords.4.vcs.php',1466802860,NULL),('phabricator:20140223.bigutf8scratch.sql',1466802860,NULL),('phabricator:20140224.dxclean.1.datecommitted.sql',1466802860,NULL),('phabricator:20140226.dxcustom.1.fielddata.php',1466802860,NULL),('phabricator:20140226.dxcustom.99.drop.sql',1466802860,NULL),('phabricator:20140228.dxcomment.1.sql',1466802860,NULL),('phabricator:20140305.diviner.1.slugcol.sql',1466802861,NULL),('phabricator:20140305.diviner.2.slugkey.sql',1466802861,NULL),('phabricator:20140311.mdroplegacy.sql',1466802861,NULL),('phabricator:20140314.projectcolumn.1.statuscol.sql',1466802861,NULL),('phabricator:20140314.projectcolumn.2.statuskey.sql',1466802861,NULL),('phabricator:20140317.mupdatedkey.sql',1466802861,NULL),('phabricator:20140321.harbor.1.bxaction.sql',1466802861,NULL),('phabricator:20140321.mstatus.1.col.sql',1466802861,NULL),('phabricator:20140321.mstatus.2.mig.php',1466802861,NULL),('phabricator:20140323.harbor.1.renames.php',1466802861,NULL),('phabricator:20140323.harbor.2.message.sql',1466802861,NULL),('phabricator:20140325.push.1.event.sql',1466802861,NULL),('phabricator:20140325.push.2.eventphid.sql',1466802861,NULL),('phabricator:20140325.push.3.groups.php',1466802861,NULL),('phabricator:20140325.push.4.prune.sql',1466802861,NULL),('phabricator:20140326.project.1.colxaction.sql',1466802861,NULL),('phabricator:20140328.releeph.1.productxaction.sql',1466802861,NULL),('phabricator:20140330.flagtext.sql',1466802861,NULL),('phabricator:20140402.actionlog.sql',1466802861,NULL),('phabricator:20140410.accountsecret.1.sql',1466802861,NULL),('phabricator:20140410.accountsecret.2.php',1466802861,NULL),('phabricator:20140416.harbor.1.sql',1466802861,NULL),('phabricator:20140420.rel.1.objectphid.sql',1466802861,NULL),('phabricator:20140420.rel.2.objectmig.php',1466802861,NULL),('phabricator:20140421.slowvotecolumnsisclosed.sql',1466802861,NULL),('phabricator:20140423.session.1.hisec.sql',1466802861,NULL),('phabricator:20140427.mfactor.1.sql',1466802861,NULL),('phabricator:20140430.auth.1.partial.sql',1466802861,NULL),('phabricator:20140430.dash.1.paneltype.sql',1466802861,NULL),('phabricator:20140430.dash.2.edge.sql',1466802861,NULL),('phabricator:20140501.passphraselockcredential.sql',1466802861,NULL),('phabricator:20140501.remove.1.dlog.sql',1466802861,NULL),('phabricator:20140507.smstable.sql',1466802861,NULL),('phabricator:20140509.coverage.1.sql',1466802861,NULL),('phabricator:20140509.dashboardlayoutconfig.sql',1466802861,NULL),('phabricator:20140512.dparents.1.sql',1466802861,NULL),('phabricator:20140514.harbormasterbuildabletransaction.sql',1466802861,NULL),('phabricator:20140514.pholiomockclose.sql',1466802861,NULL),('phabricator:20140515.trust-emails.sql',1466802861,NULL),('phabricator:20140517.dxbinarycache.sql',1466802861,NULL),('phabricator:20140518.dxmorebinarycache.sql',1466802861,NULL),('phabricator:20140519.dashboardinstall.sql',1466802861,NULL),('phabricator:20140520.authtemptoken.sql',1466802861,NULL),('phabricator:20140521.projectslug.1.create.sql',1466802861,NULL),('phabricator:20140521.projectslug.2.mig.php',1466802861,NULL),('phabricator:20140522.projecticon.sql',1466802861,NULL),('phabricator:20140524.auth.mfa.cache.sql',1466802861,NULL),('phabricator:20140525.hunkmodern.sql',1466802861,NULL),('phabricator:20140615.pholioedit.1.sql',1466802861,NULL),('phabricator:20140615.pholioedit.2.sql',1466802861,NULL),('phabricator:20140617.daemon.explicit-argv.sql',1466802861,NULL),('phabricator:20140617.daemonlog.sql',1466802861,NULL),('phabricator:20140624.projcolor.1.sql',1466802861,NULL),('phabricator:20140624.projcolor.2.sql',1466802861,NULL),('phabricator:20140629.dasharchive.1.sql',1466802861,NULL),('phabricator:20140629.legalsig.1.sql',1466802861,NULL),('phabricator:20140629.legalsig.2.php',1466802861,NULL),('phabricator:20140701.legalexemption.1.sql',1466802861,NULL),('phabricator:20140701.legalexemption.2.sql',1466802861,NULL),('phabricator:20140703.legalcorp.1.sql',1466802861,NULL),('phabricator:20140703.legalcorp.2.sql',1466802861,NULL),('phabricator:20140703.legalcorp.3.sql',1466802861,NULL),('phabricator:20140703.legalcorp.4.sql',1466802861,NULL),('phabricator:20140703.legalcorp.5.sql',1466802861,NULL),('phabricator:20140704.harbormasterstep.1.sql',1466802861,NULL),('phabricator:20140704.harbormasterstep.2.sql',1466802861,NULL),('phabricator:20140704.legalpreamble.1.sql',1466802861,NULL),('phabricator:20140706.harbormasterdepend.1.php',1466802861,NULL),('phabricator:20140706.pedge.1.sql',1466802861,NULL),('phabricator:20140711.pnames.1.sql',1466802861,NULL),('phabricator:20140711.pnames.2.php',1466802861,NULL),('phabricator:20140711.workerpriority.sql',1466802862,NULL),('phabricator:20140712.projcoluniq.sql',1466802862,NULL),('phabricator:20140721.phortune.1.cart.sql',1466802862,NULL),('phabricator:20140721.phortune.2.purchase.sql',1466802862,NULL),('phabricator:20140721.phortune.3.charge.sql',1466802862,NULL),('phabricator:20140721.phortune.4.cartstatus.sql',1466802862,NULL),('phabricator:20140721.phortune.5.cstatusdefault.sql',1466802862,NULL),('phabricator:20140721.phortune.6.onetimecharge.sql',1466802862,NULL),('phabricator:20140721.phortune.7.nullmethod.sql',1466802862,NULL),('phabricator:20140722.appname.php',1466802862,NULL),('phabricator:20140722.audit.1.xactions.sql',1466802862,NULL),('phabricator:20140722.audit.2.comments.sql',1466802862,NULL),('phabricator:20140722.audit.3.miginlines.php',1466802862,NULL),('phabricator:20140722.audit.4.migtext.php',1466802862,NULL),('phabricator:20140722.renameauth.php',1466802862,NULL),('phabricator:20140723.apprenamexaction.sql',1466802862,NULL),('phabricator:20140725.audit.1.migxactions.php',1466802862,NULL),('phabricator:20140731.audit.1.subscribers.php',1466802862,NULL),('phabricator:20140731.cancdn.php',1466802862,NULL),('phabricator:20140731.harbormasterstepdesc.sql',1466802862,NULL),('phabricator:20140805.boardcol.1.sql',1466802862,NULL),('phabricator:20140805.boardcol.2.php',1466802862,NULL),('phabricator:20140807.harbormastertargettime.sql',1466802862,NULL),('phabricator:20140808.boardprop.1.sql',1466802862,NULL),('phabricator:20140808.boardprop.2.sql',1466802862,NULL),('phabricator:20140808.boardprop.3.php',1466802862,NULL),('phabricator:20140811.blob.1.sql',1466802862,NULL),('phabricator:20140811.blob.2.sql',1466802862,NULL),('phabricator:20140812.projkey.1.sql',1466802862,NULL),('phabricator:20140812.projkey.2.sql',1466802862,NULL),('phabricator:20140814.passphrasecredentialconduit.sql',1466802862,NULL),('phabricator:20140815.cancdncase.php',1466802862,NULL),('phabricator:20140818.harbormasterindex.1.sql',1466802862,NULL),('phabricator:20140821.harbormasterbuildgen.1.sql',1466802862,NULL),('phabricator:20140822.daemonenvhash.sql',1466802862,NULL),('phabricator:20140902.almanacdevice.1.sql',1466802862,NULL),('phabricator:20140904.macroattach.php',1466802862,NULL),('phabricator:20140911.fund.1.initiative.sql',1466802862,NULL),('phabricator:20140911.fund.2.xaction.sql',1466802862,NULL),('phabricator:20140911.fund.3.edge.sql',1466802862,NULL),('phabricator:20140911.fund.4.backer.sql',1466802862,NULL),('phabricator:20140911.fund.5.backxaction.sql',1466802862,NULL),('phabricator:20140914.betaproto.php',1466802862,NULL),('phabricator:20140917.project.canlock.sql',1466802862,NULL),('phabricator:20140918.schema.1.dropaudit.sql',1466802862,NULL),('phabricator:20140918.schema.2.dropauditinline.sql',1466802862,NULL),('phabricator:20140918.schema.3.wipecache.sql',1466802862,NULL),('phabricator:20140918.schema.4.cachetype.sql',1466802862,NULL),('phabricator:20140918.schema.5.slowvote.sql',1466802862,NULL),('phabricator:20140919.schema.01.calstatus.sql',1466802862,NULL),('phabricator:20140919.schema.02.calname.sql',1466802862,NULL),('phabricator:20140919.schema.03.dropaux.sql',1466802862,NULL),('phabricator:20140919.schema.04.droptaskproj.sql',1466802862,NULL),('phabricator:20140926.schema.01.droprelev.sql',1466802862,NULL),('phabricator:20140926.schema.02.droprelreqev.sql',1466802862,NULL),('phabricator:20140926.schema.03.dropldapinfo.sql',1466802862,NULL),('phabricator:20140926.schema.04.dropoauthinfo.sql',1466802862,NULL),('phabricator:20140926.schema.05.dropprojaffil.sql',1466802862,NULL),('phabricator:20140926.schema.06.dropsubproject.sql',1466802862,NULL),('phabricator:20140926.schema.07.droppondcom.sql',1466802862,NULL),('phabricator:20140927.schema.01.dropsearchq.sql',1466802862,NULL),('phabricator:20140927.schema.02.pholio1.sql',1466802862,NULL),('phabricator:20140927.schema.03.pholio2.sql',1466802862,NULL),('phabricator:20140927.schema.04.pholio3.sql',1466802862,NULL),('phabricator:20140927.schema.05.phragment1.sql',1466802862,NULL),('phabricator:20140927.schema.06.releeph1.sql',1466802862,NULL),('phabricator:20141001.schema.01.version.sql',1466802862,NULL),('phabricator:20141001.schema.02.taskmail.sql',1466802862,NULL),('phabricator:20141002.schema.01.liskcounter.sql',1466802862,NULL),('phabricator:20141002.schema.02.draftnull.sql',1466802862,NULL),('phabricator:20141004.currency.01.sql',1466802862,NULL),('phabricator:20141004.currency.02.sql',1466802862,NULL),('phabricator:20141004.currency.03.sql',1466802862,NULL),('phabricator:20141004.currency.04.sql',1466802862,NULL),('phabricator:20141004.currency.05.sql',1466802862,NULL),('phabricator:20141004.currency.06.sql',1466802862,NULL),('phabricator:20141004.harborliskcounter.sql',1466802862,NULL),('phabricator:20141005.phortuneproduct.sql',1466802862,NULL),('phabricator:20141006.phortunecart.sql',1466802862,NULL),('phabricator:20141006.phortunemerchant.sql',1466802863,NULL),('phabricator:20141006.phortunemerchantx.sql',1466802863,NULL),('phabricator:20141007.fundmerchant.sql',1466802863,NULL),('phabricator:20141007.fundrisks.sql',1466802863,NULL),('phabricator:20141007.fundtotal.sql',1466802863,NULL),('phabricator:20141007.phortunecartmerchant.sql',1466802863,NULL),('phabricator:20141007.phortunecharge.sql',1466802863,NULL),('phabricator:20141007.phortunepayment.sql',1466802863,NULL),('phabricator:20141007.phortuneprovider.sql',1466802863,NULL),('phabricator:20141007.phortuneproviderx.sql',1466802863,NULL),('phabricator:20141008.phortunemerchdesc.sql',1466802863,NULL),('phabricator:20141008.phortuneprovdis.sql',1466802863,NULL),('phabricator:20141008.phortunerefund.sql',1466802863,NULL),('phabricator:20141010.fundmailkey.sql',1466802863,NULL),('phabricator:20141011.phortunemerchedit.sql',1466802863,NULL),('phabricator:20141012.phortunecartxaction.sql',1466802863,NULL),('phabricator:20141013.phortunecartkey.sql',1466802863,NULL),('phabricator:20141016.almanac.device.sql',1466802863,NULL),('phabricator:20141016.almanac.dxaction.sql',1466802863,NULL),('phabricator:20141016.almanac.interface.sql',1466802863,NULL),('phabricator:20141016.almanac.network.sql',1466802863,NULL),('phabricator:20141016.almanac.nxaction.sql',1466802863,NULL),('phabricator:20141016.almanac.service.sql',1466802863,NULL),('phabricator:20141016.almanac.sxaction.sql',1466802863,NULL),('phabricator:20141017.almanac.binding.sql',1466802863,NULL),('phabricator:20141017.almanac.bxaction.sql',1466802863,NULL),('phabricator:20141025.phriction.1.xaction.sql',1466802863,NULL),('phabricator:20141025.phriction.2.xaction.sql',1466802863,NULL),('phabricator:20141025.phriction.mailkey.sql',1466802863,NULL),('phabricator:20141103.almanac.1.delprop.sql',1466802863,NULL),('phabricator:20141103.almanac.2.addprop.sql',1466802863,NULL),('phabricator:20141104.almanac.3.edge.sql',1466802863,NULL),('phabricator:20141105.ssh.1.rename.sql',1466802863,NULL),('phabricator:20141106.dropold.sql',1466802863,NULL),('phabricator:20141106.uniqdrafts.php',1466802863,NULL),('phabricator:20141107.phriction.policy.1.sql',1466802863,NULL),('phabricator:20141107.phriction.policy.2.php',1466802863,NULL),('phabricator:20141107.phriction.popkeys.php',1466802863,NULL),('phabricator:20141107.ssh.1.colname.sql',1466802863,NULL),('phabricator:20141107.ssh.2.keyhash.sql',1466802863,NULL),('phabricator:20141107.ssh.3.keyindex.sql',1466802863,NULL),('phabricator:20141107.ssh.4.keymig.php',1466802863,NULL),('phabricator:20141107.ssh.5.indexnull.sql',1466802863,NULL),('phabricator:20141107.ssh.6.indexkey.sql',1466802863,NULL),('phabricator:20141107.ssh.7.colnull.sql',1466802863,NULL),('phabricator:20141113.auditdupes.php',1466802863,NULL),('phabricator:20141118.diffxaction.sql',1466802863,NULL),('phabricator:20141119.commitpedge.sql',1466802863,NULL),('phabricator:20141119.differential.diff.policy.sql',1466802863,NULL),('phabricator:20141119.sshtrust.sql',1466802863,NULL),('phabricator:20141123.taskpriority.1.sql',1466802863,NULL),('phabricator:20141123.taskpriority.2.sql',1466802863,NULL),('phabricator:20141210.maniphestsubscribersmig.1.sql',1466802863,NULL),('phabricator:20141210.maniphestsubscribersmig.2.sql',1466802863,NULL),('phabricator:20141210.reposervice.sql',1466802863,NULL),('phabricator:20141212.conduittoken.sql',1466802863,NULL),('phabricator:20141215.almanacservicetype.sql',1466802863,NULL),('phabricator:20141217.almanacdevicelock.sql',1466802864,NULL),('phabricator:20141217.almanaclock.sql',1466802864,NULL),('phabricator:20141218.maniphestcctxn.php',1466802864,NULL),('phabricator:20141222.maniphestprojtxn.php',1466802864,NULL),('phabricator:20141223.daemonloguser.sql',1466802864,NULL),('phabricator:20141223.daemonobjectphid.sql',1466802864,NULL),('phabricator:20141230.pasteeditpolicycolumn.sql',1466802864,NULL),('phabricator:20141230.pasteeditpolicyexisting.sql',1466802864,NULL),('phabricator:20150102.policyname.php',1466802864,NULL),('phabricator:20150102.tasksubscriber.sql',1466802864,NULL),('phabricator:20150105.conpsearch.sql',1466802864,NULL),('phabricator:20150114.oauthserver.client.policy.sql',1466802864,NULL),('phabricator:20150115.applicationemails.sql',1466802864,NULL),('phabricator:20150115.trigger.1.sql',1466802864,NULL),('phabricator:20150115.trigger.2.sql',1466802864,NULL),('phabricator:20150116.maniphestapplicationemails.php',1466802864,NULL),('phabricator:20150120.maniphestdefaultauthor.php',1466802864,NULL),('phabricator:20150124.subs.1.sql',1466802864,NULL),('phabricator:20150129.pastefileapplicationemails.php',1466802864,NULL),('phabricator:20150130.phortune.1.subphid.sql',1466802864,NULL),('phabricator:20150130.phortune.2.subkey.sql',1466802864,NULL),('phabricator:20150131.phortune.1.defaultpayment.sql',1466802864,NULL),('phabricator:20150205.authprovider.autologin.sql',1466802864,NULL),('phabricator:20150205.daemonenv.sql',1466802864,NULL),('phabricator:20150209.invite.sql',1466802864,NULL),('phabricator:20150209.oauthclient.trust.sql',1466802864,NULL),('phabricator:20150210.invitephid.sql',1466802864,NULL),('phabricator:20150212.legalpad.session.1.sql',1466802864,NULL),('phabricator:20150212.legalpad.session.2.sql',1466802864,NULL),('phabricator:20150219.scratch.nonmutable.sql',1466802864,NULL),('phabricator:20150223.daemon.1.id.sql',1466802864,NULL),('phabricator:20150223.daemon.2.idlegacy.sql',1466802864,NULL),('phabricator:20150223.daemon.3.idkey.sql',1466802864,NULL),('phabricator:20150312.filechunk.1.sql',1466802864,NULL),('phabricator:20150312.filechunk.2.sql',1466802864,NULL),('phabricator:20150312.filechunk.3.sql',1466802864,NULL),('phabricator:20150317.conpherence.isroom.1.sql',1466802864,NULL),('phabricator:20150317.conpherence.isroom.2.sql',1466802864,NULL),('phabricator:20150317.conpherence.policy.sql',1466802864,NULL),('phabricator:20150410.nukeruleedit.sql',1466802864,NULL),('phabricator:20150420.invoice.1.sql',1466802864,NULL),('phabricator:20150420.invoice.2.sql',1466802864,NULL),('phabricator:20150425.isclosed.sql',1466802864,NULL),('phabricator:20150427.calendar.1.edge.sql',1466802864,NULL),('phabricator:20150427.calendar.1.xaction.sql',1466802864,NULL),('phabricator:20150427.calendar.2.xaction.sql',1466802864,NULL),('phabricator:20150428.calendar.1.iscancelled.sql',1466802864,NULL),('phabricator:20150428.calendar.1.name.sql',1466802864,NULL),('phabricator:20150429.calendar.1.invitee.sql',1466802864,NULL),('phabricator:20150430.calendar.1.policies.sql',1466802864,NULL),('phabricator:20150430.multimeter.1.sql',1466802864,NULL),('phabricator:20150430.multimeter.2.host.sql',1466802864,NULL),('phabricator:20150430.multimeter.3.viewer.sql',1466802864,NULL),('phabricator:20150430.multimeter.4.context.sql',1466802864,NULL),('phabricator:20150430.multimeter.5.label.sql',1466802864,NULL),('phabricator:20150501.calendar.1.reply.sql',1466802864,NULL),('phabricator:20150501.calendar.2.reply.php',1466802864,NULL),('phabricator:20150501.conpherencepics.sql',1466802865,NULL),('phabricator:20150503.repositorysymbols.1.sql',1466802865,NULL),('phabricator:20150503.repositorysymbols.2.php',1466802865,NULL),('phabricator:20150503.repositorysymbols.3.sql',1466802865,NULL),('phabricator:20150504.symbolsproject.1.php',1466802865,NULL),('phabricator:20150504.symbolsproject.2.sql',1466802865,NULL),('phabricator:20150506.calendarunnamedevents.1.php',1466802865,NULL),('phabricator:20150507.calendar.1.isallday.sql',1466802865,NULL),('phabricator:20150513.user.cache.1.sql',1466802865,NULL),('phabricator:20150514.calendar.status.sql',1466802865,NULL),('phabricator:20150514.phame.blog.xaction.sql',1466802865,NULL),('phabricator:20150514.user.cache.2.sql',1466802865,NULL),('phabricator:20150515.phame.post.xaction.sql',1466802865,NULL),('phabricator:20150515.project.mailkey.1.sql',1466802865,NULL),('phabricator:20150515.project.mailkey.2.php',1466802865,NULL),('phabricator:20150519.calendar.calendaricon.sql',1466802865,NULL),('phabricator:20150521.releephrepository.sql',1466802865,NULL),('phabricator:20150525.diff.hidden.1.sql',1466802865,NULL),('phabricator:20150526.owners.mailkey.1.sql',1466802865,NULL),('phabricator:20150526.owners.mailkey.2.php',1466802865,NULL),('phabricator:20150526.owners.xaction.sql',1466802865,NULL),('phabricator:20150527.calendar.recurringevents.sql',1466802865,NULL),('phabricator:20150601.spaces.1.namespace.sql',1466802865,NULL),('phabricator:20150601.spaces.2.xaction.sql',1466802865,NULL),('phabricator:20150602.mlist.1.sql',1466802865,NULL),('phabricator:20150602.mlist.2.php',1466802865,NULL),('phabricator:20150604.spaces.1.sql',1466802865,NULL),('phabricator:20150605.diviner.edges.sql',1466802865,NULL),('phabricator:20150605.diviner.editPolicy.sql',1466802865,NULL),('phabricator:20150605.diviner.xaction.sql',1466802865,NULL),('phabricator:20150606.mlist.1.php',1466802865,NULL),('phabricator:20150609.inline.sql',1466802865,NULL),('phabricator:20150609.spaces.1.pholio.sql',1466802865,NULL),('phabricator:20150609.spaces.2.maniphest.sql',1466802865,NULL),('phabricator:20150610.spaces.1.desc.sql',1466802865,NULL),('phabricator:20150610.spaces.2.edge.sql',1466802865,NULL),('phabricator:20150610.spaces.3.archive.sql',1466802865,NULL),('phabricator:20150611.spaces.1.mailxaction.sql',1466802865,NULL),('phabricator:20150611.spaces.2.appmail.sql',1466802865,NULL),('phabricator:20150616.divinerrepository.sql',1466802865,NULL),('phabricator:20150617.harbor.1.lint.sql',1466802865,NULL),('phabricator:20150617.harbor.2.unit.sql',1466802865,NULL),('phabricator:20150618.harbor.1.planauto.sql',1466802866,NULL),('phabricator:20150618.harbor.2.stepauto.sql',1466802866,NULL),('phabricator:20150618.harbor.3.buildauto.sql',1466802866,NULL),('phabricator:20150619.conpherencerooms.1.sql',1466802866,NULL),('phabricator:20150619.conpherencerooms.2.sql',1466802866,NULL),('phabricator:20150619.conpherencerooms.3.sql',1466802866,NULL),('phabricator:20150621.phrase.1.sql',1466802866,NULL),('phabricator:20150621.phrase.2.sql',1466802866,NULL),('phabricator:20150622.bulk.1.job.sql',1466802866,NULL),('phabricator:20150622.bulk.2.task.sql',1466802866,NULL),('phabricator:20150622.bulk.3.xaction.sql',1466802866,NULL),('phabricator:20150622.bulk.4.edge.sql',1466802866,NULL),('phabricator:20150622.metamta.1.phid-col.sql',1466802866,NULL),('phabricator:20150622.metamta.2.phid-mig.php',1466802866,NULL),('phabricator:20150622.metamta.3.phid-key.sql',1466802866,NULL),('phabricator:20150622.metamta.4.actor-phid-col.sql',1466802866,NULL),('phabricator:20150622.metamta.5.actor-phid-mig.php',1466802866,NULL),('phabricator:20150622.metamta.6.actor-phid-key.sql',1466802866,NULL),('phabricator:20150624.spaces.1.repo.sql',1466802866,NULL),('phabricator:20150626.spaces.1.calendar.sql',1466802866,NULL),('phabricator:20150630.herald.1.sql',1466802866,NULL),('phabricator:20150630.herald.2.sql',1466802866,NULL),('phabricator:20150701.herald.1.sql',1466802866,NULL),('phabricator:20150701.herald.2.sql',1466802866,NULL),('phabricator:20150702.spaces.1.slowvote.sql',1466802866,NULL),('phabricator:20150706.herald.1.sql',1466802866,NULL),('phabricator:20150707.herald.1.sql',1466802866,NULL),('phabricator:20150708.arcanistproject.sql',1466802866,NULL),('phabricator:20150708.herald.1.sql',1466802866,NULL),('phabricator:20150708.herald.2.sql',1466802866,NULL),('phabricator:20150708.herald.3.sql',1466802866,NULL),('phabricator:20150712.badges.1.sql',1466802866,NULL),('phabricator:20150714.spaces.countdown.1.sql',1466802866,NULL),('phabricator:20150717.herald.1.sql',1466802866,NULL),('phabricator:20150719.countdown.1.sql',1466802866,NULL),('phabricator:20150719.countdown.2.sql',1466802866,NULL),('phabricator:20150719.countdown.3.sql',1466802866,NULL),('phabricator:20150721.phurl.1.url.sql',1466802866,NULL),('phabricator:20150721.phurl.2.xaction.sql',1466802866,NULL),('phabricator:20150721.phurl.3.xactioncomment.sql',1466802866,NULL),('phabricator:20150721.phurl.4.url.sql',1466802866,NULL),('phabricator:20150721.phurl.5.edge.sql',1466802866,NULL),('phabricator:20150721.phurl.6.alias.sql',1466802866,NULL),('phabricator:20150721.phurl.7.authorphid.sql',1466802866,NULL),('phabricator:20150722.dashboard.1.sql',1466802866,NULL),('phabricator:20150722.dashboard.2.sql',1466802866,NULL),('phabricator:20150723.countdown.1.sql',1466802866,NULL),('phabricator:20150724.badges.comments.1.sql',1466802866,NULL),('phabricator:20150724.countdown.comments.1.sql',1466802866,NULL),('phabricator:20150725.badges.mailkey.1.sql',1466802866,NULL),('phabricator:20150725.badges.mailkey.2.php',1466802866,NULL),('phabricator:20150725.badges.viewpolicy.3.sql',1466802866,NULL),('phabricator:20150725.countdown.mailkey.1.sql',1466802866,NULL),('phabricator:20150725.countdown.mailkey.2.php',1466802866,NULL),('phabricator:20150725.slowvote.mailkey.1.sql',1466802866,NULL),('phabricator:20150725.slowvote.mailkey.2.php',1466802866,NULL),('phabricator:20150727.heraldaction.1.sql',1466802866,NULL),('phabricator:20150730.herald.1.sql',1466802866,NULL),('phabricator:20150730.herald.2.sql',1466802866,NULL),('phabricator:20150730.herald.3.sql',1466802866,NULL),('phabricator:20150730.herald.4.sql',1466802866,NULL),('phabricator:20150730.herald.5.sql',1466802866,NULL),('phabricator:20150730.herald.6.sql',1466802866,NULL),('phabricator:20150730.herald.7.sql',1466802866,NULL),('phabricator:20150803.herald.1.sql',1466802866,NULL),('phabricator:20150803.herald.2.sql',1466802866,NULL),('phabricator:20150804.ponder.answer.mailkey.1.sql',1466802866,NULL),('phabricator:20150804.ponder.answer.mailkey.2.php',1466802866,NULL),('phabricator:20150804.ponder.question.1.sql',1466802867,NULL),('phabricator:20150804.ponder.question.2.sql',1466802867,NULL),('phabricator:20150804.ponder.question.3.sql',1466802867,NULL),('phabricator:20150804.ponder.spaces.4.sql',1466802867,NULL),('phabricator:20150805.paste.status.1.sql',1466802867,NULL),('phabricator:20150805.paste.status.2.sql',1466802867,NULL),('phabricator:20150806.ponder.answer.1.sql',1466802867,NULL),('phabricator:20150806.ponder.editpolicy.2.sql',1466802867,NULL),('phabricator:20150806.ponder.status.1.sql',1466802867,NULL),('phabricator:20150806.ponder.status.2.sql',1466802867,NULL),('phabricator:20150806.ponder.status.3.sql',1466802867,NULL),('phabricator:20150808.ponder.vote.1.sql',1466802867,NULL),('phabricator:20150808.ponder.vote.2.sql',1466802867,NULL),('phabricator:20150812.ponder.answer.1.sql',1466802867,NULL),('phabricator:20150812.ponder.answer.2.sql',1466802867,NULL),('phabricator:20150814.harbormater.artifact.phid.sql',1466802867,NULL),('phabricator:20150815.owners.status.1.sql',1466802867,NULL),('phabricator:20150815.owners.status.2.sql',1466802867,NULL),('phabricator:20150823.nuance.queue.1.sql',1466802867,NULL),('phabricator:20150823.nuance.queue.2.sql',1466802867,NULL),('phabricator:20150823.nuance.queue.3.sql',1466802867,NULL),('phabricator:20150823.nuance.queue.4.sql',1466802867,NULL),('phabricator:20150828.ponder.wiki.1.sql',1466802867,NULL),('phabricator:20150829.ponder.dupe.1.sql',1466802867,NULL),('phabricator:20150904.herald.1.sql',1466802867,NULL),('phabricator:20150906.mailinglist.sql',1466802867,NULL),('phabricator:20150910.owners.custom.1.sql',1466802867,NULL),('phabricator:20150916.drydock.slotlocks.1.sql',1466802867,NULL),('phabricator:20150922.drydock.commands.1.sql',1466802867,NULL),('phabricator:20150923.drydock.resourceid.1.sql',1466802867,NULL),('phabricator:20150923.drydock.resourceid.2.sql',1466802867,NULL),('phabricator:20150923.drydock.resourceid.3.sql',1466802867,NULL),('phabricator:20150923.drydock.taskid.1.sql',1466802867,NULL),('phabricator:20150924.drydock.disable.1.sql',1466802867,NULL),('phabricator:20150924.drydock.status.1.sql',1466802867,NULL),('phabricator:20150928.drydock.rexpire.1.sql',1466802867,NULL),('phabricator:20150930.drydock.log.1.sql',1466802867,NULL),('phabricator:20151001.drydock.rname.1.sql',1466802867,NULL),('phabricator:20151002.dashboard.status.1.sql',1466802867,NULL),('phabricator:20151002.harbormaster.bparam.1.sql',1466802867,NULL),('phabricator:20151009.drydock.auth.1.sql',1466802867,NULL),('phabricator:20151010.drydock.auth.2.sql',1466802867,NULL),('phabricator:20151013.drydock.op.1.sql',1466802867,NULL),('phabricator:20151023.harborpolicy.1.sql',1466802867,NULL),('phabricator:20151023.harborpolicy.2.php',1466802867,NULL),('phabricator:20151023.patchduration.sql',1466802867,16373),('phabricator:20151030.harbormaster.initiator.sql',1466802867,21600),('phabricator:20151106.editengine.1.table.sql',1466802867,9430),('phabricator:20151106.editengine.2.xactions.sql',1466802867,7174),('phabricator:20151106.phame.post.mailkey.1.sql',1466802867,19922),('phabricator:20151106.phame.post.mailkey.2.php',1466802867,1343),('phabricator:20151107.phame.blog.mailkey.1.sql',1466802867,17107),('phabricator:20151107.phame.blog.mailkey.2.php',1466802867,1049),('phabricator:20151108.phame.blog.joinpolicy.sql',1466802867,16781),('phabricator:20151108.xhpast.stderr.sql',1466802867,23962),('phabricator:20151109.phame.post.comments.1.sql',1466802867,8796),('phabricator:20151109.repository.coverage.1.sql',1466802867,1058),('phabricator:20151109.xhpast.db.1.sql',1466802867,1587),('phabricator:20151109.xhpast.db.2.sql',1466802867,561),('phabricator:20151110.daemonenvhash.sql',1466802867,36237),('phabricator:20151111.phame.blog.archive.1.sql',1466802867,16500),('phabricator:20151111.phame.blog.archive.2.sql',1466802867,479),('phabricator:20151112.herald.edge.sql',1466802867,14091),('phabricator:20151116.owners.edge.sql',1466802867,11769),('phabricator:20151128.phame.blog.picture.1.sql',1466802867,15526),('phabricator:20151130.phurl.mailkey.1.sql',1466802868,10082),('phabricator:20151130.phurl.mailkey.2.php',1466802868,1190),('phabricator:20151202.versioneddraft.1.sql',1466802868,8290),('phabricator:20151207.editengine.1.sql',1466802868,76502),('phabricator:20151210.land.1.refphid.sql',1466802868,15998),('phabricator:20151210.land.2.refphid.php',1466802868,751),('phabricator:20151215.phame.1.autotitle.sql',1466802868,20074),('phabricator:20151218.key.1.keyphid.sql',1466802868,15772),('phabricator:20151218.key.2.keyphid.php',1466802868,454),('phabricator:20151219.proj.01.prislug.sql',1466802868,22082),('phabricator:20151219.proj.02.prislugkey.sql',1466802868,15591),('phabricator:20151219.proj.03.copyslug.sql',1466802868,581),('phabricator:20151219.proj.04.dropslugkey.sql',1466802868,8692),('phabricator:20151219.proj.05.dropslug.sql',1466802868,21494),('phabricator:20151219.proj.06.defaultpolicy.php',1466802868,1250),('phabricator:20151219.proj.07.viewnull.sql',1466802868,14942),('phabricator:20151219.proj.08.editnull.sql',1466802868,11831),('phabricator:20151219.proj.09.joinnull.sql',1466802868,10583),('phabricator:20151219.proj.10.subcolumns.sql',1466802868,201986),('phabricator:20151219.proj.11.subprojectphids.sql',1466802868,23604),('phabricator:20151221.search.1.version.sql',1466802868,9540),('phabricator:20151221.search.2.ownersngrams.sql',1466802868,7522),('phabricator:20151221.search.3.reindex.php',1466802868,415),('phabricator:20151223.proj.01.paths.sql',1466802868,22569),('phabricator:20151223.proj.02.depths.sql',1466802868,25408),('phabricator:20151223.proj.03.pathkey.sql',1466802868,13193),('phabricator:20151223.proj.04.keycol.sql',1466802868,27276),('phabricator:20151223.proj.05.updatekeys.php',1466802868,451),('phabricator:20151223.proj.06.uniq.sql',1466802868,11754),('phabricator:20151226.reop.1.sql',1466802868,19139),('phabricator:20151227.proj.01.materialize.sql',1466802868,535),('phabricator:20151231.proj.01.icon.php',1466802868,1991),('phabricator:20160102.badges.award.sql',1466802868,10113),('phabricator:20160110.repo.01.slug.sql',1466802868,32438),('phabricator:20160110.repo.02.slug.php',1466802868,459),('phabricator:20160111.repo.01.slugx.sql',1466802868,627),('phabricator:20160112.repo.01.uri.sql',1466802868,8500),('phabricator:20160112.repo.02.uri.index.php',1466802868,64),('phabricator:20160113.propanel.1.storage.sql',1466802868,6858),('phabricator:20160113.propanel.2.xaction.sql',1466802868,7710),('phabricator:20160119.project.1.silence.sql',1466802868,579),('phabricator:20160122.project.1.boarddefault.php',1466802868,904),('phabricator:20160124.people.1.icon.sql',1466802868,12728),('phabricator:20160124.people.2.icondefault.sql',1466802868,477),('phabricator:20160128.repo.1.pull.sql',1466802868,9886),('phabricator:20160202.board.1.proxy.sql',1466802868,17041),('phabricator:20160202.ipv6.1.sql',1466802868,22960),('phabricator:20160202.ipv6.2.php',1466802868,1991),('phabricator:20160206.cover.1.sql',1466802868,29137),('phabricator:20160208.task.1.sql',1466802868,32546),('phabricator:20160208.task.2.sql',1466802868,33818),('phabricator:20160208.task.3.sql',1466802868,34881),('phabricator:20160212.proj.1.sql',1466802868,28365),('phabricator:20160212.proj.2.sql',1466802868,504),('phabricator:20160215.owners.policy.1.sql',1466802868,18780),('phabricator:20160215.owners.policy.2.sql',1466802868,17029),('phabricator:20160215.owners.policy.3.sql',1466802868,432),('phabricator:20160215.owners.policy.4.sql',1466802868,361),('phabricator:20160218.callsigns.1.sql',1466802869,12331),('phabricator:20160221.almanac.1.devicen.sql',1466802869,9432),('phabricator:20160221.almanac.2.devicei.php',1466802869,1470),('phabricator:20160221.almanac.3.servicen.sql',1466802869,7845),('phabricator:20160221.almanac.4.servicei.php',1466802869,916),('phabricator:20160221.almanac.5.networkn.sql',1466802869,8044),('phabricator:20160221.almanac.6.networki.php',1466802869,903),('phabricator:20160221.almanac.7.namespacen.sql',1466802869,7463),('phabricator:20160221.almanac.8.namespace.sql',1466802869,7462),('phabricator:20160221.almanac.9.namespacex.sql',1466802869,7400),('phabricator:20160222.almanac.1.properties.php',1466802869,1750),('phabricator:20160223.almanac.1.bound.sql',1466802869,16093),('phabricator:20160223.almanac.2.lockbind.sql',1466802869,447),('phabricator:20160223.almanac.3.devicelock.sql',1466802869,19320),('phabricator:20160223.almanac.4.servicelock.sql',1466802869,23933),('phabricator:20160223.paste.fileedges.php',1466802869,654),('phabricator:20160225.almanac.1.disablebinding.sql',1466802869,24011),('phabricator:20160225.almanac.2.stype.sql',1466802869,7243),('phabricator:20160225.almanac.3.stype.php',1466802869,464),('phabricator:20160227.harbormaster.1.plann.sql',1466802869,7447),('phabricator:20160227.harbormaster.2.plani.php',1466802869,367),('phabricator:20160303.drydock.1.bluen.sql',1466802869,6561),('phabricator:20160303.drydock.2.bluei.php',1466802869,323),('phabricator:20160303.drydock.3.edge.sql',1466802869,12513),('phabricator:20160308.nuance.01.disabled.sql',1466802869,14286),('phabricator:20160308.nuance.02.cursordata.sql',1466802869,14221),('phabricator:20160308.nuance.03.sourcen.sql',1466802869,7121),('phabricator:20160308.nuance.04.sourcei.php',1466802869,1214),('phabricator:20160308.nuance.05.sourcename.sql',1466802869,10244),('phabricator:20160308.nuance.06.label.sql',1466802869,18965),('phabricator:20160308.nuance.07.itemtype.sql',1466802869,25794),('phabricator:20160308.nuance.08.itemkey.sql',1466802869,21958),('phabricator:20160308.nuance.09.itemcontainer.sql',1466802869,22612),('phabricator:20160308.nuance.10.itemkeyu.sql',1466802869,552),('phabricator:20160308.nuance.11.requestor.sql',1466802869,14556),('phabricator:20160308.nuance.12.queue.sql',1466802869,19884),('phabricator:20160316.lfs.01.token.resource.sql',1466802869,13284),('phabricator:20160316.lfs.02.token.user.sql',1466802869,15555),('phabricator:20160316.lfs.03.token.properties.sql',1466802869,16563),('phabricator:20160316.lfs.04.token.default.sql',1466802869,581),('phabricator:20160317.lfs.01.ref.sql',1466802869,8120),('phabricator:20160321.nuance.01.taskbridge.sql',1466802869,28702),('phabricator:20160322.nuance.01.itemcommand.sql',1466802869,11727),('phabricator:20160323.badgemigrate.sql',1466802869,873),('phabricator:20160329.nuance.01.requestor.sql',1466802869,1313),('phabricator:20160329.nuance.02.requestorsource.sql',1466802869,1704),('phabricator:20160329.nuance.03.requestorxaction.sql',1466802869,1686),('phabricator:20160329.nuance.04.requestorcomment.sql',1466802869,1374),('phabricator:20160330.badges.migratequality.sql',1466802869,9959),('phabricator:20160330.badges.qualityxaction.mig.sql',1466802869,2022),('phabricator:20160331.fund.comments.1.sql',1466802869,6337),('phabricator:20160404.oauth.1.xaction.sql',1466802869,6577),('phabricator:20160405.oauth.2.disable.sql',1466802869,15800),('phabricator:20160406.badges.ngrams.php',1466802869,678),('phabricator:20160406.badges.ngrams.sql',1466802869,8117),('phabricator:20160406.columns.1.php',1466802869,543),('phabricator:20160411.repo.1.version.sql',1466802869,7060),('phabricator:20160418.repouri.1.sql',1466802869,6372),('phabricator:20160418.repouri.2.sql',1466802869,13856),('phabricator:20160418.repoversion.1.sql',1466802869,15751),('phabricator:20160419.pushlog.1.sql',1466802869,25118),('phabricator:20160424.locks.1.sql',1466802869,15525),('phabricator:20160426.searchedge.sql',1466802869,15875),('phabricator:20160428.repo.1.urixaction.sql',1466802869,7234),('phabricator:20160503.repo.01.lpath.sql',1466802869,23546),('phabricator:20160503.repo.02.lpathkey.sql',1466802869,12838),('phabricator:20160503.repo.03.lpathmigrate.php',1466802869,473),('phabricator:20160503.repo.04.mirrormigrate.php',1466802869,540),('phabricator:20160503.repo.05.urimigrate.php',1466802869,355),('phabricator:20160510.repo.01.uriindex.php',1466802869,4261),('phabricator:20160513.owners.01.autoreview.sql',1466802869,17537),('phabricator:20160513.owners.02.autoreviewnone.sql',1466802869,514),('phabricator:20160516.owners.01.dominion.sql',1466802869,16006),('phabricator:20160516.owners.02.dominionstrong.sql',1466802869,563),('phabricator:20160517.oauth.01.edge.sql',1466802869,13998),('phabricator:20160518.ssh.01.activecol.sql',1466802869,15647),('phabricator:20160518.ssh.02.activeval.sql',1466802869,485),('phabricator:20160518.ssh.03.activekey.sql',1466802869,10420),('phabricator:20160519.ssh.01.xaction.sql',1466802869,9024),('phabricator:20160531.pref.01.xaction.sql',1466802869,7837),('phabricator:20160531.pref.02.datecreatecol.sql',1466802869,11848),('phabricator:20160531.pref.03.datemodcol.sql',1466802869,13814),('phabricator:20160531.pref.04.datecreateval.sql',1466802869,429),('phabricator:20160531.pref.05.datemodval.sql',1466802869,305),('phabricator:20160531.pref.06.phidcol.sql',1466802869,12896),('phabricator:20160531.pref.07.phidval.php',1466802869,679),('phabricator:20160601.user.01.cache.sql',1466802869,9294),('phabricator:20160601.user.02.copyprefs.php',1466802869,1552),('phabricator:20160601.user.03.removetime.sql',1466802869,18764),('phabricator:20160601.user.04.removetranslation.sql',1466802869,20404),('phabricator:20160601.user.05.removesex.sql',1466802869,23968),('phabricator:20160603.user.01.removedcenabled.sql',1466802869,25907),('phabricator:20160603.user.02.removedctab.sql',1466802869,20792),('phabricator:20160603.user.03.removedcvisible.sql',1466802869,22140),('phabricator:20160604.user.01.stringmailprefs.php',1466802869,683),('phabricator:20160604.user.02.removeimagecache.sql',1466802870,22776),('phabricator:20160605.user.01.prefnulluser.sql',1466802870,12931),('phabricator:20160605.user.02.prefbuiltin.sql',1466802870,13598),('phabricator:20160605.user.03.builtinunique.sql',1466802870,12068),('phabricator:20160616.phame.blog.header.1.sql',1466802870,21493),('phabricator:20160616.repo.01.oldref.sql',1466802870,9001),('phabricator:20160617.harbormaster.01.arelease.sql',1466802870,16927),('phabricator:20160618.phame.blog.subtitle.sql',1466802870,28832),('phabricator:20160620.phame.blog.parentdomain.2.sql',1466802870,32443),('phabricator:20160620.phame.blog.parentsite.1.sql',1466802870,35279),('phabricator:20160623.phame.blog.fulldomain.1.sql',1466802870,37279),('phabricator:20160623.phame.blog.fulldomain.2.sql',1466802870,500),('phabricator:20160623.phame.blog.fulldomain.3.sql',1466802870,589),('phabricator:daemonstatus.sql',1466802856,NULL),('phabricator:daemonstatuskey.sql',1466802856,NULL),('phabricator:daemontaskarchive.sql',1466802856,NULL),('phabricator:db.almanac',1466802850,NULL),('phabricator:db.audit',1466802850,NULL),('phabricator:db.auth',1466802850,NULL),('phabricator:db.badges',1466802850,NULL),('phabricator:db.cache',1466802850,NULL),('phabricator:db.calendar',1466802850,NULL),('phabricator:db.chatlog',1466802850,NULL),('phabricator:db.conduit',1466802850,NULL),('phabricator:db.config',1466802850,NULL),('phabricator:db.conpherence',1466802850,NULL),('phabricator:db.countdown',1466802850,NULL),('phabricator:db.daemon',1466802850,NULL),('phabricator:db.dashboard',1466802850,NULL),('phabricator:db.differential',1466802850,NULL),('phabricator:db.diviner',1466802850,NULL),('phabricator:db.doorkeeper',1466802850,NULL),('phabricator:db.draft',1466802850,NULL),('phabricator:db.drydock',1466802850,NULL),('phabricator:db.fact',1466802850,NULL),('phabricator:db.feed',1466802850,NULL),('phabricator:db.file',1466802850,NULL),('phabricator:db.flag',1466802850,NULL),('phabricator:db.fund',1466802850,NULL),('phabricator:db.harbormaster',1466802850,NULL),('phabricator:db.herald',1466802850,NULL),('phabricator:db.legalpad',1466802850,NULL),('phabricator:db.maniphest',1466802850,NULL),('phabricator:db.meta_data',1466802850,NULL),('phabricator:db.metamta',1466802850,NULL),('phabricator:db.multimeter',1466802850,NULL),('phabricator:db.nuance',1466802850,NULL),('phabricator:db.oauth_server',1466802850,NULL),('phabricator:db.owners',1466802850,NULL),('phabricator:db.passphrase',1466802850,NULL),('phabricator:db.pastebin',1466802850,NULL),('phabricator:db.phame',1466802850,NULL),('phabricator:db.phlux',1466802850,NULL),('phabricator:db.pholio',1466802850,NULL),('phabricator:db.phortune',1466802850,NULL),('phabricator:db.phragment',1466802850,NULL),('phabricator:db.phrequent',1466802850,NULL),('phabricator:db.phriction',1466802850,NULL),('phabricator:db.phurl',1466802850,NULL),('phabricator:db.policy',1466802850,NULL),('phabricator:db.ponder',1466802850,NULL),('phabricator:db.project',1466802850,NULL),('phabricator:db.releeph',1466802850,NULL),('phabricator:db.repository',1466802850,NULL),('phabricator:db.search',1466802850,NULL),('phabricator:db.slowvote',1466802850,NULL),('phabricator:db.spaces',1466802850,NULL),('phabricator:db.system',1466802850,NULL),('phabricator:db.timeline',1466802850,NULL),('phabricator:db.token',1466802850,NULL),('phabricator:db.user',1466802850,NULL),('phabricator:db.worker',1466802850,NULL),('phabricator:db.xhpast',1466802850,NULL),('phabricator:db.xhpastview',1466802850,NULL),('phabricator:db.xhprof',1466802850,NULL),('phabricator:differentialbookmarks.sql',1466802856,NULL),('phabricator:draft-metadata.sql',1466802856,NULL),('phabricator:dropfileproxyimage.sql',1466802856,NULL),('phabricator:drydockresoucetype.sql',1466802856,NULL),('phabricator:drydocktaskid.sql',1466802856,NULL),('phabricator:edgetype.sql',1466802856,NULL),('phabricator:emailtable.sql',1466802855,NULL),('phabricator:emailtableport.sql',1466802855,NULL),('phabricator:emailtableremove.sql',1466802855,NULL),('phabricator:fact-raw.sql',1466802856,NULL),('phabricator:harbormasterobject.sql',1466802856,NULL),('phabricator:holidays.sql',1466802855,NULL),('phabricator:ldapinfo.sql',1466802855,NULL),('phabricator:legalpad-mailkey-populate.php',1466802858,NULL),('phabricator:legalpad-mailkey.sql',1466802858,NULL),('phabricator:liskcounters-task.sql',1466802856,NULL),('phabricator:liskcounters.php',1466802856,NULL),('phabricator:liskcounters.sql',1466802856,NULL),('phabricator:maniphestxcache.sql',1466802856,NULL),('phabricator:markupcache.sql',1466802856,NULL),('phabricator:migrate-differential-dependencies.php',1466802856,NULL),('phabricator:migrate-maniphest-dependencies.php',1466802856,NULL),('phabricator:migrate-maniphest-revisions.php',1466802856,NULL),('phabricator:migrate-project-edges.php',1466802856,NULL),('phabricator:owners-exclude.sql',1466802856,NULL),('phabricator:pastepolicy.sql',1466802856,NULL),('phabricator:phameblog.sql',1466802856,NULL),('phabricator:phamedomain.sql',1466802856,NULL),('phabricator:phameoneblog.sql',1466802856,NULL),('phabricator:phamepolicy.sql',1466802856,NULL),('phabricator:phiddrop.sql',1466802855,NULL),('phabricator:pholio.sql',1466802856,NULL),('phabricator:policy-project.sql',1466802856,NULL),('phabricator:ponder-comments.sql',1466802856,NULL),('phabricator:ponder-mailkey-populate.php',1466802856,NULL),('phabricator:ponder-mailkey.sql',1466802856,NULL),('phabricator:ponder.sql',1466802856,NULL),('phabricator:releeph.sql',1466802857,NULL),('phabricator:repository-lint.sql',1466802856,NULL),('phabricator:statustxt.sql',1466802856,NULL),('phabricator:symbolcontexts.sql',1466802856,NULL),('phabricator:testdatabase.sql',1466802855,NULL),('phabricator:threadtopic.sql',1466802855,NULL),('phabricator:userstatus.sql',1466802855,NULL),('phabricator:usertranslation.sql',1466802855,NULL),('phabricator:xhprof.sql',1466802856,NULL); CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_metamta` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; @@ -1773,6 +1815,24 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_oauth_server` /*!40100 DE USE `{$NAMESPACE}_oauth_server`; +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `oauth_server_oauthclientauthorization` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, @@ -1822,11 +1882,33 @@ CREATE TABLE `oauth_server_oauthserverclient` ( `editPolicy` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `isDisabled` tinyint(1) NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), + UNIQUE KEY `key_phid` (`phid`), KEY `creatorPHID` (`creatorPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `oauth_server_transaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_owners` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; USE `{$NAMESPACE}_owners`; @@ -1906,6 +1988,10 @@ CREATE TABLE `owners_package` ( `auditingEnabled` tinyint(1) NOT NULL DEFAULT '0', `mailKey` binary(20) NOT NULL, `status` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `autoReview` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `dominion` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_phid` (`phid`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; @@ -2065,6 +2151,11 @@ CREATE TABLE `phame_blog` ( `mailKey` binary(20) NOT NULL, `status` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, `profileImagePHID` varbinary(64) DEFAULT NULL, + `headerImagePHID` varbinary(64) DEFAULT NULL, + `subtitle` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, + `parentDomain` varchar(128) COLLATE {$COLLATE_TEXT} NOT NULL, + `parentSite` varchar(128) COLLATE {$COLLATE_TEXT} NOT NULL, + `domainFullURI` varchar(128) COLLATE {$COLLATE_TEXT} DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `phid` (`phid`), UNIQUE KEY `domain` (`domain`) @@ -2292,6 +2383,7 @@ CREATE TABLE `project` ( `projectPath` varbinary(64) NOT NULL, `projectDepth` int(10) unsigned NOT NULL, `projectPathKey` binary(4) NOT NULL, + `properties` longtext COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_pathkey` (`projectPathKey`), UNIQUE KEY `key_phid` (`phid`), @@ -2312,8 +2404,10 @@ CREATE TABLE `project_column` ( `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, `properties` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `proxyPHID` varbinary(64) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_proxy` (`projectPHID`,`proxyPHID`), KEY `key_status` (`projectPHID`,`status`,`sequence`), KEY `key_sequence` (`projectPHID`,`sequence`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; @@ -2447,7 +2541,7 @@ CREATE TABLE `repository` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, `name` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, - `callsign` varchar(32) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, + `callsign` varchar(32) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} DEFAULT NULL, `versionControlSystem` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, `details` longtext COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, @@ -2460,10 +2554,12 @@ CREATE TABLE `repository` ( `almanacServicePHID` varbinary(64) DEFAULT NULL, `spacePHID` varbinary(64) DEFAULT NULL, `repositorySlug` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} DEFAULT NULL, + `localPath` varchar(128) COLLATE {$COLLATE_TEXT} DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `callsign` (`callsign`), UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `callsign` (`callsign`), UNIQUE KEY `key_slug` (`repositorySlug`), + UNIQUE KEY `key_local` (`localPath`), KEY `key_vcs` (`versionControlSystem`), KEY `key_name` (`name`(128)), KEY `key_space` (`spacePHID`) @@ -2550,6 +2646,19 @@ CREATE TABLE `repository_filesystem` ( KEY `repositoryID` (`repositoryID`,`svnCommit`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `repository_gitlfsref` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryPHID` varbinary(64) NOT NULL, + `objectHash` binary(64) NOT NULL, + `byteSize` bigint(20) unsigned NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `filePHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_hash` (`repositoryPHID`,`objectHash`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `repository_lintmessage` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `branchID` int(10) unsigned NOT NULL, @@ -2579,6 +2688,14 @@ CREATE TABLE `repository_mirror` ( KEY `key_repository` (`repositoryPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `repository_oldref` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryPHID` varbinary(64) NOT NULL, + `commitIdentifier` varchar(40) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_repository` (`repositoryPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `repository_parents` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `childCommitID` int(10) unsigned NOT NULL, @@ -2610,13 +2727,30 @@ CREATE TABLE `repository_pathchange` ( KEY `repositoryID` (`repositoryID`,`pathID`,`commitSequence`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `repository_pullevent` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) DEFAULT NULL, + `epoch` int(10) unsigned NOT NULL, + `pullerPHID` varbinary(64) DEFAULT NULL, + `remoteAddress` varbinary(64) DEFAULT NULL, + `remoteProtocol` varchar(32) COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `resultType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `resultCode` int(10) unsigned NOT NULL, + `properties` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_repository` (`repositoryPHID`), + KEY `key_epoch` (`epoch`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `repository_pushevent` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, `repositoryPHID` varbinary(64) NOT NULL, `epoch` int(10) unsigned NOT NULL, `pusherPHID` varbinary(64) NOT NULL, - `remoteAddress` int(10) unsigned DEFAULT NULL, + `remoteAddress` varbinary(64) DEFAULT NULL, `remoteProtocol` varchar(32) COLLATE {$COLLATE_TEXT} DEFAULT NULL, `rejectCode` int(10) unsigned NOT NULL, `rejectDetails` varchar(64) COLLATE {$COLLATE_TEXT} DEFAULT NULL, @@ -2640,6 +2774,7 @@ CREATE TABLE `repository_pushlog` ( `refNew` varchar(40) COLLATE {$COLLATE_TEXT} NOT NULL, `mergeBase` varchar(40) COLLATE {$COLLATE_TEXT} DEFAULT NULL, `changeFlags` int(10) unsigned NOT NULL, + `devicePHID` varbinary(64) DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_phid` (`phid`), KEY `key_repository` (`repositoryPHID`), @@ -2716,6 +2851,24 @@ CREATE TABLE `repository_transaction` ( KEY `key_object` (`objectPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `repository_uri` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `repositoryPHID` varbinary(64) NOT NULL, + `uri` varchar(255) COLLATE {$COLLATE_TEXT} NOT NULL, + `builtinProtocol` varchar(32) COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `builtinIdentifier` varchar(32) COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `ioType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `displayType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `isDisabled` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `credentialPHID` varbinary(64) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_builtin` (`repositoryPHID`,`builtinProtocol`,`builtinIdentifier`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `repository_uriindex` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `repositoryPHID` varbinary(64) NOT NULL, @@ -2725,6 +2878,27 @@ CREATE TABLE `repository_uriindex` ( KEY `key_uri` (`repositoryURI`(128)) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `repository_uritransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `repository_vcspassword` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `userPHID` varbinary(64) NOT NULL, @@ -2735,10 +2909,40 @@ CREATE TABLE `repository_vcspassword` ( UNIQUE KEY `key_phid` (`userPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `repository_workingcopyversion` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `repositoryPHID` varbinary(64) NOT NULL, + `devicePHID` varbinary(64) NOT NULL, + `repositoryVersion` int(10) unsigned NOT NULL, + `isWriting` tinyint(1) NOT NULL, + `writeProperties` longtext COLLATE {$COLLATE_TEXT}, + `lockOwner` varchar(255) COLLATE {$COLLATE_TEXT} DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_workingcopy` (`repositoryPHID`,`devicePHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_search` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; USE `{$NAMESPACE}_search`; +CREATE TABLE `edge` ( + `src` varbinary(64) NOT NULL, + `type` int(10) unsigned NOT NULL, + `dst` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `seq` int(10) unsigned NOT NULL, + `dataID` int(10) unsigned DEFAULT NULL, + PRIMARY KEY (`src`,`type`,`dst`), + UNIQUE KEY `key_dst` (`dst`,`type`,`src`), + KEY `src` (`src`,`type`,`dateCreated`,`seq`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE TABLE `edgedata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `data` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `search_document` ( `phid` varbinary(64) NOT NULL, `documentType` varchar(4) COLLATE {$COLLATE_TEXT} NOT NULL, @@ -3031,26 +3235,19 @@ CREATE TABLE `user` ( `phid` varbinary(64) NOT NULL, `userName` varchar(64) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, `realName` varchar(128) COLLATE {$COLLATE_TEXT} NOT NULL, - `sex` varchar(4) COLLATE {$COLLATE_TEXT} DEFAULT NULL, - `translation` varchar(64) COLLATE {$COLLATE_TEXT} DEFAULT NULL, `passwordSalt` varchar(32) COLLATE {$COLLATE_TEXT} DEFAULT NULL, `passwordHash` varchar(128) COLLATE {$COLLATE_TEXT} DEFAULT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, `profileImagePHID` varbinary(64) DEFAULT NULL, - `consoleEnabled` tinyint(1) NOT NULL, - `consoleVisible` tinyint(1) NOT NULL, - `consoleTab` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, `conduitCertificate` varchar(255) COLLATE {$COLLATE_TEXT} NOT NULL, `isSystemAgent` tinyint(1) NOT NULL DEFAULT '0', `isDisabled` tinyint(1) NOT NULL, `isAdmin` tinyint(1) NOT NULL, - `timezoneIdentifier` varchar(255) COLLATE {$COLLATE_TEXT} NOT NULL, `isEmailVerified` int(10) unsigned NOT NULL, `isApproved` int(10) unsigned NOT NULL, `accountSecret` binary(64) NOT NULL, `isEnrolledInMultiFactor` tinyint(1) NOT NULL DEFAULT '0', - `profileImageCache` varchar(255) COLLATE {$COLLATE_TEXT} DEFAULT NULL, `availabilityCache` varchar(255) COLLATE {$COLLATE_TEXT} DEFAULT NULL, `availabilityCacheTTL` int(10) unsigned DEFAULT NULL, `isMailingList` tinyint(1) NOT NULL, @@ -3076,6 +3273,19 @@ CREATE TABLE `user_authinvite` ( UNIQUE KEY `key_phid` (`phid`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `user_cache` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `userPHID` varbinary(64) NOT NULL, + `cacheIndex` binary(12) NOT NULL, + `cacheKey` varchar(255) COLLATE {$COLLATE_TEXT} NOT NULL, + `cacheData` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `cacheType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_usercache` (`userPHID`,`cacheIndex`), + KEY `key_cachekey` (`cacheIndex`), + KEY `key_cachetype` (`cacheType`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `user_configuredcustomfieldstorage` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `objectPHID` varbinary(64) NOT NULL, @@ -3138,8 +3348,9 @@ CREATE TABLE `user_externalaccount` ( `profileImagePHID` varbinary(64) DEFAULT NULL, `properties` longtext COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `phid` (`phid`), - UNIQUE KEY `account_details` (`accountType`,`accountDomain`,`accountID`) + UNIQUE KEY `account_details` (`accountType`,`accountDomain`,`accountID`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_user` (`userPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; CREATE TABLE `user_log` ( @@ -3172,10 +3383,37 @@ CREATE TABLE `user_nametoken` ( CREATE TABLE `user_preferences` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `userPHID` varbinary(64) NOT NULL, + `userPHID` varbinary(64) DEFAULT NULL, `preferences` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + `phid` varbinary(64) NOT NULL, + `builtinKey` varchar(32) COLLATE {$COLLATE_TEXT} DEFAULT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `userPHID` (`userPHID`) + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_builtin` (`builtinKey`), + UNIQUE KEY `key_user` (`userPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE TABLE `user_preferencestransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; CREATE TABLE `user_profile` ( @@ -3186,6 +3424,7 @@ CREATE TABLE `user_profile` ( `profileImagePHID` varbinary(64) DEFAULT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `icon` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `userPHID` (`userPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; @@ -4512,21 +4751,47 @@ CREATE TABLE `auth_sshkey` ( `dateModified` int(10) unsigned NOT NULL, `keyIndex` binary(12) NOT NULL, `isTrusted` tinyint(1) NOT NULL, + `isActive` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_activeunique` (`keyIndex`,`isActive`), + KEY `key_object` (`objectPHID`), + KEY `key_active` (`isActive`,`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE TABLE `auth_sshkeytransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `key_unique` (`keyIndex`), UNIQUE KEY `key_phid` (`phid`), KEY `key_object` (`objectPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; CREATE TABLE `auth_temporarytoken` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `objectPHID` varbinary(64) NOT NULL, + `tokenResource` varbinary(64) NOT NULL, `tokenType` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, `tokenExpires` int(10) unsigned NOT NULL, `tokenCode` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, + `userPHID` varbinary(64) DEFAULT NULL, + `properties` longtext COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), - UNIQUE KEY `key_token` (`objectPHID`,`tokenType`,`tokenCode`), - KEY `key_expires` (`tokenExpires`) + UNIQUE KEY `key_token` (`tokenResource`,`tokenType`,`tokenCode`), + KEY `key_expires` (`tokenExpires`), + KEY `key_user` (`userPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_doorkeeper` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; @@ -4735,25 +5000,53 @@ CREATE TABLE `edgedata` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `nuance_importcursordata` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `sourcePHID` varbinary(64) NOT NULL, + `cursorKey` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `cursorType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `properties` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_source` (`sourcePHID`,`cursorKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `nuance_item` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, `ownerPHID` varbinary(64) DEFAULT NULL, - `requestorPHID` varbinary(64) NOT NULL, + `requestorPHID` varbinary(64) DEFAULT NULL, `sourcePHID` varbinary(64) NOT NULL, - `sourceLabel` varchar(255) COLLATE {$COLLATE_TEXT} DEFAULT NULL, - `status` int(10) unsigned NOT NULL, + `status` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, `data` longtext COLLATE {$COLLATE_TEXT} NOT NULL, `mailKey` binary(20) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `queuePHID` varbinary(64) NOT NULL, + `queuePHID` varbinary(64) DEFAULT NULL, + `itemType` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, + `itemKey` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, + `itemContainerKey` varchar(64) COLLATE {$COLLATE_TEXT} DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_item` (`sourcePHID`,`itemKey`), KEY `key_source` (`sourcePHID`,`status`), KEY `key_owner` (`ownerPHID`,`status`), KEY `key_requestor` (`requestorPHID`,`status`), - KEY `key_queue` (`queuePHID`,`status`) + KEY `key_queue` (`queuePHID`,`status`), + KEY `key_container` (`sourcePHID`,`itemContainerKey`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE TABLE `nuance_itemcommand` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `itemPHID` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `command` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, + `parameters` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_item` (`itemPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; CREATE TABLE `nuance_itemtransaction` ( @@ -4847,73 +5140,10 @@ CREATE TABLE `nuance_queuetransaction_comment` ( UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; -CREATE TABLE `nuance_requestor` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varbinary(64) NOT NULL, - `data` longtext COLLATE {$COLLATE_TEXT} NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `key_phid` (`phid`) -) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; - -CREATE TABLE `nuance_requestorsource` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `requestorPHID` varbinary(64) NOT NULL, - `sourcePHID` varbinary(64) NOT NULL, - `sourceKey` varchar(128) COLLATE {$COLLATE_TEXT} NOT NULL, - `data` longtext COLLATE {$COLLATE_TEXT} NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `key_source_key` (`sourcePHID`,`sourceKey`), - KEY `key_requestor` (`requestorPHID`,`id`), - KEY `key_source` (`sourcePHID`,`id`) -) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; - -CREATE TABLE `nuance_requestortransaction` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varbinary(64) NOT NULL, - `authorPHID` varbinary(64) NOT NULL, - `objectPHID` varbinary(64) NOT NULL, - `viewPolicy` varbinary(64) NOT NULL, - `editPolicy` varbinary(64) NOT NULL, - `commentPHID` varbinary(64) DEFAULT NULL, - `commentVersion` int(10) unsigned NOT NULL, - `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, - `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, - `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, - `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, - `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `key_phid` (`phid`), - KEY `key_object` (`objectPHID`) -) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; - -CREATE TABLE `nuance_requestortransaction_comment` ( - `id` int(10) unsigned NOT NULL AUTO_INCREMENT, - `phid` varbinary(64) NOT NULL, - `transactionPHID` varbinary(64) DEFAULT NULL, - `authorPHID` varbinary(64) NOT NULL, - `viewPolicy` varbinary(64) NOT NULL, - `editPolicy` varbinary(64) NOT NULL, - `commentVersion` int(10) unsigned NOT NULL, - `content` longtext COLLATE {$COLLATE_TEXT} NOT NULL, - `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, - `isDeleted` tinyint(1) NOT NULL, - `dateCreated` int(10) unsigned NOT NULL, - `dateModified` int(10) unsigned NOT NULL, - PRIMARY KEY (`id`), - UNIQUE KEY `key_phid` (`phid`), - UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) -) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; - CREATE TABLE `nuance_source` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, - `name` varchar(255) COLLATE {$COLLATE_TEXT} DEFAULT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, `type` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, `data` longtext COLLATE {$COLLATE_TEXT} NOT NULL, `mailKey` binary(20) NOT NULL, @@ -4922,11 +5152,21 @@ CREATE TABLE `nuance_source` ( `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, `defaultQueuePHID` varbinary(64) NOT NULL, + `isDisabled` tinyint(1) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_phid` (`phid`), KEY `key_type` (`type`,`dateModified`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `nuance_sourcename_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `nuance_sourcetransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, @@ -5347,6 +5587,24 @@ CREATE TABLE `fund_initiativetransaction` ( KEY `key_object` (`objectPHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `fund_initiativetransaction_comment` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `transactionPHID` varbinary(64) DEFAULT NULL, + `authorPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `content` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `isDeleted` tinyint(1) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_version` (`transactionPHID`,`commentVersion`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_almanac` /*!40100 DEFAULT CHARACTER SET {$CHARSET} COLLATE {$COLLATE_TEXT} */; USE `{$NAMESPACE}_almanac`; @@ -5360,6 +5618,7 @@ CREATE TABLE `almanac_binding` ( `mailKey` binary(20) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, + `isDisabled` tinyint(1) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_phid` (`phid`), UNIQUE KEY `key_service` (`servicePHID`,`interfacePHID`), @@ -5398,13 +5657,22 @@ CREATE TABLE `almanac_device` ( `mailKey` binary(20) NOT NULL, `viewPolicy` varbinary(64) NOT NULL, `editPolicy` varbinary(64) NOT NULL, - `isLocked` tinyint(1) NOT NULL, + `isBoundToClusterService` tinyint(1) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_phid` (`phid`), UNIQUE KEY `key_name` (`nameIndex`), KEY `key_nametext` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `almanac_devicename_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `almanac_devicetransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, @@ -5441,6 +5709,52 @@ CREATE TABLE `almanac_interface` ( KEY `key_device` (`devicePHID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `almanac_namespace` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `name` varchar(128) COLLATE {$COLLATE_TEXT} NOT NULL, + `nameIndex` binary(12) NOT NULL, + `mailKey` binary(20) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + UNIQUE KEY `key_nameindex` (`nameIndex`), + KEY `key_name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE TABLE `almanac_namespacename_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE TABLE `almanac_namespacetransaction` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `phid` varbinary(64) NOT NULL, + `authorPHID` varbinary(64) NOT NULL, + `objectPHID` varbinary(64) NOT NULL, + `viewPolicy` varbinary(64) NOT NULL, + `editPolicy` varbinary(64) NOT NULL, + `commentPHID` varbinary(64) DEFAULT NULL, + `commentVersion` int(10) unsigned NOT NULL, + `transactionType` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, + `oldValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `newValue` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `contentSource` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `metadata` longtext COLLATE {$COLLATE_TEXT} NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_phid` (`phid`), + KEY `key_object` (`objectPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `almanac_network` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, @@ -5454,6 +5768,15 @@ CREATE TABLE `almanac_network` ( UNIQUE KEY `key_phid` (`phid`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `almanac_networkname_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `almanac_networktransaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, @@ -5495,13 +5818,21 @@ CREATE TABLE `almanac_service` ( `editPolicy` varbinary(64) NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, - `serviceClass` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, - `isLocked` tinyint(1) NOT NULL, + `serviceType` varchar(64) COLLATE {$COLLATE_TEXT} NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key_phid` (`phid`), UNIQUE KEY `key_name` (`nameIndex`), KEY `key_nametext` (`name`), - KEY `key_class` (`serviceClass`) + KEY `key_servicetype` (`serviceType`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + +CREATE TABLE `almanac_servicename_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; CREATE TABLE `almanac_servicetransaction` ( @@ -5740,14 +6071,26 @@ CREATE DATABASE /*!32312 IF NOT EXISTS*/ `{$NAMESPACE}_badges` /*!40100 DEFAULT USE `{$NAMESPACE}_badges`; +CREATE TABLE `badges_award` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `badgePHID` varbinary(64) NOT NULL, + `recipientPHID` varbinary(64) NOT NULL, + `awarderPHID` varbinary(64) NOT NULL, + `dateCreated` int(10) unsigned NOT NULL, + `dateModified` int(10) unsigned NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `key_badge` (`badgePHID`,`recipientPHID`), + KEY `key_recipient` (`recipientPHID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `badges_badge` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, - `name` varchar(255) COLLATE {$COLLATE_TEXT} NOT NULL, + `name` varchar(255) CHARACTER SET {$CHARSET_SORT} COLLATE {$COLLATE_SORT} NOT NULL, `flavor` varchar(255) COLLATE {$COLLATE_TEXT} NOT NULL, `description` longtext COLLATE {$COLLATE_TEXT} NOT NULL, `icon` varchar(255) COLLATE {$COLLATE_TEXT} NOT NULL, - `quality` varchar(255) COLLATE {$COLLATE_TEXT} NOT NULL, + `quality` int(10) unsigned NOT NULL, `status` varchar(32) COLLATE {$COLLATE_TEXT} NOT NULL, `dateCreated` int(10) unsigned NOT NULL, `dateModified` int(10) unsigned NOT NULL, @@ -5759,6 +6102,15 @@ CREATE TABLE `badges_badge` ( KEY `key_creator` (`creatorPHID`,`dateModified`) ) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; +CREATE TABLE `badges_badgename_ngrams` ( + `id` int(10) unsigned NOT NULL AUTO_INCREMENT, + `objectID` int(10) unsigned NOT NULL, + `ngram` char(3) COLLATE {$COLLATE_TEXT} NOT NULL, + PRIMARY KEY (`id`), + KEY `key_object` (`objectID`), + KEY `key_ngram` (`ngram`,`objectID`) +) ENGINE=InnoDB DEFAULT CHARSET={$CHARSET} COLLATE={$COLLATE_TEXT}; + CREATE TABLE `badges_transaction` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `phid` varbinary(64) NOT NULL, diff --git a/scripts/repository/commit_hook.php b/scripts/repository/commit_hook.php index 4f6997c52a..44c772225c 100755 --- a/scripts/repository/commit_hook.php +++ b/scripts/repository/commit_hook.php @@ -54,10 +54,62 @@ if (!$repository->isHosted()) { $engine->setRepository($repository); +$args = new PhutilArgumentParser($argv); +$args->parsePartial( + array( + array( + 'name' => 'hook-mode', + 'param' => 'mode', + 'help' => pht('Hook execution mode.'), + ), + )); + +$argv = array_merge( + array($argv[0]), + $args->getUnconsumedArgumentVector()); // Figure out which user is writing the commit. +$hook_mode = $args->getArg('hook-mode'); +if ($hook_mode !== null) { + $known_modes = array( + 'svn-revprop' => true, + ); -if ($repository->isGit() || $repository->isHg()) { + if (empty($known_modes[$hook_mode])) { + throw new Exception( + pht( + 'Invalid Hook Mode: This hook was invoked in "%s" mode, but this '. + 'is not a recognized hook mode. Valid modes are: %s.', + $hook_mode, + implode(', ', array_keys($known_modes)))); + } +} + +$is_svnrevprop = ($hook_mode == 'svn-revprop'); + +if ($is_svnrevprop) { + // For now, we let these through if the repository allows dangerous changes + // and prevent them if it doesn't. See T11208 for discussion. + + $revprop_key = $argv[5]; + + if ($repository->shouldAllowDangerousChanges()) { + $err = 0; + } else { + $err = 1; + + $console = PhutilConsole::getConsole(); + $console->writeErr( + pht( + "DANGEROUS CHANGE: Dangerous change protection is enabled for this ". + "repository, so you can not change revision properties (you are ". + "attempting to edit \"%s\").\n". + "Edit the repository configuration before making dangerous changes.", + $revprop_key)); + } + + exit($err); +} else if ($repository->isGit() || $repository->isHg()) { $username = getenv(DiffusionCommitHookEngine::ENV_USER); if (!strlen($username)) { throw new Exception( diff --git a/scripts/ssh/ssh-connect.php b/scripts/ssh/ssh-connect.php index d42a542140..a9bc921e69 100755 --- a/scripts/ssh/ssh-connect.php +++ b/scripts/ssh/ssh-connect.php @@ -88,7 +88,22 @@ if ($as_device) { $arguments[] = AlmanacKeys::getKeyPath('device.key'); } +// Subversion passes us a host in the form "domain.com:port", which is not +// valid for normal SSH but which we can parse into a valid "-p" flag. + +$passthru_args = $unconsumed_argv; +$host = array_shift($passthru_args); +$parts = explode(':', $host, 2); +$host = $parts[0]; + $port = $args->getArg('port'); + +if (!$port) { + if (count($parts) == 2) { + $port = $parts[1]; + } +} + if ($port) { $pattern[] = '-p %d'; $arguments[] = $port; @@ -96,7 +111,9 @@ if ($port) { $pattern[] = '--'; -$passthru_args = $unconsumed_argv; +$pattern[] = '%s'; +$arguments[] = $host; + foreach ($passthru_args as $passthru_arg) { $pattern[] = '%s'; $arguments[] = $passthru_arg; diff --git a/scripts/ssh/ssh-exec.php b/scripts/ssh/ssh-exec.php index 56b13ff142..5748e371cf 100755 --- a/scripts/ssh/ssh-exec.php +++ b/scripts/ssh/ssh-exec.php @@ -190,12 +190,14 @@ try { 'P' => $user->getPHID(), )); - if (!$user->canEstablishSSHSessions()) { - throw new Exception( - pht( - 'Your account ("%s") does not have permission to establish SSH '. - 'sessions. Visit the web interface for more information.', - $user_name)); + if (!$device) { + if (!$user->canEstablishSSHSessions()) { + throw new Exception( + pht( + 'Your account ("%s") does not have permission to establish SSH '. + 'sessions. Visit the web interface for more information.', + $user_name)); + } } $workflows = id(new PhutilClassMapQuery()) diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 6a518c2244..68fab974c6 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -350,7 +350,6 @@ phutil_register_library_map(array( 'DefaultDatabaseConfigurationProvider' => 'infrastructure/storage/configuration/DefaultDatabaseConfigurationProvider.php', 'DifferentialAction' => 'applications/differential/constants/DifferentialAction.php', 'DifferentialActionEmailCommand' => 'applications/differential/command/DifferentialActionEmailCommand.php', - 'DifferentialActionMenuEventListener' => 'applications/differential/event/DifferentialActionMenuEventListener.php', 'DifferentialAddCommentView' => 'applications/differential/view/DifferentialAddCommentView.php', 'DifferentialAdjustmentMapTestCase' => 'applications/differential/storage/__tests__/DifferentialAdjustmentMapTestCase.php', 'DifferentialAffectedPath' => 'applications/differential/storage/DifferentialAffectedPath.php', @@ -1420,8 +1419,13 @@ phutil_register_library_map(array( 'ManiphestTaskEditController' => 'applications/maniphest/controller/ManiphestTaskEditController.php', 'ManiphestTaskFulltextEngine' => 'applications/maniphest/search/ManiphestTaskFulltextEngine.php', 'ManiphestTaskHasCommitEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasCommitEdgeType.php', + 'ManiphestTaskHasCommitRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasCommitRelationship.php', 'ManiphestTaskHasMockEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasMockEdgeType.php', + 'ManiphestTaskHasMockRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasMockRelationship.php', + 'ManiphestTaskHasParentRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasParentRelationship.php', 'ManiphestTaskHasRevisionEdgeType' => 'applications/maniphest/edge/ManiphestTaskHasRevisionEdgeType.php', + 'ManiphestTaskHasRevisionRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasRevisionRelationship.php', + 'ManiphestTaskHasSubtaskRelationship' => 'applications/maniphest/relationship/ManiphestTaskHasSubtaskRelationship.php', 'ManiphestTaskHeraldField' => 'applications/maniphest/herald/ManiphestTaskHeraldField.php', 'ManiphestTaskHeraldFieldGroup' => 'applications/maniphest/herald/ManiphestTaskHeraldFieldGroup.php', 'ManiphestTaskListController' => 'applications/maniphest/controller/ManiphestTaskListController.php', @@ -1437,6 +1441,7 @@ phutil_register_library_map(array( 'ManiphestTaskPriorityHeraldAction' => 'applications/maniphest/herald/ManiphestTaskPriorityHeraldAction.php', 'ManiphestTaskPriorityHeraldField' => 'applications/maniphest/herald/ManiphestTaskPriorityHeraldField.php', 'ManiphestTaskQuery' => 'applications/maniphest/query/ManiphestTaskQuery.php', + 'ManiphestTaskRelationship' => 'applications/maniphest/relationship/ManiphestTaskRelationship.php', 'ManiphestTaskResultListView' => 'applications/maniphest/view/ManiphestTaskResultListView.php', 'ManiphestTaskSearchEngine' => 'applications/maniphest/query/ManiphestTaskSearchEngine.php', 'ManiphestTaskStatus' => 'applications/maniphest/constants/ManiphestTaskStatus.php', @@ -2860,6 +2865,8 @@ phutil_register_library_map(array( 'PhabricatorObjectMentionedByObjectEdgeType' => 'applications/transactions/edges/PhabricatorObjectMentionedByObjectEdgeType.php', 'PhabricatorObjectMentionsObjectEdgeType' => 'applications/transactions/edges/PhabricatorObjectMentionsObjectEdgeType.php', 'PhabricatorObjectQuery' => 'applications/phid/query/PhabricatorObjectQuery.php', + 'PhabricatorObjectRelationship' => 'applications/search/relationship/PhabricatorObjectRelationship.php', + 'PhabricatorObjectRelationshipList' => 'applications/search/relationship/PhabricatorObjectRelationshipList.php', 'PhabricatorObjectRemarkupRule' => 'infrastructure/markup/rule/PhabricatorObjectRemarkupRule.php', 'PhabricatorObjectSelectorDialog' => 'view/control/PhabricatorObjectSelectorDialog.php', 'PhabricatorOffsetPagedQuery' => 'infrastructure/query/PhabricatorOffsetPagedQuery.php', @@ -3389,6 +3396,7 @@ phutil_register_library_map(array( 'PhabricatorSearchOrderController' => 'applications/search/controller/PhabricatorSearchOrderController.php', 'PhabricatorSearchOrderField' => 'applications/search/field/PhabricatorSearchOrderField.php', 'PhabricatorSearchRelationship' => 'applications/search/constants/PhabricatorSearchRelationship.php', + 'PhabricatorSearchRelationshipController' => 'applications/search/controller/PhabricatorSearchRelationshipController.php', 'PhabricatorSearchResultBucket' => 'applications/search/buckets/PhabricatorSearchResultBucket.php', 'PhabricatorSearchResultBucketGroup' => 'applications/search/buckets/PhabricatorSearchResultBucketGroup.php', 'PhabricatorSearchResultView' => 'applications/search/view/PhabricatorSearchResultView.php', @@ -3834,7 +3842,6 @@ phutil_register_library_map(array( 'PhluxVariablePHIDType' => 'applications/phlux/phid/PhluxVariablePHIDType.php', 'PhluxVariableQuery' => 'applications/phlux/query/PhluxVariableQuery.php', 'PhluxViewController' => 'applications/phlux/controller/PhluxViewController.php', - 'PholioActionMenuEventListener' => 'applications/pholio/event/PholioActionMenuEventListener.php', 'PholioController' => 'applications/pholio/controller/PholioController.php', 'PholioDAO' => 'applications/pholio/storage/PholioDAO.php', 'PholioDefaultEditCapability' => 'applications/pholio/capability/PholioDefaultEditCapability.php', @@ -4662,7 +4669,6 @@ phutil_register_library_map(array( ), 'DifferentialAction' => 'Phobject', 'DifferentialActionEmailCommand' => 'MetaMTAEmailTransactionCommand', - 'DifferentialActionMenuEventListener' => 'PhabricatorEventListener', 'DifferentialAddCommentView' => 'AphrontView', 'DifferentialAdjustmentMapTestCase' => 'PhutilTestCase', 'DifferentialAffectedPath' => 'DifferentialDAO', @@ -5906,8 +5912,13 @@ phutil_register_library_map(array( 'ManiphestTaskEditController' => 'ManiphestController', 'ManiphestTaskFulltextEngine' => 'PhabricatorFulltextEngine', 'ManiphestTaskHasCommitEdgeType' => 'PhabricatorEdgeType', + 'ManiphestTaskHasCommitRelationship' => 'ManiphestTaskRelationship', 'ManiphestTaskHasMockEdgeType' => 'PhabricatorEdgeType', + 'ManiphestTaskHasMockRelationship' => 'ManiphestTaskRelationship', + 'ManiphestTaskHasParentRelationship' => 'ManiphestTaskRelationship', 'ManiphestTaskHasRevisionEdgeType' => 'PhabricatorEdgeType', + 'ManiphestTaskHasRevisionRelationship' => 'ManiphestTaskRelationship', + 'ManiphestTaskHasSubtaskRelationship' => 'ManiphestTaskRelationship', 'ManiphestTaskHeraldField' => 'HeraldField', 'ManiphestTaskHeraldFieldGroup' => 'HeraldFieldGroup', 'ManiphestTaskListController' => 'ManiphestController', @@ -5923,6 +5934,7 @@ phutil_register_library_map(array( 'ManiphestTaskPriorityHeraldAction' => 'HeraldAction', 'ManiphestTaskPriorityHeraldField' => 'ManiphestTaskHeraldField', 'ManiphestTaskQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'ManiphestTaskRelationship' => 'PhabricatorObjectRelationship', 'ManiphestTaskResultListView' => 'ManiphestView', 'ManiphestTaskSearchEngine' => 'PhabricatorApplicationSearchEngine', 'ManiphestTaskStatus' => 'ManiphestConstants', @@ -7547,6 +7559,8 @@ phutil_register_library_map(array( 'PhabricatorObjectMentionedByObjectEdgeType' => 'PhabricatorEdgeType', 'PhabricatorObjectMentionsObjectEdgeType' => 'PhabricatorEdgeType', 'PhabricatorObjectQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', + 'PhabricatorObjectRelationship' => 'Phobject', + 'PhabricatorObjectRelationshipList' => 'Phobject', 'PhabricatorObjectRemarkupRule' => 'PhutilRemarkupRule', 'PhabricatorObjectSelectorDialog' => 'Phobject', 'PhabricatorOffsetPagedQuery' => 'PhabricatorQuery', @@ -8204,6 +8218,7 @@ phutil_register_library_map(array( 'PhabricatorSearchOrderController' => 'PhabricatorSearchBaseController', 'PhabricatorSearchOrderField' => 'PhabricatorSearchField', 'PhabricatorSearchRelationship' => 'Phobject', + 'PhabricatorSearchRelationshipController' => 'PhabricatorSearchBaseController', 'PhabricatorSearchResultBucket' => 'Phobject', 'PhabricatorSearchResultBucketGroup' => 'Phobject', 'PhabricatorSearchResultView' => 'AphrontView', @@ -8730,7 +8745,6 @@ phutil_register_library_map(array( 'PhluxVariablePHIDType' => 'PhabricatorPHIDType', 'PhluxVariableQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhluxViewController' => 'PhluxController', - 'PholioActionMenuEventListener' => 'PhabricatorEventListener', 'PholioController' => 'PhabricatorController', 'PholioDAO' => 'PhabricatorLiskDAO', 'PholioDefaultEditCapability' => 'PhabricatorPolicyCapability', diff --git a/src/applications/auth/controller/PhabricatorAuthStartController.php b/src/applications/auth/controller/PhabricatorAuthStartController.php index 982252d29f..5cfcb9b9ef 100644 --- a/src/applications/auth/controller/PhabricatorAuthStartController.php +++ b/src/applications/auth/controller/PhabricatorAuthStartController.php @@ -225,10 +225,10 @@ final class PhabricatorAuthStartController } // Often, users end up here by clicking a disabled action link in the UI - // (for example, they might click "Edit Blocking Tasks" on a Maniphest - // task page). After they log in we want to send them back to that main - // object page if we can, since it's confusing to end up on a standalone - // page with only a dialog (particularly if that dialog is another error, + // (for example, they might click "Edit Subtasks" on a Maniphest task + // page). After they log in we want to send them back to that main object + // page if we can, since it's confusing to end up on a standalone page with + // only a dialog (particularly if that dialog is another error, // like a policy exception). $via_header = AphrontRequest::getViaHeaderName(); diff --git a/src/applications/badges/editor/PhabricatorBadgesEditor.php b/src/applications/badges/editor/PhabricatorBadgesEditor.php index e71dd622c8..45a42a3362 100644 --- a/src/applications/badges/editor/PhabricatorBadgesEditor.php +++ b/src/applications/badges/editor/PhabricatorBadgesEditor.php @@ -47,7 +47,7 @@ final class PhabricatorBadgesEditor case PhabricatorBadgesTransaction::TYPE_ICON: return $object->getIcon(); case PhabricatorBadgesTransaction::TYPE_QUALITY: - return $object->getQuality(); + return (int)$object->getQuality(); case PhabricatorBadgesTransaction::TYPE_STATUS: return $object->getStatus(); case PhabricatorBadgesTransaction::TYPE_AWARD: diff --git a/src/applications/badges/storage/PhabricatorBadgesTransaction.php b/src/applications/badges/storage/PhabricatorBadgesTransaction.php index f088c2d973..22505b247e 100644 --- a/src/applications/badges/storage/PhabricatorBadgesTransaction.php +++ b/src/applications/badges/storage/PhabricatorBadgesTransaction.php @@ -105,14 +105,14 @@ final class PhabricatorBadgesTransaction } break; case self::TYPE_QUALITY: + $qual_new = PhabricatorBadgesQuality::getQualityName($new); + $qual_old = PhabricatorBadgesQuality::getQualityName($old); if ($old === null) { return pht( '%s set the quality for this badge as "%s".', $this->renderHandleLink($author_phid), - $new); + $qual_new); } else { - $qual_new = PhabricatorBadgesQuality::getQualityName($new); - $qual_old = PhabricatorBadgesQuality::getQualityName($old); return pht( '%s updated the quality for this badge from "%s" to "%s".', $this->renderHandleLink($author_phid), diff --git a/src/applications/base/controller/PhabricatorController.php b/src/applications/base/controller/PhabricatorController.php index 08966f29a5..0cb8182776 100644 --- a/src/applications/base/controller/PhabricatorController.php +++ b/src/applications/base/controller/PhabricatorController.php @@ -474,8 +474,11 @@ abstract class PhabricatorController extends AphrontController { public function newCurtainView($object) { $viewer = $this->getViewer(); + $action_id = celerity_generate_unique_node_id(); + $action_list = id(new PhabricatorActionListView()) - ->setViewer($viewer); + ->setViewer($viewer) + ->setID($action_id); // NOTE: Applications (objects of class PhabricatorApplication) can't // currently be set here, although they don't need any of the extensions diff --git a/src/applications/celerity/CelerityStaticResourceResponse.php b/src/applications/celerity/CelerityStaticResourceResponse.php index f81b8d5957..7db6c2741b 100644 --- a/src/applications/celerity/CelerityStaticResourceResponse.php +++ b/src/applications/celerity/CelerityStaticResourceResponse.php @@ -13,6 +13,7 @@ final class CelerityStaticResourceResponse extends Phobject { private $packaged; private $metadata = array(); private $metadataBlock = 0; + private $metadataLocked; private $behaviors = array(); private $hasRendered = array(); private $postprocessorKey; @@ -24,6 +25,13 @@ final class CelerityStaticResourceResponse extends Phobject { } public function addMetadata($metadata) { + if ($this->metadataLocked) { + throw new Exception( + pht( + 'Attempting to add more metadata after metadata has been '. + 'locked.')); + } + $id = count($this->metadata); $this->metadata[$id] = $metadata; return $this->metadataBlock.'_'.$id; @@ -189,6 +197,8 @@ final class CelerityStaticResourceResponse extends Phobject { } public function renderHTMLFooter() { + $this->metadataLocked = true; + $data = array(); if ($this->metadata) { $json_metadata = AphrontResponse::encodeJSONForHTTPResponse( diff --git a/src/applications/differential/application/PhabricatorDifferentialApplication.php b/src/applications/differential/application/PhabricatorDifferentialApplication.php index ed0053061b..589dfe239d 100644 --- a/src/applications/differential/application/PhabricatorDifferentialApplication.php +++ b/src/applications/differential/application/PhabricatorDifferentialApplication.php @@ -43,7 +43,6 @@ final class PhabricatorDifferentialApplication extends PhabricatorApplication { public function getEventListeners() { return array( - new DifferentialActionMenuEventListener(), new DifferentialLandingActionMenuEventListener(), ); } diff --git a/src/applications/differential/event/DifferentialActionMenuEventListener.php b/src/applications/differential/event/DifferentialActionMenuEventListener.php deleted file mode 100644 index a35f834136..0000000000 --- a/src/applications/differential/event/DifferentialActionMenuEventListener.php +++ /dev/null @@ -1,50 +0,0 @@ -listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS); - } - - public function handleEvent(PhutilEvent $event) { - switch ($event->getType()) { - case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS: - $this->handleActionsEvent($event); - break; - } - } - - private function handleActionsEvent(PhutilEvent $event) { - $object = $event->getValue('object'); - - $actions = null; - if ($object instanceof ManiphestTask) { - $actions = $this->renderTaskItems($event); - $this->addActionMenuItems($event, $actions); - } - - } - - private function renderTaskItems(PhutilEvent $event) { - if (!$this->canUseApplication($event->getUser())) { - return null; - } - - $task = $event->getValue('object'); - $phid = $task->getPHID(); - - $can_edit = PhabricatorPolicyFilter::hasCapability( - $event->getUser(), - $task, - PhabricatorPolicyCapability::CAN_EDIT); - - return id(new PhabricatorActionView()) - ->setName(pht('Edit Differential Revisions')) - ->setHref("/search/attach/{$phid}/DREV/") - ->setIcon('fa-cog') - ->setDisabled(!$can_edit) - ->setWorkflow(true); - } - -} diff --git a/src/applications/diffusion/controller/DiffusionRepositoryEditDangerousController.php b/src/applications/diffusion/controller/DiffusionRepositoryEditDangerousController.php index d0dd2cc2e9..1088733cfc 100644 --- a/src/applications/diffusion/controller/DiffusionRepositoryEditDangerousController.php +++ b/src/applications/diffusion/controller/DiffusionRepositoryEditDangerousController.php @@ -18,25 +18,14 @@ final class DiffusionRepositoryEditDangerousController ->getPanelURI(); if (!$repository->canAllowDangerousChanges()) { - if ($repository->isSVN()) { - return $this->newDialog() - ->setTitle(pht('Not in Danger')) - ->appendParagraph( - pht( - 'It is not possible for users to push any dangerous changes '. - 'to a Subversion repository. Pushes to a Subversion repository '. - 'can always be reverted and never destroy data.')) - ->addCancelButton($panel_uri); - } else { - return $this->newDialog() - ->setTitle(pht('Unprotectable Repository')) - ->appendParagraph( - pht( - 'This repository can not be protected from dangerous changes '. - 'because Phabricator does not control what users are allowed '. - 'to push to it.')) - ->addCancelButton($panel_uri); - } + return $this->newDialog() + ->setTitle(pht('Unprotectable Repository')) + ->appendParagraph( + pht( + 'This repository can not be protected from dangerous changes '. + 'because Phabricator does not control what users are allowed '. + 'to push to it.')) + ->addCancelButton($panel_uri); } if ($request->isFormPost()) { @@ -57,18 +46,34 @@ final class DiffusionRepositoryEditDangerousController if ($repository->shouldAllowDangerousChanges()) { $title = pht('Prevent Dangerous Changes'); - $body = pht( - 'It will no longer be possible to delete branches from this '. - 'repository, or %s push to this repository.', - $force); + + if ($repository->isSVN()) { + $body = pht( + 'It will no longer be possible to edit revprops in this '. + 'repository.'); + } else { + $body = pht( + 'It will no longer be possible to delete branches from this '. + 'repository, or %s push to this repository.', + $force); + } + $submit = pht('Prevent Dangerous Changes'); } else { $title = pht('Allow Dangerous Changes'); - $body = pht( - 'If you allow dangerous changes, it will be possible to delete '. - 'branches and %s push this repository. These operations can '. - 'alter a repository in a way that is difficult to recover from.', - $force); + if ($repository->isSVN()) { + $body = pht( + 'If you allow dangerous changes, it will be possible to edit '. + 'reprops in this repository, including arbitrarily rewriting '. + 'commit messages. These operations can alter a repository in a '. + 'way that is difficult to recover from.'); + } else { + $body = pht( + 'If you allow dangerous changes, it will be possible to delete '. + 'branches and %s push this repository. These operations can '. + 'alter a repository in a way that is difficult to recover from.', + $force); + } $submit = pht('Allow Dangerous Changes'); } diff --git a/src/applications/diffusion/typeahead/DiffusionRepositoryDatasource.php b/src/applications/diffusion/typeahead/DiffusionRepositoryDatasource.php index bd702baaee..0b3f191563 100644 --- a/src/applications/diffusion/typeahead/DiffusionRepositoryDatasource.php +++ b/src/applications/diffusion/typeahead/DiffusionRepositoryDatasource.php @@ -31,24 +31,50 @@ final class DiffusionRepositoryDatasource "phabricator-search-icon phui-font-fa phui-icon-view {$type_icon}"; $results = array(); - foreach ($repos as $repo) { - $display_name = $repo->getMonogram().' '.$repo->getName(); + foreach ($repos as $repository) { + $monogram = $repository->getMonogram(); + $name = $repository->getName(); - $name = $display_name; - $slug = $repo->getRepositorySlug(); + $display_name = "{$monogram} {$name}"; + + $parts = array(); + $parts[] = $name; + + $slug = $repository->getRepositorySlug(); if (strlen($slug)) { - $name = "{$name} {$slug}"; + $parts[] = $slug; } - $results[] = id(new PhabricatorTypeaheadResult()) + $callsign = $repository->getCallsign(); + if ($callsign) { + $parts[] = $callsign; + } + + foreach ($repository->getAllMonograms() as $monogram) { + $parts[] = $monogram; + } + + $name = implode(' ', $parts); + + $vcs = $repository->getVersionControlSystem(); + $vcs_type = PhabricatorRepositoryType::getNameForRepositoryType($vcs); + + $result = id(new PhabricatorTypeaheadResult()) ->setName($name) ->setDisplayName($display_name) - ->setURI($repo->getURI()) - ->setPHID($repo->getPHID()) - ->setPriorityString($repo->getMonogram()) + ->setURI($repository->getURI()) + ->setPHID($repository->getPHID()) + ->setPriorityString($repository->getMonogram()) ->setPriorityType('repo') ->setImageSprite($image_sprite) - ->setDisplayType(pht('Repository')); + ->setDisplayType(pht('Repository')) + ->addAttribute($vcs_type); + + if (!$repository->isTracked()) { + $result->setClosed(pht('Inactive')); + } + + $results[] = $result; } return $results; diff --git a/src/applications/diffusion/typeahead/DiffusionTaggedRepositoriesFunctionDatasource.php b/src/applications/diffusion/typeahead/DiffusionTaggedRepositoriesFunctionDatasource.php index bdf89bca0c..6c6fdeaf79 100644 --- a/src/applications/diffusion/typeahead/DiffusionTaggedRepositoriesFunctionDatasource.php +++ b/src/applications/diffusion/typeahead/DiffusionTaggedRepositoriesFunctionDatasource.php @@ -43,7 +43,10 @@ final class DiffusionTaggedRepositoriesFunctionDatasource ->setColor(null) ->setPHID('tagged('.$result->getPHID().')') ->setDisplayName(pht('Tagged: %s', $result->getDisplayName())) - ->setName('tagged '.$result->getName()); + ->setName('tagged '.$result->getName()) + ->resetAttributes() + ->addAttribute(pht('Function')) + ->addAttribute(pht('Select repositories tagged with this project.')); } return $results; diff --git a/src/applications/drydock/typeahead/DrydockBlueprintDatasource.php b/src/applications/drydock/typeahead/DrydockBlueprintDatasource.php index 79229bfab5..d36a2bc64b 100644 --- a/src/applications/drydock/typeahead/DrydockBlueprintDatasource.php +++ b/src/applications/drydock/typeahead/DrydockBlueprintDatasource.php @@ -7,6 +7,10 @@ final class DrydockBlueprintDatasource return pht('Type a blueprint name...'); } + public function getBrowseTitle() { + return pht('Browse Blueprints'); + } + public function getDatasourceApplicationClass() { return 'PhabricatorDrydockApplication'; } @@ -37,6 +41,9 @@ final class DrydockBlueprintDatasource $result->setClosed(pht('Disabled')); } + $result->addAttribute( + $blueprint->getImplementation()->getBlueprintName()); + $results[] = $result; } diff --git a/src/applications/herald/field/HeraldField.php b/src/applications/herald/field/HeraldField.php index 98d6d8ffc4..2abed0ff1d 100644 --- a/src/applications/herald/field/HeraldField.php +++ b/src/applications/herald/field/HeraldField.php @@ -80,6 +80,8 @@ abstract class HeraldField extends Phobject { HeraldAdapter::CONDITION_NOT_CONTAINS, HeraldAdapter::CONDITION_REGEXP, HeraldAdapter::CONDITION_NOT_REGEXP, + HeraldAdapter::CONDITION_EXISTS, + HeraldAdapter::CONDITION_NOT_EXISTS, ); case self::STANDARD_TEXT_MAP: return array( @@ -107,7 +109,13 @@ abstract class HeraldField extends Phobject { case self::STANDARD_TEXT: case self::STANDARD_TEXT_LIST: case self::STANDARD_TEXT_MAP: - return new HeraldTextFieldValue(); + switch ($condition) { + case HeraldAdapter::CONDITION_EXISTS: + case HeraldAdapter::CONDITION_NOT_EXISTS: + return new HeraldEmptyFieldValue(); + default: + return new HeraldTextFieldValue(); + } case self::STANDARD_PHID: case self::STANDARD_PHID_NULLABLE: case self::STANDARD_PHID_LIST: diff --git a/src/applications/maniphest/controller/ManiphestTaskDetailController.php b/src/applications/maniphest/controller/ManiphestTaskDetailController.php index 1007672e23..bc862a1122 100644 --- a/src/applications/maniphest/controller/ManiphestTaskDetailController.php +++ b/src/applications/maniphest/controller/ManiphestTaskDetailController.php @@ -166,15 +166,6 @@ final class ManiphestTaskDetailController extends ManiphestController { ->setDisabled(!$can_edit) ->setWorkflow(!$can_edit)); - $curtain->addAction( - id(new PhabricatorActionView()) - ->setName(pht('Merge Duplicates In')) - ->setHref("/search/attach/{$phid}/TASK/merge/") - ->setWorkflow(true) - ->setIcon('fa-compress') - ->setDisabled(!$can_edit) - ->setWorkflow(true)); - $edit_config = $edit_engine->loadDefaultEditConfiguration(); $can_create = (bool)$edit_config; @@ -195,23 +186,45 @@ final class ManiphestTaskDetailController extends ManiphestController { $edit_uri = $this->getApplicationURI($edit_uri); } - $curtain->addAction( - id(new PhabricatorActionView()) - ->setName(pht('Create Subtask')) - ->setHref($edit_uri) - ->setIcon('fa-level-down') - ->setDisabled(!$can_create) - ->setWorkflow(!$can_create)); + $task_submenu = array(); + + $task_submenu[] = id(new PhabricatorActionView()) + ->setName(pht('Create Subtask')) + ->setHref($edit_uri) + ->setIcon('fa-level-down') + ->setDisabled(!$can_create) + ->setWorkflow(!$can_create); + + $relationship_list = PhabricatorObjectRelationshipList::newForObject( + $viewer, + $task); + + $parent_key = ManiphestTaskHasParentRelationship::RELATIONSHIPKEY; + $subtask_key = ManiphestTaskHasSubtaskRelationship::RELATIONSHIPKEY; + + $task_submenu[] = $relationship_list->getRelationship($parent_key) + ->newAction($task); + + $task_submenu[] = $relationship_list->getRelationship($subtask_key) + ->newAction($task); + + $task_submenu[] = id(new PhabricatorActionView()) + ->setName(pht('Merge Duplicates In')) + ->setHref("/search/attach/{$phid}/TASK/merge/") + ->setIcon('fa-compress') + ->setDisabled(!$can_edit) + ->setWorkflow(true); $curtain->addAction( id(new PhabricatorActionView()) - ->setName(pht('Edit Blocking Tasks')) - ->setHref("/search/attach/{$phid}/TASK/blocks/") - ->setWorkflow(true) - ->setIcon('fa-link') - ->setDisabled(!$can_edit) - ->setWorkflow(true)); + ->setName(pht('Edit Related Tasks...')) + ->setIcon('fa-anchor') + ->setSubmenu($task_submenu)); + $relationship_submenu = $relationship_list->newActionMenu(); + if ($relationship_submenu) { + $curtain->addAction($relationship_submenu); + } $owner_phid = $task->getOwnerPHID(); $author_phid = $task->getAuthorPHID(); @@ -277,9 +290,9 @@ final class ManiphestTaskDetailController extends ManiphestController { $edge_types = array( ManiphestTaskDependedOnByTaskEdgeType::EDGECONST - => pht('Blocks'), + => pht('Parent Tasks'), ManiphestTaskDependsOnTaskEdgeType::EDGECONST - => pht('Blocked By'), + => pht('Subtasks'), ManiphestTaskHasRevisionEdgeType::EDGECONST => pht('Differential Revisions'), ManiphestTaskHasMockEdgeType::EDGECONST diff --git a/src/applications/maniphest/edge/ManiphestTaskDependedOnByTaskEdgeType.php b/src/applications/maniphest/edge/ManiphestTaskDependedOnByTaskEdgeType.php index a16f1ac530..1688eddace 100644 --- a/src/applications/maniphest/edge/ManiphestTaskDependedOnByTaskEdgeType.php +++ b/src/applications/maniphest/edge/ManiphestTaskDependedOnByTaskEdgeType.php @@ -17,7 +17,7 @@ final class ManiphestTaskDependedOnByTaskEdgeType extends PhabricatorEdgeType { $add_edges) { return pht( - '%s added %s blocked task(s): %s.', + '%s added %s parent task(s): %s.', $actor, $add_count, $add_edges); @@ -29,7 +29,7 @@ final class ManiphestTaskDependedOnByTaskEdgeType extends PhabricatorEdgeType { $rem_edges) { return pht( - '%s removed %s blocked task(s): %s.', + '%s removed %s parent task(s): %s.', $actor, $rem_count, $rem_edges); @@ -44,7 +44,7 @@ final class ManiphestTaskDependedOnByTaskEdgeType extends PhabricatorEdgeType { $rem_edges) { return pht( - '%s edited blocked task(s), added %s: %s; removed %s: %s.', + '%s edited parent task(s), added %s: %s; removed %s: %s.', $actor, $add_count, $add_edges, @@ -59,7 +59,7 @@ final class ManiphestTaskDependedOnByTaskEdgeType extends PhabricatorEdgeType { $add_edges) { return pht( - '%s added %s blocked task(s) for %s: %s.', + '%s added %s parent task(s) for %s: %s.', $actor, $add_count, $object, @@ -73,7 +73,7 @@ final class ManiphestTaskDependedOnByTaskEdgeType extends PhabricatorEdgeType { $rem_edges) { return pht( - '%s removed %s blocked task(s) for %s: %s.', + '%s removed %s parent task(s) for %s: %s.', $actor, $rem_count, $object, @@ -90,7 +90,7 @@ final class ManiphestTaskDependedOnByTaskEdgeType extends PhabricatorEdgeType { $rem_edges) { return pht( - '%s edited blocked task(s) for %s, added %s: %s; removed %s: %s.', + '%s edited parent task(s) for %s, added %s: %s; removed %s: %s.', $actor, $object, $add_count, diff --git a/src/applications/maniphest/edge/ManiphestTaskDependsOnTaskEdgeType.php b/src/applications/maniphest/edge/ManiphestTaskDependsOnTaskEdgeType.php index e49e428add..62ef49be90 100644 --- a/src/applications/maniphest/edge/ManiphestTaskDependsOnTaskEdgeType.php +++ b/src/applications/maniphest/edge/ManiphestTaskDependsOnTaskEdgeType.php @@ -22,7 +22,7 @@ final class ManiphestTaskDependsOnTaskEdgeType extends PhabricatorEdgeType { $add_edges) { return pht( - '%s added %s blocking task(s): %s.', + '%s added %s subtask(s): %s.', $actor, $add_count, $add_edges); @@ -34,7 +34,7 @@ final class ManiphestTaskDependsOnTaskEdgeType extends PhabricatorEdgeType { $rem_edges) { return pht( - '%s removed %s blocking task(s): %s.', + '%s removed %s subtask(s): %s.', $actor, $rem_count, $rem_edges); @@ -49,7 +49,7 @@ final class ManiphestTaskDependsOnTaskEdgeType extends PhabricatorEdgeType { $rem_edges) { return pht( - '%s edited blocking task(s), added %s: %s; removed %s: %s.', + '%s edited subtask(s), added %s: %s; removed %s: %s.', $actor, $add_count, $add_edges, @@ -64,7 +64,7 @@ final class ManiphestTaskDependsOnTaskEdgeType extends PhabricatorEdgeType { $add_edges) { return pht( - '%s added %s blocking task(s) for %s: %s.', + '%s added %s subtask(s) for %s: %s.', $actor, $add_count, $object, @@ -78,7 +78,7 @@ final class ManiphestTaskDependsOnTaskEdgeType extends PhabricatorEdgeType { $rem_edges) { return pht( - '%s removed %s blocking task(s) for %s: %s.', + '%s removed %s subtask(s) for %s: %s.', $actor, $rem_count, $object, @@ -95,7 +95,7 @@ final class ManiphestTaskDependsOnTaskEdgeType extends PhabricatorEdgeType { $rem_edges) { return pht( - '%s edited blocking task(s) for %s, added %s: %s; removed %s: %s.', + '%s edited subtask(s) for %s, added %s: %s; removed %s: %s.', $actor, $object, $add_count, diff --git a/src/applications/maniphest/editor/ManiphestTransactionEditor.php b/src/applications/maniphest/editor/ManiphestTransactionEditor.php index da0d12db1c..0a4ea8469a 100644 --- a/src/applications/maniphest/editor/ManiphestTransactionEditor.php +++ b/src/applications/maniphest/editor/ManiphestTransactionEditor.php @@ -325,7 +325,7 @@ final class ManiphestTransactionEditor ManiphestTransaction::MAILTAG_PROJECTS => pht("A task's associated projects change."), ManiphestTransaction::MAILTAG_UNBLOCK => - pht('One of the tasks a task is blocked by changes status.'), + pht("One of a task's subtasks changes status."), ManiphestTransaction::MAILTAG_COLUMN => pht('A task is moved between columns on a workboard.'), ManiphestTransaction::MAILTAG_COMMENT => diff --git a/src/applications/maniphest/relationship/ManiphestTaskHasCommitRelationship.php b/src/applications/maniphest/relationship/ManiphestTaskHasCommitRelationship.php new file mode 100644 index 0000000000..4fb35e46c9 --- /dev/null +++ b/src/applications/maniphest/relationship/ManiphestTaskHasCommitRelationship.php @@ -0,0 +1,43 @@ +getViewer(); + + $has_app = PhabricatorApplication::isClassInstalledForViewer( + 'PhabricatorManiphestApplication', + $viewer); + if (!$has_app) { + return false; + } + + return ($object instanceof ManiphestTask); + } + +} diff --git a/src/applications/maniphest/storage/ManiphestTransaction.php b/src/applications/maniphest/storage/ManiphestTransaction.php index 1caae54d47..89e416b174 100644 --- a/src/applications/maniphest/storage/ManiphestTransaction.php +++ b/src/applications/maniphest/storage/ManiphestTransaction.php @@ -500,24 +500,24 @@ final class ManiphestTransaction if ($this->getMetadataValue('blocker.new')) { return pht( - '%s created blocking task %s.', + '%s created subtask %s.', $this->renderHandleLink($author_phid), $this->renderHandleLink($blocker_phid)); } else if ($old_closed && !$new_closed) { return pht( - '%s reopened blocking task %s as "%s".', + '%s reopened subtask %s as "%s".', $this->renderHandleLink($author_phid), $this->renderHandleLink($blocker_phid), $new_name); } else if (!$old_closed && $new_closed) { return pht( - '%s closed blocking task %s as "%s".', + '%s closed subtask %s as "%s".', $this->renderHandleLink($author_phid), $this->renderHandleLink($blocker_phid), $new_name); } else { return pht( - '%s changed the status of blocking task %s from "%s" to "%s".', + '%s changed the status of subtask %s from "%s" to "%s".', $this->renderHandleLink($author_phid), $this->renderHandleLink($blocker_phid), $old_name, @@ -753,21 +753,21 @@ final class ManiphestTransaction if ($old_closed && !$new_closed) { return pht( - '%s reopened %s, a task blocking %s, as "%s".', + '%s reopened %s, a subtask of %s, as "%s".', $this->renderHandleLink($author_phid), $this->renderHandleLink($blocker_phid), $this->renderHandleLink($object_phid), $new_name); } else if (!$old_closed && $new_closed) { return pht( - '%s closed %s, a task blocking %s, as "%s".', + '%s closed %s, a subtask of %s, as "%s".', $this->renderHandleLink($author_phid), $this->renderHandleLink($blocker_phid), $this->renderHandleLink($object_phid), $new_name); } else { return pht( - '%s changed the status of %s, a task blocking %s, '. + '%s changed the status of %s, a subtasktask of %s, '. 'from "%s" to "%s".', $this->renderHandleLink($author_phid), $this->renderHandleLink($blocker_phid), diff --git a/src/applications/maniphest/typeahead/ManiphestTaskClosedStatusDatasource.php b/src/applications/maniphest/typeahead/ManiphestTaskClosedStatusDatasource.php index b8ca35cbfb..68fb521980 100644 --- a/src/applications/maniphest/typeahead/ManiphestTaskClosedStatusDatasource.php +++ b/src/applications/maniphest/typeahead/ManiphestTaskClosedStatusDatasource.php @@ -67,7 +67,8 @@ final class ManiphestTaskClosedStatusDatasource ->setName($name.' closed') ->setDisplayName($name) ->setPHID(self::FUNCTION_TOKEN) - ->setUnique(true); + ->setUnique(true) + ->addAttribute(pht('Select any closed status.')); } } diff --git a/src/applications/maniphest/typeahead/ManiphestTaskOpenStatusDatasource.php b/src/applications/maniphest/typeahead/ManiphestTaskOpenStatusDatasource.php index ffc2801bc6..85a201fdba 100644 --- a/src/applications/maniphest/typeahead/ManiphestTaskOpenStatusDatasource.php +++ b/src/applications/maniphest/typeahead/ManiphestTaskOpenStatusDatasource.php @@ -67,7 +67,8 @@ final class ManiphestTaskOpenStatusDatasource ->setName($name.' open') ->setDisplayName($name) ->setPHID(self::FUNCTION_TOKEN) - ->setUnique(true); + ->setUnique(true) + ->addAttribute(pht('Select any open status.')); } } diff --git a/src/applications/maniphest/typeahead/ManiphestTaskPriorityDatasource.php b/src/applications/maniphest/typeahead/ManiphestTaskPriorityDatasource.php index 217267b8cb..c4530f9bb3 100644 --- a/src/applications/maniphest/typeahead/ManiphestTaskPriorityDatasource.php +++ b/src/applications/maniphest/typeahead/ManiphestTaskPriorityDatasource.php @@ -32,7 +32,8 @@ final class ManiphestTaskPriorityDatasource $result = id(new PhabricatorTypeaheadResult()) ->setIcon(ManiphestTaskPriority::getTaskPriorityIcon($value)) ->setPHID($value) - ->setName($name); + ->setName($name) + ->addAttribute(pht('Priority')); if (ManiphestTaskPriority::isDisabledPriority($value)) { $result->setClosed(pht('Disabled')); diff --git a/src/applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php b/src/applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php index fe59c974e6..9d73ca994f 100644 --- a/src/applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php +++ b/src/applications/maniphest/typeahead/ManiphestTaskStatusDatasource.php @@ -35,6 +35,12 @@ final class ManiphestTaskStatusDatasource ->setPHID($value) ->setName($name); + if (ManiphestTaskStatus::isOpenStatus($value)) { + $result->addAttribute(pht('Open Status')); + } else { + $result->addAttribute(pht('Closed Status')); + } + if (ManiphestTaskStatus::isDisabledStatus($value)) { $result->setClosed(pht('Disabled')); } diff --git a/src/applications/people/storage/PhabricatorUser.php b/src/applications/people/storage/PhabricatorUser.php index 5e8cb77a72..81a5126474 100644 --- a/src/applications/people/storage/PhabricatorUser.php +++ b/src/applications/people/storage/PhabricatorUser.php @@ -94,6 +94,10 @@ final class PhabricatorUser * @return bool True if this is a standard, usable account. */ public function isUserActivated() { + if (!$this->isLoggedIn()) { + return false; + } + if ($this->isOmnipotent()) { return true; } diff --git a/src/applications/people/typeahead/PhabricatorPeopleAnyOwnerDatasource.php b/src/applications/people/typeahead/PhabricatorPeopleAnyOwnerDatasource.php index 803ecc59d2..2a2a451a49 100644 --- a/src/applications/people/typeahead/PhabricatorPeopleAnyOwnerDatasource.php +++ b/src/applications/people/typeahead/PhabricatorPeopleAnyOwnerDatasource.php @@ -62,7 +62,8 @@ final class PhabricatorPeopleAnyOwnerDatasource ->setDisplayName($name) ->setIcon('fa-certificate') ->setPHID(self::FUNCTION_TOKEN) - ->setUnique(true); + ->setUnique(true) + ->addAttribute(pht('Select results with any owner.')); } } diff --git a/src/applications/people/typeahead/PhabricatorPeopleDatasource.php b/src/applications/people/typeahead/PhabricatorPeopleDatasource.php index 2cd337cacc..494b68dbfb 100644 --- a/src/applications/people/typeahead/PhabricatorPeopleDatasource.php +++ b/src/applications/people/typeahead/PhabricatorPeopleDatasource.php @@ -3,18 +3,6 @@ final class PhabricatorPeopleDatasource extends PhabricatorTypeaheadDatasource { - private $enrichResults; - - /** - * Controls enriched rendering, for global search. This is a bit hacky and - * should probably be handled in a more general way, but is fairly reasonable - * for now. - */ - public function setEnrichResults($enrich) { - $this->enrichResults = $enrich; - return $this; - } - public function getBrowseTitle() { return pht('Browse Users'); } @@ -40,7 +28,9 @@ final class PhabricatorPeopleDatasource $users = $this->executeQuery($query); - if ($this->enrichResults && $users) { + $is_browse = $this->getIsBrowse(); + + if ($is_browse && $users) { $phids = mpull($users, 'getPHID'); $handles = id(new PhabricatorHandleQuery()) ->setViewer($viewer) @@ -50,6 +40,8 @@ final class PhabricatorPeopleDatasource $results = array(); foreach ($users as $user) { + $phid = $user->getPHID(); + $closed = null; if ($user->getIsDisabled()) { $closed = pht('Disabled'); @@ -64,7 +56,7 @@ final class PhabricatorPeopleDatasource $result = id(new PhabricatorTypeaheadResult()) ->setName($user->getFullName()) ->setURI('/p/'.$username.'/') - ->setPHID($user->getPHID()) + ->setPHID($phid) ->setPriorityString($username) ->setPriorityType('user') ->setAutocomplete('@'.$username) @@ -74,13 +66,29 @@ final class PhabricatorPeopleDatasource $result->setIcon('fa-envelope-o'); } - if ($this->enrichResults) { - $display_type = pht('User'); + if ($is_browse) { + $handle = $handles[$phid]; + + $result + ->setIcon($handle->getIcon()) + ->setImageURI($handle->getImageURI()) + ->addAttribute($handle->getSubtitle()); + + if ($user->getIsAdmin()) { + $result->addAttribute( + array( + id(new PHUIIconView())->setIcon('fa-star'), + ' ', + pht('Administrator'), + )); + } + if ($user->getIsAdmin()) { $display_type = pht('Administrator'); + } else { + $display_type = pht('User'); } $result->setDisplayType($display_type); - $result->setImageURI($handles[$user->getPHID()]->getImageURI()); } $results[] = $result; diff --git a/src/applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php b/src/applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php index 35f62e31dc..fb3a6226d9 100644 --- a/src/applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php +++ b/src/applications/people/typeahead/PhabricatorPeopleNoOwnerDatasource.php @@ -69,7 +69,8 @@ final class PhabricatorPeopleNoOwnerDatasource ->setDisplayName($name) ->setIcon('fa-ban') ->setPHID('none()') - ->setUnique(true); + ->setUnique(true) + ->addAttribute(pht('Select results with no owner.')); } } diff --git a/src/applications/people/typeahead/PhabricatorViewerDatasource.php b/src/applications/people/typeahead/PhabricatorViewerDatasource.php index 1c9276ae8d..e29fd4586b 100644 --- a/src/applications/people/typeahead/PhabricatorViewerDatasource.php +++ b/src/applications/people/typeahead/PhabricatorViewerDatasource.php @@ -74,7 +74,8 @@ final class PhabricatorViewerDatasource ->setName(pht('Current Viewer')) ->setPHID('viewer()') ->setIcon('fa-user') - ->setUnique(true); + ->setUnique(true) + ->addAttribute(pht('Select current viewer.')); } } diff --git a/src/applications/phame/controller/PhameLiveController.php b/src/applications/phame/controller/PhameLiveController.php index 3fd9f64600..ba2b65d9f8 100644 --- a/src/applications/phame/controller/PhameLiveController.php +++ b/src/applications/phame/controller/PhameLiveController.php @@ -159,6 +159,12 @@ abstract class PhameLiveController extends PhameController { // "Blogs" crumb into the crumbs list. if ($is_external) { $crumbs = new PHUICrumbsView(); + // Link back to parent site + if ($blog->getParentSite() && $blog->getParentDomain()) { + $crumbs->addTextCrumb( + $blog->getParentSite(), + $blog->getExternalParentURI()); + } } else { $crumbs = parent::buildApplicationCrumbs(); $crumbs->addTextCrumb( diff --git a/src/applications/phame/controller/blog/PhameBlogManageController.php b/src/applications/phame/controller/blog/PhameBlogManageController.php index bcd9c9456b..4085d3ef6b 100644 --- a/src/applications/phame/controller/blog/PhameBlogManageController.php +++ b/src/applications/phame/controller/blog/PhameBlogManageController.php @@ -95,15 +95,27 @@ final class PhameBlogManageController extends PhameBlogController { Javelin::initBehavior('phabricator-tooltips'); $properties = id(new PHUIPropertyListView()) - ->setUser($viewer) - ->setObject($blog); + ->setUser($viewer); - $domain = $blog->getDomain(); - if (!$domain) { - $domain = phutil_tag('em', array(), pht('No external domain')); + $full_domain = $blog->getDomainFullURI(); + if (!$full_domain) { + $full_domain = phutil_tag('em', array(), pht('No external domain')); + } + $properties->addProperty(pht('Full Domain'), $full_domain); + + $parent_site = $blog->getParentSite(); + if (!$parent_site) { + $parent_site = phutil_tag('em', array(), pht('No parent site')); } - $properties->addProperty(pht('Domain'), $domain); + $properties->addProperty(pht('Parent Site'), $parent_site); + + $parent_domain = $blog->getParentDomain(); + if (!$parent_domain) { + $parent_domain = phutil_tag('em', array(), pht('No parent domain')); + } + + $properties->addProperty(pht('Parent Domain'), $parent_domain); $feed_uri = PhabricatorEnv::getProductionURI( $this->getApplicationURI('blog/feed/'.$blog->getID().'/')); @@ -133,8 +145,6 @@ final class PhameBlogManageController extends PhameBlogController { ->addObject($blog, PhameBlog::MARKUP_FIELD_DESCRIPTION) ->process(); - $properties->invokeWillRenderEvent(); - $description = $blog->getDescription(); if (strlen($description)) { $description = new PHUIRemarkupView($viewer, $description); @@ -150,7 +160,7 @@ final class PhameBlogManageController extends PhameBlogController { private function buildCurtain(PhameBlog $blog) { $viewer = $this->getViewer(); - $curtain = $this->newCurtainView($viewer); + $curtain = $this->newCurtainView($blog); $actions = id(new PhabricatorActionListView()) ->setObject($blog) diff --git a/src/applications/phame/editor/PhameBlogEditEngine.php b/src/applications/phame/editor/PhameBlogEditEngine.php index 9cc7217147..5f96309e8b 100644 --- a/src/applications/phame/editor/PhameBlogEditEngine.php +++ b/src/applications/phame/editor/PhameBlogEditEngine.php @@ -94,13 +94,29 @@ final class PhameBlogEditEngine ->setTransactionType(PhameBlogTransaction::TYPE_DESCRIPTION) ->setValue($object->getDescription()), id(new PhabricatorTextEditField()) - ->setKey('domain') - ->setLabel(pht('Custom Domain')) - ->setDescription(pht('Blog domain name.')) - ->setConduitDescription(pht('Change the blog domain.')) - ->setConduitTypeDescription(pht('New blog domain.')) - ->setValue($object->getDomain()) - ->setTransactionType(PhameBlogTransaction::TYPE_DOMAIN), + ->setKey('domainFullURI') + ->setLabel(pht('Full Domain URI')) + ->setDescription(pht('Blog full domain URI.')) + ->setConduitDescription(pht('Change the blog full domain URI.')) + ->setConduitTypeDescription(pht('New blog full domain URI.')) + ->setValue($object->getDomainFullURI()) + ->setTransactionType(PhameBlogTransaction::TYPE_FULLDOMAIN), + id(new PhabricatorTextEditField()) + ->setKey('parentSite') + ->setLabel(pht('Parent Site')) + ->setDescription(pht('Blog parent site name.')) + ->setConduitDescription(pht('Change the blog parent site name.')) + ->setConduitTypeDescription(pht('New blog parent site name.')) + ->setValue($object->getParentSite()) + ->setTransactionType(PhameBlogTransaction::TYPE_PARENTSITE), + id(new PhabricatorTextEditField()) + ->setKey('parentDomain') + ->setLabel(pht('Parent Domain')) + ->setDescription(pht('Blog parent domain name.')) + ->setConduitDescription(pht('Change the blog parent domain.')) + ->setConduitTypeDescription(pht('New blog parent domain.')) + ->setValue($object->getParentDomain()) + ->setTransactionType(PhameBlogTransaction::TYPE_PARENTDOMAIN), id(new PhabricatorSelectEditField()) ->setKey('status') ->setLabel(pht('Status')) diff --git a/src/applications/phame/editor/PhameBlogEditor.php b/src/applications/phame/editor/PhameBlogEditor.php index ec0cbe9e06..197387985b 100644 --- a/src/applications/phame/editor/PhameBlogEditor.php +++ b/src/applications/phame/editor/PhameBlogEditor.php @@ -17,7 +17,9 @@ final class PhameBlogEditor $types[] = PhameBlogTransaction::TYPE_NAME; $types[] = PhameBlogTransaction::TYPE_SUBTITLE; $types[] = PhameBlogTransaction::TYPE_DESCRIPTION; - $types[] = PhameBlogTransaction::TYPE_DOMAIN; + $types[] = PhameBlogTransaction::TYPE_FULLDOMAIN; + $types[] = PhameBlogTransaction::TYPE_PARENTSITE; + $types[] = PhameBlogTransaction::TYPE_PARENTDOMAIN; $types[] = PhameBlogTransaction::TYPE_STATUS; $types[] = PhabricatorTransactions::TYPE_VIEW_POLICY; $types[] = PhabricatorTransactions::TYPE_EDIT_POLICY; @@ -36,8 +38,12 @@ final class PhameBlogEditor return $object->getSubtitle(); case PhameBlogTransaction::TYPE_DESCRIPTION: return $object->getDescription(); - case PhameBlogTransaction::TYPE_DOMAIN: - return $object->getDomain(); + case PhameBlogTransaction::TYPE_FULLDOMAIN: + return $object->getDomainFullURI(); + case PhameBlogTransaction::TYPE_PARENTSITE: + return $object->getParentSite(); + case PhameBlogTransaction::TYPE_PARENTDOMAIN: + return $object->getParentDomain(); case PhameBlogTransaction::TYPE_STATUS: return $object->getStatus(); } @@ -52,8 +58,10 @@ final class PhameBlogEditor case PhameBlogTransaction::TYPE_SUBTITLE: case PhameBlogTransaction::TYPE_DESCRIPTION: case PhameBlogTransaction::TYPE_STATUS: + case PhameBlogTransaction::TYPE_PARENTSITE: + case PhameBlogTransaction::TYPE_PARENTDOMAIN: return $xaction->getNewValue(); - case PhameBlogTransaction::TYPE_DOMAIN: + case PhameBlogTransaction::TYPE_FULLDOMAIN: $domain = $xaction->getNewValue(); if (!strlen($xaction->getNewValue())) { return null; @@ -73,10 +81,23 @@ final class PhameBlogEditor return $object->setSubtitle($xaction->getNewValue()); case PhameBlogTransaction::TYPE_DESCRIPTION: return $object->setDescription($xaction->getNewValue()); - case PhameBlogTransaction::TYPE_DOMAIN: - return $object->setDomain($xaction->getNewValue()); + case PhameBlogTransaction::TYPE_FULLDOMAIN: + $new_value = $xaction->getNewValue(); + if (strlen($new_value)) { + $uri = new PhutilURI($new_value); + $domain = $uri->getDomain(); + $object->setDomain($domain); + } else { + $object->setDomain(null); + } + $object->setDomainFullURI($new_value); + return; case PhameBlogTransaction::TYPE_STATUS: return $object->setStatus($xaction->getNewValue()); + case PhameBlogTransaction::TYPE_PARENTSITE: + return $object->setParentSite($xaction->getNewValue()); + case PhameBlogTransaction::TYPE_PARENTDOMAIN: + return $object->setParentDomain($xaction->getNewValue()); } return parent::applyCustomInternalTransaction($object, $xaction); @@ -90,7 +111,9 @@ final class PhameBlogEditor case PhameBlogTransaction::TYPE_NAME: case PhameBlogTransaction::TYPE_SUBTITLE: case PhameBlogTransaction::TYPE_DESCRIPTION: - case PhameBlogTransaction::TYPE_DOMAIN: + case PhameBlogTransaction::TYPE_FULLDOMAIN: + case PhameBlogTransaction::TYPE_PARENTSITE: + case PhameBlogTransaction::TYPE_PARENTDOMAIN: case PhameBlogTransaction::TYPE_STATUS: return; } @@ -123,7 +146,26 @@ final class PhameBlogEditor $errors[] = $error; } break; - case PhameBlogTransaction::TYPE_DOMAIN: + case PhameBlogTransaction::TYPE_PARENTDOMAIN: + if (!$xactions) { + continue; + } + $parent_domain = last($xactions)->getNewValue(); + if (empty($parent_domain)) { + continue; + } + try { + PhabricatorEnv::requireValidRemoteURIForLink($parent_domain); + } catch (Exception $ex) { + $error = new PhabricatorApplicationTransactionValidationError( + $type, + pht('Invalid URI'), + pht('Parent Domain must be set to a valid Remote URI.'), + nonempty(last($xactions), null)); + $errors[] = $error; + } + break; + case PhameBlogTransaction::TYPE_FULLDOMAIN: if (!$xactions) { continue; } @@ -152,9 +194,11 @@ final class PhameBlogEditor nonempty(last($xactions), null)); $errors[] = $error; } + $domain = new PhutilURI($custom_domain); + $domain = $domain->getDomain(); $duplicate_blog = id(new PhameBlogQuery()) ->setViewer(PhabricatorUser::getOmnipotentUser()) - ->withDomain($custom_domain) + ->withDomain($domain) ->executeOne(); if ($duplicate_blog && $duplicate_blog->getID() != $object->getID()) { $error = new PhabricatorApplicationTransactionValidationError( diff --git a/src/applications/phame/site/PhameBlogSite.php b/src/applications/phame/site/PhameBlogSite.php index 67ecdb0465..6a5eebaf31 100644 --- a/src/applications/phame/site/PhameBlogSite.php +++ b/src/applications/phame/site/PhameBlogSite.php @@ -39,6 +39,7 @@ final class PhameBlogSite extends PhameSite { ->setViewer(new PhabricatorUser()) ->withDomain($host) ->needProfileImage(true) + ->needHeaderImage(true) ->withStatuses( array( PhameBlog::STATUS_ACTIVE, diff --git a/src/applications/phame/storage/PhameBlog.php b/src/applications/phame/storage/PhameBlog.php index b956eaa1c6..6d9c51071a 100644 --- a/src/applications/phame/storage/PhameBlog.php +++ b/src/applications/phame/storage/PhameBlog.php @@ -18,6 +18,9 @@ final class PhameBlog extends PhameDAO protected $subtitle; protected $description; protected $domain; + protected $domainFullURI; + protected $parentSite; + protected $parentDomain; protected $configData; protected $creatorPHID; protected $viewPolicy; @@ -44,6 +47,9 @@ final class PhameBlog extends PhameDAO 'subtitle' => 'text64', 'description' => 'text', 'domain' => 'text128?', + 'domainFullURI' => 'text128?', + 'parentSite' => 'text128', + 'parentDomain' => 'text128', 'status' => 'text32', 'mailKey' => 'bytes20', 'profileImagePHID' => 'phid?', @@ -108,34 +114,29 @@ final class PhameBlog extends PhameDAO * * @return string */ - public function validateCustomDomain($custom_domain) { - $example_domain = 'blog.example.com'; + public function validateCustomDomain($domain_full_uri) { + $example_domain = 'http://blog.example.com/'; $label = pht('Invalid'); // note this "uri" should be pretty busted given the desired input // so just use it to test if there's a protocol specified - $uri = new PhutilURI($custom_domain); - if ($uri->getProtocol()) { + $uri = new PhutilURI($domain_full_uri); + $domain = $uri->getDomain(); + $protocol = $uri->getProtocol(); + $path = $uri->getPath(); + $supported_protocols = array('http', 'https'); + + if (!in_array($protocol, $supported_protocols)) { return array( $label, pht( - 'The custom domain should not include a protocol. Just provide '. - 'the bare domain name (for example, "%s").', + 'The custom domain should include a valid protocol in the URI '. + '(for example, "%s"). Valid protocols are "http" or "https".', $example_domain), - ); + ); } - if ($uri->getPort()) { - return array( - $label, - pht( - 'The custom domain should not include a port number. Just provide '. - 'the bare domain name (for example, "%s").', - $example_domain), - ); - } - - if (strpos($custom_domain, '/') !== false) { + if (strlen($path) && $path != '/') { return array( $label, pht( @@ -146,7 +147,7 @@ final class PhameBlog extends PhameDAO ); } - if (strpos($custom_domain, '.') === false) { + if (strpos($domain, '.') === false) { return array( $label, pht( @@ -187,8 +188,14 @@ final class PhameBlog extends PhameDAO } public function getExternalLiveURI() { - $domain = $this->getDomain(); - $uri = new PhutilURI('http://'.$this->getDomain().'/'); + $uri = new PhutilURI($this->getDomainFullURI()); + PhabricatorEnv::requireValidRemoteURIForLink($uri); + return (string)$uri; + } + + public function getExternalParentURI() { + $uri = $this->getParentDomain(); + PhabricatorEnv::requireValidRemoteURIForLink($uri); return (string)$uri; } diff --git a/src/applications/phame/storage/PhameBlogTransaction.php b/src/applications/phame/storage/PhameBlogTransaction.php index 8d71fa0ee9..2d74ca5cc6 100644 --- a/src/applications/phame/storage/PhameBlogTransaction.php +++ b/src/applications/phame/storage/PhameBlogTransaction.php @@ -6,8 +6,10 @@ final class PhameBlogTransaction const TYPE_NAME = 'phame.blog.name'; const TYPE_SUBTITLE = 'phame.blog.subtitle'; const TYPE_DESCRIPTION = 'phame.blog.description'; - const TYPE_DOMAIN = 'phame.blog.domain'; + const TYPE_FULLDOMAIN = 'phame.blog.full.domain'; const TYPE_STATUS = 'phame.blog.status'; + const TYPE_PARENTSITE = 'phame.blog.parent.site'; + const TYPE_PARENTDOMAIN = 'phame.blog.parent.domain'; const MAILTAG_DETAILS = 'phame-blog-details'; const MAILTAG_SUBSCRIBERS = 'phame-blog-subscribers'; @@ -44,7 +46,7 @@ final class PhameBlogTransaction } break; case self::TYPE_DESCRIPTION: - case self::TYPE_DOMAIN: + case self::TYPE_FULLDOMAIN: return 'fa-pencil'; case self::TYPE_STATUS: if ($new == PhameBlog::STATUS_ARCHIVED) { @@ -65,7 +67,7 @@ final class PhameBlogTransaction switch ($this->getTransactionType()) { case self::TYPE_STATUS: if ($new == PhameBlog::STATUS_ARCHIVED) { - return 'red'; + return 'violet'; } else { return 'green'; } @@ -83,7 +85,9 @@ final class PhameBlogTransaction case self::TYPE_NAME: case self::TYPE_SUBTITLE: case self::TYPE_DESCRIPTION: - case self::TYPE_DOMAIN: + case self::TYPE_FULLDOMAIN: + case self::TYPE_PARENTSITE: + case self::TYPE_PARENTDOMAIN: $tags[] = self::MAILTAG_DETAILS; break; default: @@ -136,12 +140,38 @@ final class PhameBlogTransaction '%s updated the blog\'s description.', $this->renderHandleLink($author_phid)); break; - case self::TYPE_DOMAIN: + case self::TYPE_FULLDOMAIN: return pht( - '%s updated the blog\'s domain to "%s".', + '%s updated the blog\'s full domain to "%s".', $this->renderHandleLink($author_phid), $new); break; + case self::TYPE_PARENTSITE: + if ($old === null) { + return pht( + '%s set this blog\'s parent site to "%s".', + $this->renderHandleLink($author_phid), + $new); + } else { + return pht( + '%s updated the blog\'s parent site to "%s".', + $this->renderHandleLink($author_phid), + $new); + } + break; + case self::TYPE_PARENTDOMAIN: + if ($old === null) { + return pht( + '%s set this blog\'s parent domain to "%s".', + $this->renderHandleLink($author_phid), + $new); + } else { + return pht( + '%s updated the blog\'s parent domain to "%s".', + $this->renderHandleLink($author_phid), + $new); + } + break; case self::TYPE_STATUS: switch ($new) { case PhameBlog::STATUS_ACTIVE: @@ -200,9 +230,21 @@ final class PhameBlogTransaction $this->renderHandleLink($author_phid), $this->renderHandleLink($object_phid)); break; - case self::TYPE_DOMAIN: + case self::TYPE_FULLDOMAIN: return pht( - '%s updated the domain for %s.', + '%s updated the full domain for %s.', + $this->renderHandleLink($author_phid), + $this->renderHandleLink($object_phid)); + break; + case self::TYPE_PARENTSITE: + return pht( + '%s updated the parent site for %s.', + $this->renderHandleLink($author_phid), + $this->renderHandleLink($object_phid)); + break; + case self::TYPE_PARENTDOMAIN: + return pht( + '%s updated the parent domain for %s.', $this->renderHandleLink($author_phid), $this->renderHandleLink($object_phid)); break; diff --git a/src/applications/pholio/application/PhabricatorPholioApplication.php b/src/applications/pholio/application/PhabricatorPholioApplication.php index e7c841b68a..4d80dd12ae 100644 --- a/src/applications/pholio/application/PhabricatorPholioApplication.php +++ b/src/applications/pholio/application/PhabricatorPholioApplication.php @@ -26,12 +26,6 @@ final class PhabricatorPholioApplication extends PhabricatorApplication { return pht('Things before they were cool.'); } - public function getEventListeners() { - return array( - new PholioActionMenuEventListener(), - ); - } - public function getRemarkupRules() { return array( new PholioRemarkupRule(), diff --git a/src/applications/pholio/event/PholioActionMenuEventListener.php b/src/applications/pholio/event/PholioActionMenuEventListener.php deleted file mode 100644 index cfa6e39c32..0000000000 --- a/src/applications/pholio/event/PholioActionMenuEventListener.php +++ /dev/null @@ -1,51 +0,0 @@ -listen(PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS); - } - - public function handleEvent(PhutilEvent $event) { - switch ($event->getType()) { - case PhabricatorEventType::TYPE_UI_DIDRENDERACTIONS: - $this->handleActionsEvent($event); - break; - } - } - - private function handleActionsEvent(PhutilEvent $event) { - $object = $event->getValue('object'); - - $actions = null; - if ($object instanceof ManiphestTask) { - $actions = $this->renderTaskItems($event); - } - - $this->addActionMenuItems($event, $actions); - } - - private function renderTaskItems(PhutilEvent $event) { - if (!$this->canUseApplication($event->getUser())) { - return; - } - - $task = $event->getValue('object'); - $phid = $task->getPHID(); - - $can_edit = PhabricatorPolicyFilter::hasCapability( - $event->getUser(), - $task, - PhabricatorPolicyCapability::CAN_EDIT); - - return id(new PhabricatorActionView()) - ->setName(pht('Edit Pholio Mocks')) - ->setHref("/search/attach/{$phid}/MOCK/edge/") - ->setWorkflow(true) - ->setIcon('fa-camera-retro') - ->setDisabled(!$can_edit) - ->setWorkflow(true); - } - -} diff --git a/src/applications/project/typeahead/PhabricatorProjectDatasource.php b/src/applications/project/typeahead/PhabricatorProjectDatasource.php index e0b277c2ad..03c2424f4a 100644 --- a/src/applications/project/typeahead/PhabricatorProjectDatasource.php +++ b/src/applications/project/typeahead/PhabricatorProjectDatasource.php @@ -55,9 +55,25 @@ final class PhabricatorProjectDatasource $has_cols = array_fill_keys(array_keys($projs), true); } + $is_browse = $this->getIsBrowse(); + if ($is_browse && $projs) { + // TODO: This is a little ad-hoc, but we don't currently have + // infrastructure for bulk querying custom fields efficiently. + $table = new PhabricatorProjectCustomFieldStorage(); + $descriptions = $table->loadAllWhere( + 'objectPHID IN (%Ls) AND fieldIndex = %s', + array_keys($projs), + PhabricatorHash::digestForIndex('std:project:internal:description')); + $descriptions = mpull($descriptions, 'getFieldValue', 'getObjectPHID'); + } else { + $descriptions = array(); + } + $results = array(); foreach ($projs as $proj) { - if (!isset($has_cols[$proj->getPHID()])) { + $phid = $proj->getPHID(); + + if (!isset($has_cols[$phid])) { continue; } @@ -99,7 +115,7 @@ final class PhabricatorProjectDatasource ->setDisplayName($proj->getDisplayName()) ->setDisplayType($proj->getDisplayIconName()) ->setURI($proj->getURI()) - ->setPHID($proj->getPHID()) + ->setPHID($phid) ->setIcon($proj->getDisplayIconIcon()) ->setColor($proj->getColor()) ->setPriorityType('proj') @@ -111,6 +127,16 @@ final class PhabricatorProjectDatasource $proj_result->setImageURI($proj->getProfileImageURI()); + if ($is_browse) { + $proj_result->addAttribute($proj->getDisplayIconName()); + + $description = idx($descriptions, $phid); + if (strlen($description)) { + $summary = PhabricatorMarkupEngine::summarize($description); + $proj_result->addAttribute($summary); + } + } + $results[] = $proj_result; } diff --git a/src/applications/project/typeahead/PhabricatorProjectLogicalOrNotDatasource.php b/src/applications/project/typeahead/PhabricatorProjectLogicalOrNotDatasource.php index b9984efb05..026c7ed2ee 100644 --- a/src/applications/project/typeahead/PhabricatorProjectLogicalOrNotDatasource.php +++ b/src/applications/project/typeahead/PhabricatorProjectLogicalOrNotDatasource.php @@ -86,20 +86,24 @@ final class PhabricatorProjectLogicalOrNotDatasource $result ->setTokenType(PhabricatorTypeaheadTokenView::TYPE_FUNCTION) ->setIcon('fa-asterisk') - ->setColor(null); + ->setColor(null) + ->resetAttributes() + ->addAttribute(pht('Function')); if ($return_any) { $return[] = id(clone $result) ->setPHID('any('.$result->getPHID().')') ->setDisplayName(pht('In Any: %s', $result->getDisplayName())) - ->setName('any '.$result->getName()); + ->setName('any '.$result->getName()) + ->addAttribute(pht('Include results tagged with this project.')); } if ($return_not) { $return[] = id(clone $result) ->setPHID('not('.$result->getPHID().')') ->setDisplayName(pht('Not In: %s', $result->getDisplayName())) - ->setName('not '.$result->getName()); + ->setName('not '.$result->getName()) + ->addAttribute(pht('Exclude results tagged with this project.')); } } diff --git a/src/applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php b/src/applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php index 1c472dc474..9bb15ed180 100644 --- a/src/applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php +++ b/src/applications/project/typeahead/PhabricatorProjectLogicalViewerDatasource.php @@ -96,7 +96,8 @@ final class PhabricatorProjectLogicalViewerDatasource ->setName(pht('Current Viewer\'s Projects')) ->setPHID('viewerprojects()') ->setIcon('fa-asterisk') - ->setUnique(true); + ->setUnique(true) + ->addAttribute(pht('Select projects current viewer is a member of.')); } } diff --git a/src/applications/project/typeahead/PhabricatorProjectMembersDatasource.php b/src/applications/project/typeahead/PhabricatorProjectMembersDatasource.php index 0b4a33f7a2..524ced454d 100644 --- a/src/applications/project/typeahead/PhabricatorProjectMembersDatasource.php +++ b/src/applications/project/typeahead/PhabricatorProjectMembersDatasource.php @@ -44,7 +44,10 @@ final class PhabricatorProjectMembersDatasource ->setColor(null) ->setPHID('members('.$result->getPHID().')') ->setDisplayName(pht('Members: %s', $result->getDisplayName())) - ->setName($result->getName().' members'); + ->setName($result->getName().' members') + ->resetAttributes() + ->addAttribute(pht('Function')) + ->addAttribute(pht('Select project members.')); } return $results; diff --git a/src/applications/project/typeahead/PhabricatorProjectNoProjectsDatasource.php b/src/applications/project/typeahead/PhabricatorProjectNoProjectsDatasource.php index d7d22f2417..d3b5e484e9 100644 --- a/src/applications/project/typeahead/PhabricatorProjectNoProjectsDatasource.php +++ b/src/applications/project/typeahead/PhabricatorProjectNoProjectsDatasource.php @@ -68,7 +68,8 @@ final class PhabricatorProjectNoProjectsDatasource ->setPHID('null()') ->setIcon('fa-ban') ->setName('null '.$name) - ->setDisplayName($name); + ->setDisplayName($name) + ->addAttribute(pht('Select results with no tags.')); } } diff --git a/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php b/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php index 7e54bf4620..08fe8ea224 100644 --- a/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php +++ b/src/applications/repository/engine/PhabricatorRepositoryPullEngine.php @@ -191,7 +191,7 @@ final class PhabricatorRepositoryPullEngine )); } - private function installHook($path) { + private function installHook($path, array $hook_argv = array()) { $this->log('%s', pht('Installing commit hook to "%s"...', $path)); $repository = $this->getRepository(); @@ -202,10 +202,11 @@ final class PhabricatorRepositoryPullEngine $full_php_path = Filesystem::resolveBinary('php'); $cmd = csprintf( - 'exec %s -f %s -- %s "$@"', + 'exec %s -f %s -- %s %Ls "$@"', $full_php_path, $bin, - $identifier); + $identifier, + $hook_argv); $hook = "#!/bin/sh\nexport TERM=dumb\n{$cmd}\n"; @@ -585,8 +586,16 @@ final class PhabricatorRepositoryPullEngine $root = $repository->getLocalPath(); $path = '/hooks/pre-commit'; - $this->installHook($root.$path); + + $revprop_path = '/hooks/pre-revprop-change'; + + $revprop_argv = array( + '--hook-mode', + 'svn-revprop', + ); + + $this->installHook($root.$revprop_path, $revprop_argv); } diff --git a/src/applications/repository/storage/PhabricatorRepository.php b/src/applications/repository/storage/PhabricatorRepository.php index d0f3f9f4d8..4a7e3d4681 100644 --- a/src/applications/repository/storage/PhabricatorRepository.php +++ b/src/applications/repository/storage/PhabricatorRepository.php @@ -1623,11 +1623,10 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO return false; } - if ($this->isGit() || $this->isHg()) { - return true; - } + // In Git and Mercurial, ref deletions and rewrites are dangerous. + // In Subversion, editing revprops is dangerous. - return false; + return true; } public function shouldAllowDangerousChanges() { diff --git a/src/applications/search/application/PhabricatorSearchApplication.php b/src/applications/search/application/PhabricatorSearchApplication.php index bd3f78359e..36ad59764c 100644 --- a/src/applications/search/application/PhabricatorSearchApplication.php +++ b/src/applications/search/application/PhabricatorSearchApplication.php @@ -41,6 +41,8 @@ final class PhabricatorSearchApplication extends PhabricatorApplication { 'delete/(?P[^/]+)/(?P[^/]+)/' => 'PhabricatorSearchDeleteController', 'order/(?P[^/]+)/' => 'PhabricatorSearchOrderController', + 'rel/(?P[^/]+)/(?P[^/]+)/' + => 'PhabricatorSearchRelationshipController', ), ); } diff --git a/src/applications/search/controller/PhabricatorSearchAttachController.php b/src/applications/search/controller/PhabricatorSearchAttachController.php index 2d00ac8bda..a3238cb50d 100644 --- a/src/applications/search/controller/PhabricatorSearchAttachController.php +++ b/src/applications/search/controller/PhabricatorSearchAttachController.php @@ -18,6 +18,11 @@ final class PhabricatorSearchAttachController $object = id(new PhabricatorObjectQuery()) ->setViewer($user) + ->requireCapabilities( + array( + PhabricatorPolicyCapability::CAN_VIEW, + PhabricatorPolicyCapability::CAN_EDIT, + )) ->withPHIDs(array($phid)) ->executeOne(); diff --git a/src/applications/search/controller/PhabricatorSearchRelationshipController.php b/src/applications/search/controller/PhabricatorSearchRelationshipController.php new file mode 100644 index 0000000000..6af121d1ba --- /dev/null +++ b/src/applications/search/controller/PhabricatorSearchRelationshipController.php @@ -0,0 +1,205 @@ +getViewer(); + + $phid = $request->getURIData('sourcePHID'); + $object = id(new PhabricatorObjectQuery()) + ->setViewer($viewer) + ->withPHIDs(array($phid)) + ->requireCapabilities( + array( + PhabricatorPolicyCapability::CAN_VIEW, + PhabricatorPolicyCapability::CAN_EDIT, + )) + ->executeOne(); + if (!$object) { + return new Aphront404Response(); + } + + $list = PhabricatorObjectRelationshipList::newForObject( + $viewer, + $object); + + $relationship_key = $request->getURIData('relationshipKey'); + $relationship = $list->getRelationship($relationship_key); + if (!$relationship) { + return new Aphront404Response(); + } + + $src_phid = $object->getPHID(); + $edge_type = $relationship->getEdgeConstant(); + + $dst_phids = PhabricatorEdgeQuery::loadDestinationPHIDs( + $src_phid, + $edge_type); + + $all_phids = $dst_phids; + $all_phids[] = $src_phid; + + $handles = $viewer->loadHandles($all_phids); + $src_handle = $handles[$src_phid]; + + $done_uri = $src_handle->getURI(); + $initial_phids = $dst_phids; + + if ($request->isFormPost()) { + $phids = explode(';', $request->getStr('phids')); + $phids = array_filter($phids); + $phids = array_values($phids); + + $initial_phids = $request->getStrList('initialPHIDs'); + + // Apply the changes as adds and removes relative to the original state + // of the object when the dialog was rendered so that two users adding + // relationships at the same time don't race and overwrite one another. + $add_phids = array_diff($phids, $initial_phids); + $rem_phids = array_diff($initial_phids, $phids); + + if ($add_phids) { + $dst_objects = id(new PhabricatorObjectQuery()) + ->setViewer($viewer) + ->withPHIDs($phids) + ->setRaisePolicyExceptions(true) + ->execute(); + $dst_objects = mpull($dst_objects, null, 'getPHID'); + } else { + $dst_objects = array(); + } + + try { + foreach ($add_phids as $add_phid) { + $dst_object = idx($dst_objects, $add_phid); + if (!$dst_object) { + throw new Exception( + pht( + 'You can not create a relationship to object "%s" because '. + 'the object does not exist or could not be loaded.', + $add_phid)); + } + + if (!$relationship->canRelateObjects($object, $dst_object)) { + throw new Exception( + pht( + 'You can not create a relationship (of type "%s") to object '. + '"%s" because it is not the right type of object for this '. + 'relationship.', + $relationship->getRelationshipConstant(), + $add_phid)); + } + } + } catch (Exception $ex) { + return $this->newUnrelatableObjectResponse($ex, $done_uri); + } + + $editor = $object->getApplicationTransactionEditor() + ->setActor($viewer) + ->setContentSourceFromRequest($request) + ->setContinueOnMissingFields(true) + ->setContinueOnNoEffect(true); + + $xactions = array(); + $xactions[] = $object->getApplicationTransactionTemplate() + ->setTransactionType(PhabricatorTransactions::TYPE_EDGE) + ->setMetadataValue('edge:type', $edge_type) + ->setNewValue(array( + '+' => array_fuse($add_phids), + '-' => array_fuse($rem_phids), + )); + + try { + $editor->applyTransactions($object, $xactions); + + return id(new AphrontRedirectResponse())->setURI($done_uri); + } catch (PhabricatorEdgeCycleException $ex) { + return $this->newGraphCycleResponse($ex, $done_uri); + } + } + + $handles = iterator_to_array($handles); + $handles = array_select_keys($handles, $dst_phids); + + // TODO: These are hard-coded for now. + $filters = array( + 'assigned' => pht('Assigned to Me'), + 'created' => pht('Created By Me'), + 'open' => pht('All Open Objects'), + 'all' => pht('All Objects'), + ); + + $dialog_title = $relationship->getDialogTitleText(); + $dialog_header = $relationship->getDialogHeaderText(); + $dialog_button = $relationship->getDialogButtonText(); + $dialog_instructions = $relationship->getDialogInstructionsText(); + + // TODO: Remove this, this is just legacy support. + $legacy_kinds = array( + ManiphestTaskHasCommitEdgeType::EDGECONST => 'CMIT', + ManiphestTaskHasMockEdgeType::EDGECONST => 'MOCK', + ManiphestTaskHasRevisionEdgeType::EDGECONST => 'DREV', + ManiphestTaskDependsOnTaskEdgeType::EDGECONST => 'TASK', + ManiphestTaskDependedOnByTaskEdgeType::EDGECONST => 'TASK', + ); + + $edge_type = $relationship->getEdgeConstant(); + $legacy_kind = idx($legacy_kinds, $edge_type); + if (!$legacy_kind) { + throw new Exception( + pht('Only specific legacy relationships are supported!')); + } + + return id(new PhabricatorObjectSelectorDialog()) + ->setUser($viewer) + ->setInitialPHIDs($initial_phids) + ->setHandles($handles) + ->setFilters($filters) + ->setSelectedFilter('created') + ->setExcluded($phid) + ->setCancelURI($done_uri) + ->setSearchURI("/search/select/{$legacy_kind}/edge/") + ->setTitle($dialog_title) + ->setHeader($dialog_header) + ->setButtonText($dialog_button) + ->setInstructions($dialog_instructions) + ->buildDialog(); + } + + private function newGraphCycleResponse( + PhabricatorEdgeCycleException $ex, + $done_uri) { + + $viewer = $this->getViewer(); + $cycle = $ex->getCycle(); + + $handles = $this->loadViewerHandles($cycle); + $names = array(); + foreach ($cycle as $cycle_phid) { + $names[] = $handles[$cycle_phid]->getFullName(); + } + + $message = pht( + 'You can not create that relationship because it would create a '. + 'circular dependency:'); + + $list = implode(" \xE2\x86\x92 ", $names); + + return $this->newDialog() + ->setTitle(pht('Circular Dependency')) + ->appendParagraph($message) + ->appendParagraph($list) + ->addCancelButton($done_uri); + } + + private function newUnrelatableObjectResponse(Exception $ex, $done_uri) { + $message = $ex->getMessage(); + + return $this->newDialog() + ->setTitle(pht('Invalid Relationship')) + ->appendParagraph($message) + ->addCancelButton($done_uri); + } + +} diff --git a/src/applications/search/relationship/PhabricatorObjectRelationship.php b/src/applications/search/relationship/PhabricatorObjectRelationship.php new file mode 100644 index 0000000000..9742a35adf --- /dev/null +++ b/src/applications/search/relationship/PhabricatorObjectRelationship.php @@ -0,0 +1,75 @@ +viewer = $viewer; + return $this; + } + + public function getViewer() { + return $this->viewer; + } + + final public function getRelationshipConstant() { + return $this->getPhobjectClassConstant('RELATIONSHIPKEY'); + } + + abstract public function isEnabledForObject($object); + + abstract public function getEdgeConstant(); + + abstract protected function getActionName(); + abstract protected function getActionIcon(); + + abstract public function canRelateObjects($src, $dst); + + abstract public function getDialogTitleText(); + abstract public function getDialogHeaderText(); + abstract public function getDialogButtonText(); + + public function getDialogInstructionsText() { + return null; + } + + public function shouldAppearInActionMenu() { + return true; + } + + protected function isActionEnabled($object) { + $viewer = $this->getViewer(); + + return PhabricatorPolicyFilter::hasCapability( + $viewer, + $object, + PhabricatorPolicyCapability::CAN_EDIT); + } + + final public function newAction($object) { + $is_enabled = $this->isActionEnabled($object); + $action_uri = $this->getActionURI($object); + + return id(new PhabricatorActionView()) + ->setName($this->getActionName()) + ->setHref($action_uri) + ->setIcon($this->getActionIcon()) + ->setDisabled(!$is_enabled) + ->setWorkflow(true); + } + + final public static function getAllRelationships() { + return id(new PhutilClassMapQuery()) + ->setAncestorClass(__CLASS__) + ->setUniqueMethod('getRelationshipConstant') + ->execute(); + } + + private function getActionURI($object) { + $phid = $object->getPHID(); + $type = $this->getRelationshipConstant(); + return "/search/rel/{$type}/{$phid}/"; + } + +} diff --git a/src/applications/search/relationship/PhabricatorObjectRelationshipList.php b/src/applications/search/relationship/PhabricatorObjectRelationshipList.php new file mode 100644 index 0000000000..a43bbaa571 --- /dev/null +++ b/src/applications/search/relationship/PhabricatorObjectRelationshipList.php @@ -0,0 +1,99 @@ +viewer = $viewer; + return $this; + } + + public function getViewer() { + if ($this->viewer === null) { + throw new PhutilInvalidStateException('setViewer'); + } + + return $this->viewer; + } + + public function setObject($object) { + $this->object = $object; + return $this; + } + + public function getObject() { + if ($this->object === null) { + throw new PhutilInvalidStateException('setObject'); + } + + return $this->object; + } + + public function setRelationships(array $relationships) { + assert_instances_of($relationships, 'PhabricatorObjectRelationship'); + $this->relationships = $relationships; + return $this; + } + + public function getRelationships() { + if ($this->relationships === null) { + throw new PhutilInvalidStateException('setRelationships'); + } + + return $this->relationships; + } + + public function newActionMenu() { + $relationships = $this->getRelationships(); + $object = $this->getObject(); + + $actions = array(); + foreach ($relationships as $key => $relationship) { + if (!$relationship->shouldAppearInActionMenu()) { + continue; + } + + $actions[$key] = $relationship->newAction($object); + } + + if (!$actions) { + return null; + } + + $actions = msort($actions, 'getName'); + + return id(new PhabricatorActionView()) + ->setName(pht('Edit Related Objects...')) + ->setIcon('fa-link') + ->setSubmenu($actions); + } + + public function getRelationship($key) { + return idx($this->relationships, $key); + } + + public static function newForObject(PhabricatorUser $viewer, $object) { + $relationships = PhabricatorObjectRelationship::getAllRelationships(); + + $results = array(); + foreach ($relationships as $key => $relationship) { + $relationship = clone $relationship; + + $relationship->setViewer($viewer); + if (!$relationship->isEnabledForObject($object)) { + continue; + } + + $results[$key] = $relationship; + } + + return id(new self()) + ->setViewer($viewer) + ->setObject($object) + ->setRelationships($results); + } + +} diff --git a/src/applications/search/typeahead/PhabricatorSearchDatasource.php b/src/applications/search/typeahead/PhabricatorSearchDatasource.php index 11fb0afdf4..2a17ad01eb 100644 --- a/src/applications/search/typeahead/PhabricatorSearchDatasource.php +++ b/src/applications/search/typeahead/PhabricatorSearchDatasource.php @@ -16,14 +16,22 @@ final class PhabricatorSearchDatasource } public function getComponentDatasources() { - return array( - id(new PhabricatorPeopleDatasource())->setEnrichResults(true), + $sources = array( + new PhabricatorPeopleDatasource(), new PhabricatorProjectDatasource(), new PhabricatorApplicationDatasource(), new PhabricatorTypeaheadMonogramDatasource(), new DiffusionRepositoryDatasource(), new DiffusionSymbolDatasource(), ); + + // These results are always rendered in the full browse display mode, so + // set the browse flag on all component sources. + foreach ($sources as $source) { + $source->setIsBrowse(true); + } + + return $sources; } } diff --git a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php index 7443de7edc..1a3dd1c89e 100644 --- a/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php +++ b/src/applications/transactions/editor/PhabricatorApplicationTransactionEditor.php @@ -931,6 +931,7 @@ abstract class PhabricatorApplicationTransactionEditor $object->openTransaction(); } + try { foreach ($xactions as $xaction) { $this->applyInternalEffects($object, $xaction); } @@ -940,8 +941,6 @@ abstract class PhabricatorApplicationTransactionEditor try { $object->save(); } catch (AphrontDuplicateKeyQueryException $ex) { - $object->killTransaction(); - // This callback has an opportunity to throw a better exception, // so execution may end here. $this->didCatchDuplicateKeyException($object, $xactions, $ex); @@ -973,7 +972,11 @@ abstract class PhabricatorApplicationTransactionEditor $read_locking = false; } - $object->saveTransaction(); + $object->saveTransaction(); + } catch (Exception $ex) { + $object->killTransaction(); + throw $ex; + } // Now that we've completely applied the core transaction set, try to apply // Herald rules. Herald rules are allowed to either take direct actions on diff --git a/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php b/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php index ff1eaae553..9741e15124 100644 --- a/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php +++ b/src/applications/transactions/view/PhabricatorApplicationTransactionCommentView.php @@ -343,6 +343,7 @@ class PhabricatorApplicationTransactionCommentView extends AphrontView { array( 'id' => $this->getPreviewPanelID(), 'style' => 'display: none', + 'class' => 'phui-comment-preview-view', ), $preview); } diff --git a/src/applications/typeahead/controller/PhabricatorTypeaheadModularDatasourceController.php b/src/applications/typeahead/controller/PhabricatorTypeaheadModularDatasourceController.php index 15650a33fd..a7c8381bfd 100644 --- a/src/applications/typeahead/controller/PhabricatorTypeaheadModularDatasourceController.php +++ b/src/applications/typeahead/controller/PhabricatorTypeaheadModularDatasourceController.php @@ -65,7 +65,8 @@ final class PhabricatorTypeaheadModularDatasourceController } $composite - ->setOffset($offset); + ->setOffset($offset) + ->setIsBrowse(true); } $results = $composite->loadResults(); @@ -142,9 +143,6 @@ final class PhabricatorTypeaheadModularDatasourceController $items = array(); foreach ($results as $result) { - $token = PhabricatorTypeaheadTokenView::newFromTypeaheadResult( - $result); - // Disable already-selected tokens. $disabled = isset($exclude[$result->getPHID()]); @@ -161,15 +159,14 @@ final class PhabricatorTypeaheadModularDatasourceController ), pht('Select')); + $information = $this->renderBrowseResult($result, $button); + $items[] = phutil_tag( 'div', array( 'class' => 'typeahead-browse-item grouped', ), - array( - $token, - $button, - )); + $information); } $markup = array( @@ -250,6 +247,8 @@ final class PhabricatorTypeaheadModularDatasourceController ->setRenderDialogAsDiv(true) ->setTitle($source->getBrowseTitle()) ->appendChild($browser) + ->setResizeX(true) + ->setResizeY($frame_id) ->addFooter($function_help) ->addCancelButton('/', pht('Close')); } @@ -350,4 +349,60 @@ final class PhabricatorTypeaheadModularDatasourceController ->appendChild($view); } + private function renderBrowseResult( + PhabricatorTypeaheadResult $result, + $button) { + + $class = array(); + $style = array(); + $separator = " \xC2\xB7 "; + + $class[] = 'phabricator-main-search-typeahead-result'; + + $name = phutil_tag( + 'div', + array( + 'class' => 'result-name', + ), + $result->getDisplayName()); + + $icon = $result->getIcon(); + $icon = id(new PHUIIconView())->setIcon($icon); + + $attributes = $result->getAttributes(); + $attributes = phutil_implode_html($separator, $attributes); + $attributes = array($icon, ' ', $attributes); + + $closed = $result->getClosed(); + if ($closed) { + $class[] = 'result-closed'; + $attributes = array($closed, $separator, $attributes); + } + + $attributes = phutil_tag( + 'div', + array( + 'class' => 'result-type', + ), + $attributes); + + $image = $result->getImageURI(); + if ($image) { + $style[] = 'background-image: url('.$image.');'; + $class[] = 'has-image'; + } + + return phutil_tag( + 'div', + array( + 'class' => implode(' ', $class), + 'style' => implode(' ', $style), + ), + array( + $button, + $name, + $attributes, + )); + } + } diff --git a/src/applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php b/src/applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php index 5726a4b6dd..306b33b497 100644 --- a/src/applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php +++ b/src/applications/typeahead/datasource/PhabricatorTypeaheadCompositeDatasource.php @@ -37,6 +37,7 @@ abstract class PhabricatorTypeaheadCompositeDatasource } $stack = $this->getFunctionStack(); + $is_browse = $this->getIsBrowse(); $results = array(); foreach ($this->getUsableDatasources() as $source) { @@ -70,6 +71,10 @@ abstract class PhabricatorTypeaheadCompositeDatasource $source->setLimit($offset + $limit); } + if ($is_browse) { + $source->setIsBrowse(true); + } + $source_results = $source->loadResults(); $source_results = $source->didLoadResults($source_results); $results[] = $source_results; diff --git a/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php b/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php index c1d1e96540..9fee4b2434 100644 --- a/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php +++ b/src/applications/typeahead/datasource/PhabricatorTypeaheadDatasource.php @@ -12,6 +12,7 @@ abstract class PhabricatorTypeaheadDatasource extends Phobject { private $limit; private $parameters = array(); private $functionStack = array(); + private $isBrowse; public function setLimit($limit) { $this->limit = $limit; @@ -71,6 +72,15 @@ abstract class PhabricatorTypeaheadDatasource extends Phobject { return idx($this->parameters, $name, $default); } + public function setIsBrowse($is_browse) { + $this->isBrowse = $is_browse; + return $this; + } + + public function getIsBrowse() { + return $this->isBrowse; + } + public function getDatasourceURI() { $uri = new PhutilURI('/typeahead/class/'.get_class($this).'/'); $uri->setQueryParams($this->parameters); @@ -199,7 +209,8 @@ abstract class PhabricatorTypeaheadDatasource extends Phobject { protected function newFunctionResult() { return id(new PhabricatorTypeaheadResult()) ->setTokenType(PhabricatorTypeaheadTokenView::TYPE_FUNCTION) - ->setIcon('fa-asterisk'); + ->setIcon('fa-asterisk') + ->addAttribute(pht('Function')); } public function newInvalidToken($name) { diff --git a/src/applications/typeahead/storage/PhabricatorTypeaheadResult.php b/src/applications/typeahead/storage/PhabricatorTypeaheadResult.php index f5c84766b7..4c5c079734 100644 --- a/src/applications/typeahead/storage/PhabricatorTypeaheadResult.php +++ b/src/applications/typeahead/storage/PhabricatorTypeaheadResult.php @@ -17,6 +17,7 @@ final class PhabricatorTypeaheadResult extends Phobject { private $tokenType; private $unique; private $autocomplete; + private $attributes = array(); public function setIcon($icon) { $this->icon = $icon; @@ -188,4 +189,26 @@ final class PhabricatorTypeaheadResult extends Phobject { return null; } + public function getImageURI() { + return $this->imageURI; + } + + public function getClosed() { + return $this->closed; + } + + public function resetAttributes() { + $this->attributes = array(); + return $this; + } + + public function getAttributes() { + return $this->attributes; + } + + public function addAttribute($attribute) { + $this->attributes[] = $attribute; + return $this; + } + } diff --git a/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php b/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php index 42909ee6e2..700a11ea36 100644 --- a/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php +++ b/src/infrastructure/edges/editor/PhabricatorEdgeEditor.php @@ -134,7 +134,6 @@ final class PhabricatorEdgeEditor extends Phobject { $caught = $ex; } - if ($caught) { $this->killTransactions(); } diff --git a/src/infrastructure/edges/engineextension/PhabricatorEdgesDestructionEngineExtension.php b/src/infrastructure/edges/engineextension/PhabricatorEdgesDestructionEngineExtension.php index b2e41b1575..8993282f59 100644 --- a/src/infrastructure/edges/engineextension/PhabricatorEdgesDestructionEngineExtension.php +++ b/src/infrastructure/edges/engineextension/PhabricatorEdgesDestructionEngineExtension.php @@ -28,10 +28,20 @@ final class PhabricatorEdgesDestructionEngineExtension foreach ($edges as $type => $type_edges) { foreach ($type_edges as $src => $src_edges) { foreach ($src_edges as $dst => $edge) { - $editor->removeEdge($edge['src'], $edge['type'], $edge['dst']); + try { + $editor->removeEdge($edge['src'], $edge['type'], $edge['dst']); + } catch (Exception $ex) { + // We can run into an exception while removing the edge if the + // edge type no longer exists. This prevents us from figuring out + // if there's an inverse type. Just ignore any errors here and + // continue, since the best we can do is clean up all the edges + // we still have information about. See T11201. + phlog($ex); + } } } } + $editor->save(); } diff --git a/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php b/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php index c49069fcae..23cb079297 100644 --- a/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php +++ b/src/infrastructure/internationalization/translation/PhabricatorUSEnglishTranslation.php @@ -206,73 +206,73 @@ final class PhabricatorUSEnglishTranslation ), ), - '%s added %s blocking task(s): %s.' => array( + '%s added %s subtask(s): %s.' => array( array( - '%s added a blocking task: %3$s.', - '%s added blocking tasks: %3$s.', + '%s added a subtask: %3$s.', + '%s added subtasks: %3$s.', ), ), - '%s added %s blocked task(s): %s.' => array( + '%s added %s parent task(s): %s.' => array( array( - '%s added a blocked task: %3$s.', - '%s added blocked tasks: %3$s.', + '%s added a parent task: %3$s.', + '%s added parent tasks: %3$s.', ), ), - '%s removed %s blocking task(s): %s.' => array( + '%s removed %s subtask(s): %s.' => array( array( - '%s removed a blocking task: %3$s.', - '%s removed blocking tasks: %3$s.', + '%s removed a subtask: %3$s.', + '%s removed subtasks: %3$s.', ), ), - '%s removed %s blocked task(s): %s.' => array( + '%s removed %s parent task(s): %s.' => array( array( - '%s removed a blocked task: %3$s.', - '%s removed blocked tasks: %3$s.', + '%s removed a parent task: %3$s.', + '%s removed parent tasks: %3$s.', ), ), - '%s added %s blocking task(s) for %s: %s.' => array( + '%s added %s subtask(s) for %s: %s.' => array( array( - '%s added a blocking task for %3$s: %4$s.', - '%s added blocking tasks for %3$s: %4$s.', + '%s added a subtask for %3$s: %4$s.', + '%s added subtasks for %3$s: %4$s.', ), ), - '%s added %s blocked task(s) for %s: %s.' => array( + '%s added %s parent task(s) for %s: %s.' => array( array( - '%s added a blocked task for %3$s: %4$s.', - '%s added blocked tasks for %3$s: %4$s.', + '%s added a parent task for %3$s: %4$s.', + '%s added parent tasks for %3$s: %4$s.', ), ), - '%s removed %s blocking task(s) for %s: %s.' => array( + '%s removed %s subtask(s) for %s: %s.' => array( array( - '%s removed a blocking task for %3$s: %4$s.', - '%s removed blocking tasks for %3$s: %4$s.', + '%s removed a subtask for %3$s: %4$s.', + '%s removed subtasks for %3$s: %4$s.', ), ), - '%s removed %s blocked task(s) for %s: %s.' => array( + '%s removed %s parent task(s) for %s: %s.' => array( array( - '%s removed a blocked task for %3$s: %4$s.', - '%s removed blocked tasks for %3$s: %4$s.', + '%s removed a parent task for %3$s: %4$s.', + '%s removed parent tasks for %3$s: %4$s.', ), ), - '%s edited blocking task(s), added %s: %s; removed %s: %s.' => - '%s edited blocking tasks, added: %3$s; removed: %5$s.', + '%s edited subtask(s), added %s: %s; removed %s: %s.' => + '%s edited subtasks, added: %3$s; removed: %5$s.', - '%s edited blocking task(s) for %s, added %s: %s; removed %s: %s.' => - '%s edited blocking tasks for %s, added: %4$s; removed: %6$s.', + '%s edited subtask(s) for %s, added %s: %s; removed %s: %s.' => + '%s edited subtasks for %s, added: %4$s; removed: %6$s.', - '%s edited blocked task(s), added %s: %s; removed %s: %s.' => - '%s edited blocked tasks, added: %3$s; removed: %5$s.', + '%s edited parent task(s), added %s: %s; removed %s: %s.' => + '%s edited parent tasks, added: %3$s; removed: %5$s.', - '%s edited blocked task(s) for %s, added %s: %s; removed %s: %s.' => - '%s edited blocked tasks for %s, added: %4$s; removed: %6$s.', + '%s edited parent task(s) for %s, added %s: %s; removed %s: %s.' => + '%s edited parent tasks for %s, added: %4$s; removed: %6$s.', '%s edited answer(s), added %s: %s; removed %d: %s.' => '%s edited answers, added: %3$s; removed: %5$s.', diff --git a/src/view/AphrontDialogView.php b/src/view/AphrontDialogView.php index 218839ef6e..4616393813 100644 --- a/src/view/AphrontDialogView.php +++ b/src/view/AphrontDialogView.php @@ -24,6 +24,8 @@ final class AphrontDialogView private $flush; private $validationException; private $objectList; + private $resizeX; + private $resizeY; const WIDTH_DEFAULT = 'default'; @@ -72,6 +74,24 @@ final class AphrontDialogView return $this->shortTitle; } + public function setResizeY($resize_y) { + $this->resizeY = $resize_y; + return $this; + } + + public function getResizeY() { + return $this->resizeY; + } + + public function setResizeX($resize_x) { + $this->resizeX = $resize_x; + return $this; + } + + public function getResizeX() { + return $this->resizeX; + } + public function addSubmitButton($text = null) { if (!$text) { $text = pht('Okay'); @@ -347,6 +367,20 @@ final class AphrontDialogView $this->footers); } + $resize = null; + if ($this->resizeX || $this->resizeY) { + $resize = javelin_tag( + 'div', + array( + 'class' => 'aphront-dialog-resize', + 'sigil' => 'jx-dialog-resize', + 'meta' => array( + 'resizeX' => $this->resizeX, + 'resizeY' => $this->resizeY, + ), + )); + } + $tail = null; if ($buttons || $footer) { $tail = phutil_tag( @@ -357,6 +391,7 @@ final class AphrontDialogView array( $buttons, $footer, + $resize, )); } diff --git a/src/view/control/PhabricatorObjectSelectorDialog.php b/src/view/control/PhabricatorObjectSelectorDialog.php index eaa51e5111..09d9582e8b 100644 --- a/src/view/control/PhabricatorObjectSelectorDialog.php +++ b/src/view/control/PhabricatorObjectSelectorDialog.php @@ -10,6 +10,7 @@ final class PhabricatorObjectSelectorDialog extends Phobject { private $searchURI; private $selectedFilter; private $excluded; + private $initialPHIDs; private $title; private $header; @@ -77,6 +78,15 @@ final class PhabricatorObjectSelectorDialog extends Phobject { return $this; } + public function setInitialPHIDs(array $initial_phids) { + $this->initialPHIDs = $initial_phids; + return $this; + } + + public function getInitialPHIDs() { + return $this->initialPHIDs; + } + public function buildDialog() { $user = $this->user; @@ -171,8 +181,14 @@ final class PhabricatorObjectSelectorDialog extends Phobject { $view = new PhabricatorHandleObjectSelectorDataView($handle); $handle_views[$phid] = $view->renderData(); } + $dialog->addHiddenInput('phids', implode(';', array_keys($this->handles))); + $initial_phids = $this->getInitialPHIDs(); + if ($initial_phids) { + $initial_phids = implode(', ', $initial_phids); + $dialog->addHiddenInput('initialPHIDs', $initial_phids); + } Javelin::initBehavior( 'phabricator-object-selector', @@ -188,7 +204,10 @@ final class PhabricatorObjectSelectorDialog extends Phobject { 'handles' => $handle_views, )); - return $dialog; + $dialog->setResizeX(true); + $dialog->setResizeY($results_id); + + return $dialog; } } diff --git a/src/view/layout/PhabricatorActionListView.php b/src/view/layout/PhabricatorActionListView.php index 4965f02793..fd18e7f429 100644 --- a/src/view/layout/PhabricatorActionListView.php +++ b/src/view/layout/PhabricatorActionListView.php @@ -21,6 +21,10 @@ final class PhabricatorActionListView extends AphrontView { return $this; } + public function getID() { + return $this->id; + } + public function render() { $viewer = $this->getViewer(); @@ -44,13 +48,26 @@ final class PhabricatorActionListView extends AphrontView { require_celerity_resource('phabricator-action-list-view-css'); + $items = array(); + foreach ($actions as $action) { + foreach ($action->getItems() as $item) { + $items[] = $item; + } + } + return phutil_tag( 'ul', array( 'class' => 'phabricator-action-list-view', 'id' => $this->id, ), - $actions); + $items); + } + + public function getDropdownMenuMetadata() { + return array( + 'items' => (string)hsprintf('%s', $this), + ); } diff --git a/src/view/layout/PhabricatorActionView.php b/src/view/layout/PhabricatorActionView.php index 3efa32071d..7a7cc64c3b 100644 --- a/src/view/layout/PhabricatorActionView.php +++ b/src/view/layout/PhabricatorActionView.php @@ -14,6 +14,10 @@ final class PhabricatorActionView extends AphrontView { private $metadata; private $selected; private $openInNewWindow; + private $submenu = array(); + private $hidden; + private $depth; + private $id; public function setSelected($selected) { $this->selected = $selected; @@ -66,6 +70,10 @@ final class PhabricatorActionView extends AphrontView { return $this; } + public function getName() { + return $this->name; + } + public function setLabel($label) { $this->label = $label; return $this; @@ -95,7 +103,60 @@ final class PhabricatorActionView extends AphrontView { return $this->openInNewWindow; } + public function getID() { + if (!$this->id) { + $this->id = celerity_generate_unique_node_id(); + } + return $this->id; + } + + public function setSubmenu(array $submenu) { + $this->submenu = $submenu; + + if (!$this->getHref()) { + $this->setHref('#'); + } + + return $this; + } + + public function getItems($depth = 0) { + $items = array(); + + $items[] = $this; + foreach ($this->submenu as $action) { + foreach ($action->getItems($depth + 1) as $item) { + $item + ->setHidden(true) + ->setDepth($depth + 1); + + $items[] = $item; + } + } + + return $items; + } + + public function setHidden($hidden) { + $this->hidden = $hidden; + return $this; + } + + public function getHidden() { + return $this->hidden; + } + + public function setDepth($depth) { + $this->depth = $depth; + return $this; + } + + public function getDepth() { + return $this->depth; + } + public function render() { + $caret_id = celerity_generate_unique_node_id(); $icon = null; if ($this->icon) { @@ -155,6 +216,18 @@ final class PhabricatorActionView extends AphrontView { $target = null; } + if ($this->submenu) { + $caret = javelin_tag( + 'span', + array( + 'class' => 'caret-right', + 'id' => $caret_id, + ), + ''); + } else { + $caret = null; + } + $item = javelin_tag( 'a', array( @@ -164,7 +237,7 @@ final class PhabricatorActionView extends AphrontView { 'sigil' => $sigils, 'meta' => $this->metadata, ), - array($icon, $this->name)); + array($icon, $this->name, $caret)); } } else { $item = phutil_tag( @@ -190,10 +263,47 @@ final class PhabricatorActionView extends AphrontView { $classes[] = 'phabricator-action-view-selected'; } - return phutil_tag( + if ($this->submenu) { + $classes[] = 'phabricator-action-view-submenu'; + } + + $style = array(); + + if ($this->hidden) { + $style[] = 'display: none;'; + } + + if ($this->depth) { + $indent = ($this->depth * 16); + $style[] = "margin-left: {$indent}px;"; + } + + $sigil = null; + $meta = null; + + if ($this->submenu) { + Javelin::initBehavior('phui-submenu'); + $sigil = 'phui-submenu'; + + $item_ids = array(); + foreach ($this->submenu as $subitem) { + $item_ids[] = $subitem->getID(); + } + + $meta = array( + 'itemIDs' => $item_ids, + 'caretID' => $caret_id, + ); + } + + return javelin_tag( 'li', array( + 'id' => $this->getID(), 'class' => implode(' ', $classes), + 'style' => implode(' ', $style), + 'sigil' => $sigil, + 'meta' => $meta, ), $item); } diff --git a/src/view/page/PhabricatorStandardPageView.php b/src/view/page/PhabricatorStandardPageView.php index e37da7c5ea..866268c710 100644 --- a/src/view/page/PhabricatorStandardPageView.php +++ b/src/view/page/PhabricatorStandardPageView.php @@ -222,7 +222,7 @@ final class PhabricatorStandardPageView extends PhabricatorBarePageView } if ($user) { - if ($user->isLoggedIn()) { + if ($user->isUserActivated()) { $offset = $user->getTimeZoneOffset(); $ignore_key = PhabricatorTimezoneIgnoreOffsetSetting::SETTINGKEY; diff --git a/src/view/phui/PHUIButtonView.php b/src/view/phui/PHUIButtonView.php index 9b9d4f0293..bda7723ef1 100644 --- a/src/view/phui/PHUIButtonView.php +++ b/src/view/phui/PHUIButtonView.php @@ -104,10 +104,19 @@ final class PHUIButtonView extends AphrontTagView { public function setDropdownMenu(PhabricatorActionListView $actions) { Javelin::initBehavior('phui-dropdown-menu'); + $this->addSigil('phui-dropdown-menu'); + $this->setMetadata($actions->getDropdownMenuMetadata()); + + return $this; + } + + public function setDropdownMenuID($id) { + Javelin::initBehavior('phui-dropdown-menu'); + $this->addSigil('phui-dropdown-menu'); $this->setMetadata( array( - 'items' => $actions, + 'menuID' => $id, )); return $this; diff --git a/src/view/phui/PHUIHeaderView.php b/src/view/phui/PHUIHeaderView.php index 8111944c4d..e5e834bef5 100644 --- a/src/view/phui/PHUIHeaderView.php +++ b/src/view/phui/PHUIHeaderView.php @@ -24,6 +24,7 @@ final class PHUIHeaderView extends AphrontTagView { private $badges = array(); private $href; private $actionList; + private $actionListID; public function setHeader($header) { $this->header = $header; @@ -90,6 +91,11 @@ final class PHUIHeaderView extends AphrontTagView { return $this; } + public function setActionListID($action_list_id) { + $this->actionListID = $action_list_id; + return $this; + } + public function setPolicyObject(PhabricatorPolicyInterface $object) { $this->policyObject = $object; return $this; @@ -189,14 +195,20 @@ final class PHUIHeaderView extends AphrontTagView { protected function getTagContent() { - if ($this->actionList) { + if ($this->actionList || $this->actionListID) { $action_button = id(new PHUIButtonView()) ->setTag('a') ->setText(pht('Actions')) ->setHref('#') ->setIcon('fa-bars') - ->addClass('phui-mobile-menu') - ->setDropdownMenu($this->actionList); + ->addClass('phui-mobile-menu'); + + if ($this->actionList) { + $action_button->setDropdownMenu($this->actionList); + } else if ($this->actionListID) { + $action_button->setDropdownMenuID($this->actionListID); + } + $this->addActionLink($action_button); } diff --git a/src/view/phui/PHUIListItemView.php b/src/view/phui/PHUIListItemView.php index 33c511c9c0..4af02e572e 100644 --- a/src/view/phui/PHUIListItemView.php +++ b/src/view/phui/PHUIListItemView.php @@ -43,10 +43,7 @@ final class PHUIListItemView extends AphrontTagView { Javelin::initBehavior('phui-dropdown-menu'); $this->addSigil('phui-dropdown-menu'); - $this->setMetadata( - array( - 'items' => $actions, - )); + $this->setMetadata($actions->getDropdownMenuMetadata()); return $this; } diff --git a/src/view/phui/PHUITimelineEventView.php b/src/view/phui/PHUITimelineEventView.php index 08b6cc2aaf..87fee5cfa6 100644 --- a/src/view/phui/PHUITimelineEventView.php +++ b/src/view/phui/PHUITimelineEventView.php @@ -327,9 +327,7 @@ final class PHUITimelineEventView extends AphrontView { 'sigil' => $sigil, 'aria-haspopup' => 'true', 'aria-expanded' => 'false', - 'meta' => array( - 'items' => hsprintf('%s', $action_list), - ), + 'meta' => $action_list->getDropdownMenuMetadata(), ), array( $aural, diff --git a/src/view/phui/PHUITwoColumnView.php b/src/view/phui/PHUITwoColumnView.php index 819e726309..4ada03240d 100644 --- a/src/view/phui/PHUITwoColumnView.php +++ b/src/view/phui/PHUITwoColumnView.php @@ -114,7 +114,7 @@ final class PHUITwoColumnView extends AphrontTagView { $curtain = $this->getCurtain(); if ($curtain) { $action_list = $curtain->getActionList(); - $this->header->setActionList($action_list); + $this->header->setActionListID($action_list->getID()); } $header = phutil_tag_div( diff --git a/webroot/rsrc/css/aphront/dialog-view.css b/webroot/rsrc/css/aphront/dialog-view.css index 8909368beb..7328cda5ea 100644 --- a/webroot/rsrc/css/aphront/dialog-view.css +++ b/webroot/rsrc/css/aphront/dialog-view.css @@ -48,6 +48,7 @@ .aphront-dialog-tail { border: none; + position: relative; background: {$lightgreybackground}; padding: 8px 16px; border-top: 1px solid {$thinblueborder}; @@ -55,6 +56,23 @@ border-bottom-right-radius: 3px; } +.device .aphront-dialog-resize { + /* No resizing on devices. */ + display: none; +} + +.aphront-dialog-resize { + position: absolute; + right: -4px; + bottom: -4px; + width: 18px; + height: 18px; + background-image: url(/rsrc/image/resize.png); + background-size: 100%; + cursor: nwse-resize; + pointer-events: all; +} + .aphront-dialog-foot { padding: 6px 0; float: left; diff --git a/webroot/rsrc/css/aphront/typeahead-browse.css b/webroot/rsrc/css/aphront/typeahead-browse.css index fd3cb8b482..625354bb71 100644 --- a/webroot/rsrc/css/aphront/typeahead-browse.css +++ b/webroot/rsrc/css/aphront/typeahead-browse.css @@ -57,10 +57,26 @@ input.typeahead-browse-input { .typeahead-browse-item button { float: right; - margin: 2px 6px; + margin: 8px 6px 0; } .typeahead-browse-item a.jx-tokenizer-token { margin-top: 1px; margin-left: 6px; } + +.typeahead-browse-item .phabricator-main-search-typeahead-result { + margin: 2px 0; + padding: 0 8px; +} + +.typeahead-browse-item .phabricator-main-search-typeahead-result.has-image { + padding-left: 48px; +} + +.typeahead-browse-item + .phabricator-main-search-typeahead-result.result-closed + .result-name { + text-decoration: line-through; + color: {$lightgreytext}; +} diff --git a/webroot/rsrc/css/phui/phui-button.css b/webroot/rsrc/css/phui/phui-button.css index 0e7cfd3ecc..51807fa48e 100644 --- a/webroot/rsrc/css/phui/phui-button.css +++ b/webroot/rsrc/css/phui/phui-button.css @@ -264,6 +264,32 @@ a.policy-control .caret { border-top-color: #000; } +.phabricator-action-view-submenu .caret-right { + float: right; + margin-top: 4px; + margin-right: 6px; + border-left-color: {$alphablue}; +} + +.phabricator-action-view-submenu .caret { + float: right; + margin-top: 5px; + margin-right: 4px; + border-top: 7px solid {$lightgreytext}; +} + +.phabricator-action-list-view .phabricator-action-view-submenu.phui-submenu-open + .phabricator-action-view-item { + background-color: rgba({$alphablue}, 0.07); + color: {$sky}; + border-radius: 3px; +} + +.phabricator-action-list-view .phabricator-action-view-submenu.phui-submenu-open + .phabricator-action-view-item .phui-icon-view { + color: {$sky}; +} + /* Icons */ .button.has-icon { position: relative; diff --git a/webroot/rsrc/css/phui/phui-property-list-view.css b/webroot/rsrc/css/phui/phui-property-list-view.css index 373a65d153..769a139664 100644 --- a/webroot/rsrc/css/phui/phui-property-list-view.css +++ b/webroot/rsrc/css/phui/phui-property-list-view.css @@ -169,8 +169,9 @@ /* When tags appear in property lists, give them a little more vertical spacing. */ -.phui-property-list-view .phui-tag-view { +.phui-property-list-value .phui-tag-view { margin: 2px 0; + white-space: pre-wrap; } .phui-property-list-has-actions .phui-property-list-properties-wrap { diff --git a/webroot/rsrc/css/phui/phui-timeline-view.css b/webroot/rsrc/css/phui/phui-timeline-view.css index 5394f75303..e6f43f70ad 100644 --- a/webroot/rsrc/css/phui/phui-timeline-view.css +++ b/webroot/rsrc/css/phui/phui-timeline-view.css @@ -417,3 +417,7 @@ a.phui-timeline-menu .phui-icon-view { .phui-timeline-badges .phui-badge-mini .phui-icon-view { font-size: 10px; } + +.phui-comment-preview-view { + margin-bottom: 20px; +} diff --git a/webroot/rsrc/externals/javelin/lib/Workflow.js b/webroot/rsrc/externals/javelin/lib/Workflow.js index 2ee7ef1ff0..7f0818d4e0 100644 --- a/webroot/rsrc/externals/javelin/lib/Workflow.js +++ b/webroot/rsrc/externals/javelin/lib/Workflow.js @@ -157,6 +157,80 @@ JX.install('Workflow', { _getActiveWorkflow : function() { var stack = JX.Workflow._stack; return stack[stack.length - 1]; + }, + + _onresizestart: function(e) { + var self = JX.Workflow; + if (self._resizing) { + return; + } + + var workflow = self._getActiveWorkflow(); + if (!workflow) { + return; + } + + e.kill(); + + var form = JX.DOM.find(workflow._root, 'div', 'jx-dialog'); + var resize = e.getNodeData('jx-dialog-resize'); + var node_y = JX.$(resize.resizeY); + + var dim = JX.Vector.getDim(form); + dim.y = JX.Vector.getDim(node_y).y; + + if (!form._minimumSize) { + form._minimumSize = dim; + } + + self._resizing = { + min: form._minimumSize, + form: form, + startPos: JX.$V(e), + startDim: dim, + resizeY: node_y, + resizeX: resize.resizeX + }; + }, + + _onmousemove: function(e) { + var self = JX.Workflow; + if (!self._resizing) { + return; + } + + var spec = self._resizing; + var form = spec.form; + var min = spec.min; + + var delta = JX.$V(e).add(-spec.startPos.x, -spec.startPos.y); + var src_dim = spec.startDim; + var dst_dim = JX.$V(src_dim.x + delta.x, src_dim.y + delta.y); + + if (dst_dim.x < min.x) { + dst_dim.x = min.x; + } + + if (dst_dim.y < min.y) { + dst_dim.y = min.y; + } + + if (spec.resizeX) { + JX.$V(dst_dim.x, null).setDim(form); + } + + if (spec.resizeY) { + JX.$V(null, dst_dim.y).setDim(spec.resizeY); + } + }, + + _onmouseup: function() { + var self = JX.Workflow; + if (!self._resizing) { + return; + } + + self._resizing = false; } }, @@ -220,6 +294,12 @@ JX.install('Workflow', { [], JX.Workflow._onsyntheticsubmit); + JX.DOM.listen( + this._root, + 'mousedown', + 'jx-dialog-resize', + JX.Workflow._onresizestart); + // Note that even in the presence of a content frame, we're doing // everything here at top level: dialogs are fully modal and cover // the entire window. @@ -413,6 +493,9 @@ JX.install('Workflow', { } JX.Stratcom.listen('keydown', null, close_dialog_when_user_presses_escape); + + JX.Stratcom.listen('mousemove', null, JX.Workflow._onmousemove); + JX.Stratcom.listen('mouseup', null, JX.Workflow._onmouseup); } }); diff --git a/webroot/rsrc/image/resize.png b/webroot/rsrc/image/resize.png new file mode 100644 index 0000000000..da44a55cd1 Binary files /dev/null and b/webroot/rsrc/image/resize.png differ diff --git a/webroot/rsrc/js/core/behavior-object-selector.js b/webroot/rsrc/js/core/behavior-object-selector.js index d219883ff7..d4a542c840 100644 --- a/webroot/rsrc/js/core/behavior-object-selector.js +++ b/webroot/rsrc/js/core/behavior-object-selector.js @@ -18,10 +18,21 @@ JX.behavior('phabricator-object-selector', function(config) { var query_timer = null; var query_delay = 50; - var phid_input = JX.DOM.find( + // TODO: This is fairly grotesque, but the dialog has two different forms + // inside it and there's no way to sigil the inputs in the "real" form right + // now. Clean this up when the dialog as a whole gets cleaned up. + + var inputs = JX.DOM.scry( JX.$(config.form), 'input', 'aphront-dialog-application-input'); + var phid_input; + for (var ii = 0; ii < inputs.length; ii++) { + if (inputs[ii].name == 'phids') { + phid_input = inputs[ii]; + break; + } + } var last_value = JX.$(config.query).value; diff --git a/webroot/rsrc/js/phui/behavior-phui-dropdown-menu.js b/webroot/rsrc/js/phui/behavior-phui-dropdown-menu.js index d841c87670..4bde14a307 100644 --- a/webroot/rsrc/js/phui/behavior-phui-dropdown-menu.js +++ b/webroot/rsrc/js/phui/behavior-phui-dropdown-menu.js @@ -16,17 +16,42 @@ JX.behavior('phui-dropdown-menu', function() { e.kill(); - var list = JX.$H(data.items).getFragment().firstChild; + var list; + var placeholder; + if (data.items) { + list = JX.$H(data.items).getFragment().firstChild; + } else { + list = JX.$(data.menuID); + placeholder = JX.$N('span'); + } var icon = e.getNode('phui-dropdown-menu'); data.menu = new JX.PHUIXDropdownMenu(icon); - data.menu.setContent(list); + + data.menu.listen('open', function() { + if (placeholder) { + JX.DOM.replace(list, placeholder); + } + data.menu.setContent(list); + }); + + data.menu.listen('close', function() { + if (placeholder) { + JX.DOM.replace(placeholder, list); + } + }); + data.menu.open(); JX.DOM.listen(list, 'click', 'tag:a', function(e) { if (!e.isNormalClick()) { return; } + + if (JX.Stratcom.pass()) { + return; + } + data.menu.close(); }); }); diff --git a/webroot/rsrc/js/phui/behavior-phui-submenu.js b/webroot/rsrc/js/phui/behavior-phui-submenu.js new file mode 100644 index 0000000000..b391174052 --- /dev/null +++ b/webroot/rsrc/js/phui/behavior-phui-submenu.js @@ -0,0 +1,44 @@ +/** + * @provides javelin-behavior-phui-submenu + * @requires javelin-behavior + * javelin-stratcom + * javelin-dom + */ + +JX.behavior('phui-submenu', function() { + + JX.Stratcom.listen('click', 'phui-submenu', function(e) { + if (!e.isNormalClick()) { + return; + } + + var node = e.getNode('phui-submenu'); + var data = e.getNodeData('phui-submenu'); + + e.kill(); + + data.open = !data.open; + + for (var ii = 0; ii < data.itemIDs.length; ii++) { + var id = data.itemIDs[ii]; + var item = JX.$(id); + if (data.open) { + JX.DOM.show(item); + } else { + JX.DOM.hide(item); + } + + // Add a class so we can animate zany effects. + JX.DOM.alterClass(item, 'phui-submenu-animate', data.open); + } + + JX.DOM.alterClass(node, 'phui-submenu-open', data.open); + + // Toggle the caret from ">" to "V" when opening the menu, and back again + // when closing it. + var caret = JX.$(data.caretID); + JX.DOM.alterClass(caret, 'caret', data.open); + JX.DOM.alterClass(caret, 'caret-right', !data.open); + }); + +}); diff --git a/webroot/rsrc/js/phuix/PHUIXDropdownMenu.js b/webroot/rsrc/js/phuix/PHUIXDropdownMenu.js index 3c93af21d2..d9fd1877b8 100644 --- a/webroot/rsrc/js/phuix/PHUIXDropdownMenu.js +++ b/webroot/rsrc/js/phuix/PHUIXDropdownMenu.js @@ -42,7 +42,7 @@ JX.install('PHUIXDropdownMenu', { JX.Stratcom.listen('keydown', null, JX.bind(this, this._onkey)); }, - events: ['open'], + events: ['open', 'close'], properties: { width: null, @@ -83,6 +83,8 @@ JX.install('PHUIXDropdownMenu', { this._open = false; this._hide(); + this.invoke('close'); + return this; },