diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -2144,6 +2144,7 @@ 'PhabricatorRepositoryRefCursorQuery' => 'applications/repository/query/PhabricatorRepositoryRefCursorQuery.php', 'PhabricatorRepositoryRefEngine' => 'applications/repository/engine/PhabricatorRepositoryRefEngine.php', 'PhabricatorRepositoryRepositoryPHIDType' => 'applications/repository/phid/PhabricatorRepositoryRepositoryPHIDType.php', + 'PhabricatorRepositorySchemaSpec' => 'applications/repository/storage/PhabricatorRepositorySchemaSpec.php', 'PhabricatorRepositorySearchEngine' => 'applications/repository/query/PhabricatorRepositorySearchEngine.php', 'PhabricatorRepositoryStatusMessage' => 'applications/repository/storage/PhabricatorRepositoryStatusMessage.php', 'PhabricatorRepositorySvnCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositorySvnCommitChangeParserWorker.php', @@ -5141,6 +5142,7 @@ 'PhabricatorRepositoryRefCursorQuery' => 'PhabricatorCursorPagedPolicyAwareQuery', 'PhabricatorRepositoryRefEngine' => 'PhabricatorRepositoryEngine', 'PhabricatorRepositoryRepositoryPHIDType' => 'PhabricatorPHIDType', + 'PhabricatorRepositorySchemaSpec' => 'PhabricatorConfigSchemaSpec', 'PhabricatorRepositorySearchEngine' => 'PhabricatorApplicationSearchEngine', 'PhabricatorRepositoryStatusMessage' => 'PhabricatorRepositoryDAO', 'PhabricatorRepositorySvnCommitChangeParserWorker' => 'PhabricatorRepositoryCommitChangeParserWorker', diff --git a/src/applications/config/schema/PhabricatorConfigSchemaSpec.php b/src/applications/config/schema/PhabricatorConfigSchemaSpec.php --- a/src/applications/config/schema/PhabricatorConfigSchemaSpec.php +++ b/src/applications/config/schema/PhabricatorConfigSchemaSpec.php @@ -246,6 +246,11 @@ $charset = 'binary'; $collation = 'binary'; break; + case 'bytes32': + $column_type = 'char(32)'; + $charset = 'binary'; + $collation = 'binary'; + break; case 'bytes12': $column_type = 'char(12)'; $charset = 'binary'; @@ -266,6 +271,11 @@ $charset = $this->getUTF8Charset(); $collation = $this->getUTF8Collation(); break; + case 'text80': + $column_type = 'varchar(80)'; + $charset = $this->getUTF8Charset(); + $collation = $this->getUTF8Collation(); + break; case 'text64': $column_type = 'varchar(64)'; $charset = $this->getUTF8Charset(); diff --git a/src/applications/repository/storage/PhabricatorRepository.php b/src/applications/repository/storage/PhabricatorRepository.php --- a/src/applications/repository/storage/PhabricatorRepository.php +++ b/src/applications/repository/storage/PhabricatorRepository.php @@ -29,6 +29,7 @@ const TABLE_BADCOMMIT = 'repository_badcommit'; const TABLE_LINTMESSAGE = 'repository_lintmessage'; const TABLE_PARENTS = 'repository_parents'; + const TABLE_COVERAGE = 'repository_coverage'; const SERVE_OFF = 'off'; const SERVE_READONLY = 'readonly'; @@ -77,6 +78,31 @@ self::CONFIG_SERIALIZATION => array( 'details' => self::SERIALIZATION_JSON, ), + self::CONFIG_COLUMN_SCHEMA => array( + 'name' => 'text255', + 'callsign' => 'text32', + 'versionControlSystem' => 'text32', + 'uuid' => 'text64?', + 'pushPolicy' => 'policy', + 'credentialPHID' => 'phid?', + ), + self::CONFIG_KEY_SCHEMA => array( + 'key_phid' => null, + 'phid' => array( + 'columns' => array('phid'), + 'unique' => true, + ), + 'callsign' => array( + 'columns' => array('callsign'), + 'unique' => true, + ), + 'key_name' => array( + 'columns' => array('name'), + ), + 'key_vcs' => array( + 'columns' => array('versionControlSystem'), + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositoryArcanistProject.php b/src/applications/repository/storage/PhabricatorRepositoryArcanistProject.php --- a/src/applications/repository/storage/PhabricatorRepositoryArcanistProject.php +++ b/src/applications/repository/storage/PhabricatorRepositoryArcanistProject.php @@ -22,6 +22,21 @@ 'symbolIndexLanguages' => self::SERIALIZATION_JSON, 'symbolIndexProjects' => self::SERIALIZATION_JSON, ), + self::CONFIG_COLUMN_SCHEMA => array( + 'name' => 'text255', + 'repositoryID' => 'id?', + ), + self::CONFIG_KEY_SCHEMA => array( + 'key_phid' => null, + 'phid' => array( + 'columns' => array('phid'), + 'unique' => true, + ), + 'name' => array( + 'columns' => array('name'), + 'unique' => true, + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositoryAuditRequest.php b/src/applications/repository/storage/PhabricatorRepositoryAuditRequest.php --- a/src/applications/repository/storage/PhabricatorRepositoryAuditRequest.php +++ b/src/applications/repository/storage/PhabricatorRepositoryAuditRequest.php @@ -17,6 +17,17 @@ self::CONFIG_SERIALIZATION => array( 'auditReasons' => self::SERIALIZATION_JSON, ), + self::CONFIG_COLUMN_SCHEMA => array( + 'auditStatus' => 'text64', + ), + self::CONFIG_KEY_SCHEMA => array( + 'commitPHID' => array( + 'columns' => array('commitPHID'), + ), + 'auditorPHID' => array( + 'columns' => array('auditorPHID', 'auditStatus'), + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositoryBranch.php b/src/applications/repository/storage/PhabricatorRepositoryBranch.php --- a/src/applications/repository/storage/PhabricatorRepositoryBranch.php +++ b/src/applications/repository/storage/PhabricatorRepositoryBranch.php @@ -6,6 +6,21 @@ protected $name; protected $lintCommit; + public function getConfiguration() { + return array( + self::CONFIG_COLUMN_SCHEMA => array( + 'name' => 'text255', + 'lintCommit' => 'text40?', + ), + self::CONFIG_KEY_SCHEMA => array( + 'repositoryID' => array( + 'columns' => array('repositoryID', 'name'), + 'unique' => true, + ), + ), + ) + parent::getConfiguration(); + } + public static function loadBranch($repository_id, $branch_name) { return id(new PhabricatorRepositoryBranch())->loadOneWhere( 'repositoryID = %d AND name = %s', diff --git a/src/applications/repository/storage/PhabricatorRepositoryCommit.php b/src/applications/repository/storage/PhabricatorRepositoryCommit.php --- a/src/applications/repository/storage/PhabricatorRepositoryCommit.php +++ b/src/applications/repository/storage/PhabricatorRepositoryCommit.php @@ -66,6 +66,34 @@ return array( self::CONFIG_AUX_PHID => true, self::CONFIG_TIMESTAMPS => false, + self::CONFIG_COLUMN_SCHEMA => array( + 'commitIdentifier' => 'text40', + 'mailKey' => 'bytes20', + 'authorPHID' => 'phid?', + 'auditStatus' => 'uint32', + 'summary' => 'text80', + 'importStatus' => 'uint32', + ), + self::CONFIG_KEY_SCHEMA => array( + 'key_phid' => null, + 'phid' => array( + 'columns' => array('phid'), + 'unique' => true, + ), + 'repositoryID' => array( + 'columns' => array('repositoryID', 'importStatus'), + ), + 'authorPHID' => array( + 'columns' => array('authorPHID', 'auditStatus', 'epoch'), + ), + 'repositoryID_2' => array( + 'columns' => array('repositoryID', 'epoch'), + ), + 'key_commit_identity' => array( + 'columns' => array('commitIdentifier', 'repositoryID'), + 'unique' => true, + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositoryCommitData.php b/src/applications/repository/storage/PhabricatorRepositoryCommitData.php --- a/src/applications/repository/storage/PhabricatorRepositoryCommitData.php +++ b/src/applications/repository/storage/PhabricatorRepositoryCommitData.php @@ -19,6 +19,19 @@ self::CONFIG_SERIALIZATION => array( 'commitDetails' => self::SERIALIZATION_JSON, ), + self::CONFIG_COLUMN_SCHEMA => array( + 'authorName' => 'text255', + 'commitMessage' => 'text', + ), + self::CONFIG_KEY_SCHEMA => array( + 'commitID' => array( + 'columns' => array('commitID'), + 'unique' => true, + ), + 'authorName' => array( + 'columns' => array('authorName'), + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositoryMirror.php b/src/applications/repository/storage/PhabricatorRepositoryMirror.php --- a/src/applications/repository/storage/PhabricatorRepositoryMirror.php +++ b/src/applications/repository/storage/PhabricatorRepositoryMirror.php @@ -17,6 +17,15 @@ public function getConfiguration() { return array( self::CONFIG_AUX_PHID => true, + self::CONFIG_COLUMN_SCHEMA => array( + 'remoteURI' => 'text255', + 'credentialPHID' => 'phid?', + ), + self::CONFIG_KEY_SCHEMA => array( + 'key_repository' => array( + 'columns' => array('repositoryPHID'), + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositoryPushEvent.php b/src/applications/repository/storage/PhabricatorRepositoryPushEvent.php --- a/src/applications/repository/storage/PhabricatorRepositoryPushEvent.php +++ b/src/applications/repository/storage/PhabricatorRepositoryPushEvent.php @@ -28,6 +28,17 @@ return array( self::CONFIG_AUX_PHID => true, self::CONFIG_TIMESTAMPS => false, + self::CONFIG_COLUMN_SCHEMA => array( + 'remoteAddress' => 'uint32?', + 'remoteProtocol' => 'text32?', + 'rejectCode' => 'uint32', + 'rejectDetails' => 'text64?', + ), + self::CONFIG_KEY_SCHEMA => array( + 'key_repository' => array( + 'columns' => array('repositoryPHID'), + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositoryPushLog.php b/src/applications/repository/storage/PhabricatorRepositoryPushLog.php --- a/src/applications/repository/storage/PhabricatorRepositoryPushLog.php +++ b/src/applications/repository/storage/PhabricatorRepositoryPushLog.php @@ -71,6 +71,33 @@ self::CONFIG_BINARY => array( 'refNameRaw' => true, ), + self::CONFIG_COLUMN_SCHEMA => array( + 'refType' => 'text12', + 'refNameHash' => 'bytes12?', + 'refNameRaw' => 'bytes?', + 'refNameEncoding' => 'text16?', + 'refOld' => 'text40?', + 'refNew' => 'text40', + 'mergeBase' => 'text40?', + 'changeFlags' => 'uint32', + ), + self::CONFIG_KEY_SCHEMA => array( + 'key_repository' => array( + 'columns' => array('repositoryPHID'), + ), + 'key_ref' => array( + 'columns' => array('repositoryPHID', 'refNew'), + ), + 'key_name' => array( + 'columns' => array('repositoryPHID', 'refNameHash'), + ), + 'key_event' => array( + 'columns' => array('pushEventPHID'), + ), + 'key_pusher' => array( + 'columns' => array('pusherPHID'), + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositoryRefCursor.php b/src/applications/repository/storage/PhabricatorRepositoryRefCursor.php --- a/src/applications/repository/storage/PhabricatorRepositoryRefCursor.php +++ b/src/applications/repository/storage/PhabricatorRepositoryRefCursor.php @@ -27,6 +27,17 @@ self::CONFIG_BINARY => array( 'refNameRaw' => true, ), + self::CONFIG_COLUMN_SCHEMA => array( + 'refType' => 'text32', + 'refNameHash' => 'bytes12', + 'refNameEncoding' => 'text16', + 'commitIdentifier' => 'text40', + ), + self::CONFIG_KEY_SCHEMA => array( + 'key_cursor' => array( + 'columns' => array('repositoryPHID', 'refType', 'refNameHash'), + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositorySchemaSpec.php b/src/applications/repository/storage/PhabricatorRepositorySchemaSpec.php new file mode 100644 --- /dev/null +++ b/src/applications/repository/storage/PhabricatorRepositorySchemaSpec.php @@ -0,0 +1,185 @@ +buildLiskSchemata('PhabricatorRepositoryDAO'); + + $this->buildEdgeSchemata(new PhabricatorRepository()); + + $this->buildTransactionSchema( + new PhabricatorRepositoryTransaction()); + + $this->buildRawSchema( + id(new PhabricatorRepository())->getApplicationName(), + PhabricatorRepository::TABLE_BADCOMMIT, + array( + 'fullCommitName' => 'text255', + 'description' => 'text', + ), + array( + 'PRIMARY' => array( + 'columns' => array('fullCommitName'), + 'unique' => true, + ), + )); + + $this->buildRawSchema( + id(new PhabricatorRepository())->getApplicationName(), + PhabricatorRepository::TABLE_COVERAGE, + array( + 'id' => 'id', + 'branchID' => 'id', + 'commitID' => 'id', + 'pathID' => 'id', + 'coverage' => 'bytes', + ), + array( + 'PRIMARY' => array( + 'columns' => array('id'), + 'unique' => true, + ), + 'key_path' => array( + 'columns' => array('branchID', 'pathID', 'commitID'), + ), + )); + + $this->buildRawSchema( + id(new PhabricatorRepository())->getApplicationName(), + PhabricatorRepository::TABLE_FILESYSTEM, + array( + 'repositoryID' => 'id', + 'parentID' => 'id', + 'svnCommit' => 'uint32', + 'pathID' => 'id', + 'existed' => 'bool', + 'fileType' => 'uint32', + ), + array( + 'PRIMARY' => array( + 'columns' => array('repositoryID', 'parentID', 'pathID', 'svnCommit'), + 'unique' => true, + ), + 'repositoryID' => array( + 'columns' => array('repositoryID', 'svnCommit'), + ), + )); + + $this->buildRawSchema( + id(new PhabricatorRepository())->getApplicationName(), + PhabricatorRepository::TABLE_LINTMESSAGE, + array( + 'id' => 'id', + 'branchID' => 'id', + 'path' => 'text', + 'line' => 'uint32', + 'authorPHID' => 'phid?', + 'code' => 'text32', + 'severity' => 'text16', + 'name' => 'text255', + 'description' => 'text', + ), + array( + 'PRIMARY' => array( + 'columns' => array('id'), + 'unique' => true, + ), + 'branchID' => array( + 'columns' => array('branchID', 'path(64)'), + ), + 'branchID_2' => array( + 'columns' => array('branchID', 'code', 'path(64)'), + ), + 'key_author' => array( + 'columns' => array('authorPHID'), + ), + )); + + $this->buildRawSchema( + id(new PhabricatorRepository())->getApplicationName(), + PhabricatorRepository::TABLE_PARENTS, + array( + 'id' => 'id', + 'childCommitID' => 'id', + 'parentCommitID' => 'id', + ), + array( + 'PRIMARY' => array( + 'columns' => array('id'), + 'unique' => true, + ), + 'key_child' => array( + 'columns' => array('childCommitID', 'parentCommitID'), + 'unique' => true, + ), + 'key_parent' => array( + 'columns' => array('parentCommitID'), + ), + )); + + $this->buildRawSchema( + id(new PhabricatorRepository())->getApplicationName(), + PhabricatorRepository::TABLE_PATH, + array( + 'id' => 'id', + 'path' => 'text', + 'pathHash' => 'bytes32', + ), + array( + 'PRIMARY' => array( + 'columns' => array('id'), + 'unique' => true, + ), + 'pathHash' => array( + 'columns' => array('pathHash'), + 'unique' => true, + ), + )); + + $this->buildRawSchema( + id(new PhabricatorRepository())->getApplicationName(), + PhabricatorRepository::TABLE_PATHCHANGE, + array( + 'repositoryID' => 'id', + 'pathID' => 'id', + 'commitID' => 'id', + 'targetPathID' => 'id?', + 'targetCommitID' => 'id?', + 'changeType' => 'uint32', + 'fileType' => 'uint32', + 'isDirect' => 'bool', + 'commitSequence' => 'uint32', + ), + array( + 'PRIMARY' => array( + 'columns' => array('commitID', 'pathID'), + 'unique' => true, + ), + 'repositoryID' => array( + 'columns' => array('repositoryID', 'pathID', 'commitSequence'), + ), + )); + + $this->buildRawSchema( + id(new PhabricatorRepository())->getApplicationName(), + PhabricatorRepository::TABLE_SUMMARY, + array( + 'repositoryID' => 'id', + 'size' => 'uint32', + 'lastCommitID' => 'id', + 'epoch' => 'epoch?', + ), + array( + 'PRIMARY' => array( + 'columns' => array('repositoryID'), + 'unique' => true, + ), + 'key_epoch' => array( + 'columns' => array('epoch'), + ), + )); + + } + +} diff --git a/src/applications/repository/storage/PhabricatorRepositoryStatusMessage.php b/src/applications/repository/storage/PhabricatorRepositoryStatusMessage.php --- a/src/applications/repository/storage/PhabricatorRepositoryStatusMessage.php +++ b/src/applications/repository/storage/PhabricatorRepositoryStatusMessage.php @@ -23,6 +23,16 @@ self::CONFIG_SERIALIZATION => array( 'parameters' => self::SERIALIZATION_JSON, ), + self::CONFIG_COLUMN_SCHEMA => array( + 'statusType' => 'text32', + 'statusCode' => 'text32', + ), + self::CONFIG_KEY_SCHEMA => array( + 'repositoryID' => array( + 'columns' => array('repositoryID', 'statusType'), + 'unique' => true, + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositorySymbol.php b/src/applications/repository/storage/PhabricatorRepositorySymbol.php --- a/src/applications/repository/storage/PhabricatorRepositorySymbol.php +++ b/src/applications/repository/storage/PhabricatorRepositorySymbol.php @@ -24,6 +24,20 @@ return array( self::CONFIG_IDS => self::IDS_MANUAL, self::CONFIG_TIMESTAMPS => false, + self::CONFIG_COLUMN_SCHEMA => array( + 'id' => null, + 'symbolContext' => 'text128', + 'symbolName' => 'text128', + 'symbolType' => 'text12', + 'symbolLanguage' => 'text32', + 'lineNumber' => 'uint32', + ), + self::CONFIG_KEY_SCHEMA => array( + 'PRIMARY' => null, + 'symbolName' => array( + 'columns' => array('symbolName'), + ), + ), ) + parent::getConfiguration(); } diff --git a/src/applications/repository/storage/PhabricatorRepositoryVCSPassword.php b/src/applications/repository/storage/PhabricatorRepositoryVCSPassword.php --- a/src/applications/repository/storage/PhabricatorRepositoryVCSPassword.php +++ b/src/applications/repository/storage/PhabricatorRepositoryVCSPassword.php @@ -6,6 +6,20 @@ protected $userPHID; protected $passwordHash; + public function getConfiguration() { + return array( + self::CONFIG_COLUMN_SCHEMA => array( + 'passwordHash' => 'text128', + ), + self::CONFIG_KEY_SCHEMA => array( + 'key_phid' => array( + 'columns' => array('userPHID'), + 'unique' => true, + ), + ), + ) + parent::getConfiguration(); + } + public function setPassword( PhutilOpaqueEnvelope $password, PhabricatorUser $user) {