Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F14727717
D13565.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
5 KB
Referenced Files
None
Subscribers
None
D13565.diff
View Options
diff --git a/resources/sql/patches/20131121.repocredentials.2.mig.php b/resources/sql/patches/20131121.repocredentials.2.mig.php
--- a/resources/sql/patches/20131121.repocredentials.2.mig.php
+++ b/resources/sql/patches/20131121.repocredentials.2.mig.php
@@ -1,139 +1,7 @@
<?php
-$table = new PhabricatorRepository();
-$conn_w = $table->establishConnection('w');
-$viewer = PhabricatorUser::getOmnipotentUser();
-
-$map = array();
-foreach (new LiskMigrationIterator($table) as $repository) {
- $callsign = $repository->getCallsign();
- echo pht('Examining repository %s...', $callsign)."\n";
-
- if ($repository->getCredentialPHID()) {
- echo pht('...already has a Credential.')."\n";
- continue;
- }
-
- $raw_uri = $repository->getRemoteURI();
- if (!$raw_uri) {
- echo pht('...no remote URI.')."\n";
- continue;
- }
-
- $uri = new PhutilURI($raw_uri);
-
- $proto = strtolower($uri->getProtocol());
- if ($proto == 'http' || $proto == 'https' || $proto == 'svn') {
- $username = $repository->getDetail('http-login');
- $secret = $repository->getDetail('http-pass');
- $type = PassphrasePasswordCredentialType::CREDENTIAL_TYPE;
- } else {
- $username = $repository->getDetail('ssh-login');
- if (!$username) {
- // If there's no explicit username, check for one in the URI. This is
- // possible with older repositories.
- $username = $uri->getUser();
- if (!$username) {
- // Also check for a Git/SCP-style URI.
- $git_uri = new PhutilGitURI($raw_uri);
- $username = $git_uri->getUser();
- }
- }
- $file = $repository->getDetail('ssh-keyfile');
- if ($file) {
- $secret = $file;
- $type = PassphraseSSHPrivateKeyFileCredentialType::CREDENTIAL_TYPE;
- } else {
- $secret = $repository->getDetail('ssh-key');
- $type = PassphraseSSHPrivateKeyTextCredentialType::CREDENTIAL_TYPE;
- }
- }
-
- if (!$username || !$secret) {
- echo pht('...no credentials set.')."\n";
- continue;
- }
-
- $map[$type][$username][$secret][] = $repository;
- echo pht('...will migrate.')."\n";
-}
-
-$passphrase = new PassphraseSecret();
-$passphrase->openTransaction();
-$table->openTransaction();
-
-foreach ($map as $credential_type => $credential_usernames) {
- $type = PassphraseCredentialType::getTypeByConstant($credential_type);
- foreach ($credential_usernames as $username => $credential_secrets) {
- foreach ($credential_secrets as $secret_plaintext => $repositories) {
- $callsigns = mpull($repositories, 'getCallsign');
-
- $signs = implode(', ', $callsigns);
-
- $name = pht(
- 'Migrated Repository Credential (%s)',
- id(new PhutilUTF8StringTruncator())
- ->setMaximumGlyphs(128)
- ->truncateString($signs));
-
- echo pht('Creating: %s...', $name)."\n";
-
- $secret = id(new PassphraseSecret())
- ->setSecretData($secret_plaintext)
- ->save();
-
- $secret_id = $secret->getID();
-
- $credential = PassphraseCredential::initializeNewCredential($viewer)
- ->setCredentialType($type->getCredentialType())
- ->setProvidesType($type->getProvidesType())
- ->setViewPolicy(PhabricatorPolicies::POLICY_ADMIN)
- ->setEditPolicy(PhabricatorPolicies::POLICY_ADMIN)
- ->setName($name)
- ->setUsername($username)
- ->setSecretID($secret_id);
-
- $credential->setPHID($credential->generatePHID());
-
- queryfx(
- $credential->establishConnection('w'),
- 'INSERT INTO %T (name, credentialType, providesType, viewPolicy,
- editPolicy, description, username, secretID, isDestroyed,
- phid, dateCreated, dateModified)
- VALUES (%s, %s, %s, %s, %s, %s, %s, %d, %d, %s, %d, %d)',
- $credential->getTableName(),
- $credential->getName(),
- $credential->getCredentialType(),
- $credential->getProvidesType(),
- $credential->getViewPolicy(),
- $credential->getEditPolicy(),
- $credential->getDescription(),
- $credential->getUsername(),
- $credential->getSecretID(),
- $credential->getIsDestroyed(),
- $credential->getPHID(),
- time(),
- time());
-
- foreach ($repositories as $repository) {
- queryfx(
- $conn_w,
- 'UPDATE %T SET credentialPHID = %s WHERE id = %d',
- $table->getTableName(),
- $credential->getPHID(),
- $repository->getID());
-
- $edge_type = PhabricatorObjectUsesCredentialsEdgeType::EDGECONST;
-
- id(new PhabricatorEdgeEditor())
- ->addEdge($repository->getPHID(), $edge_type, $credential->getPHID())
- ->save();
- }
- }
- }
-}
-
-$table->saveTransaction();
-$passphrase->saveTransaction();
-
-echo pht('Done.')."\n";
+// This migration originally imported repository credentials from the old
+// inline format into Passphrase after the application was introduced. After
+// about 18 months, following the introduction of Spaces, it stopped running
+// cleanly. Installs older than Nov 2013 will need to manually fix repository
+// credentials after updating. See T8746.
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Jan 19, 4:48 AM (20 h, 47 m)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7017500
Default Alt Text
D13565.diff (5 KB)
Attached To
Mode
D13565: No-op the old repository credential migration
Attached
Detach File
Event Timeline
Log In to Comment