Page MenuHomePhabricator

D19446.id46514.diff
No OneTemporary

D19446.id46514.diff

diff --git a/resources/sql/autopatches/20180510.repo_identity.big_migrate.php b/resources/sql/autopatches/20180510.repo_identity.big_migrate.php
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20180510.repo_identity.big_migrate.php
@@ -0,0 +1,64 @@
+<?php
+
+$commits = id(new DiffusionCommitQuery())
+ ->setViewer(PhabricatorUser::getOmnipotentUser())
+ ->needCommitData(true)
+ ->execute();
+
+$progress = new PhutilConsoleProgressBar();
+$progress->setTotal(count($commits));
+
+foreach ($commits as $commit) {
+ $data = $commit->getCommitData();
+ $author_name = $data->getAuthorName();
+ $author_identity = get_identity_for_commit($commit, $author_name);
+
+ $commit->setAuthorIdentityPHID($author_identity->getPHID());
+ $data->setCommitDetail(
+ 'authorIdentityPHID', $author_identity->getPHID());
+
+ $committer_name = $data->getCommitDetail('committer', null);
+ if ($committer_name) {
+ $committer_identity = get_identity_for_commit($commit, $committer_name);
+
+ $commit->setCommitterIdentityPHID($committer_identity->getPHID());
+ $data->setCommitDetail(
+ 'committerIdentityPHID', $committer_identity->getPHID());
+ }
+
+ $commit->save();
+ $data->save();
+ $progress->update(1);
+}
+$progress->done();
+
+
+function get_identity_for_commit(
+ PhabricatorRepositoryCommit $commit, $identity_name) {
+
+ static $seen = array();
+ $identity_key = PhabricatorHash::digestForIndex($identity_name);
+ if (empty($seen[$identity_key])) {
+ try {
+ $user_phid = id(new DiffusionResolveUserQuery())
+ ->withCommit($commit)
+ ->withName($identity_name)
+ ->execute();
+
+ $identity = id(new PhabricatorRepositoryIdentity())
+ ->setAuthorPHID($commit->getPHID())
+ ->setIdentityName($identity_name)
+ ->setAutomaticGuessedUserPHID($user_phid)
+ ->save();
+ } catch (AphrontDuplicateKeyQueryException $ex) {
+ // Somehow this identity already exists?
+ $identity = id(new PhabricatorRepositoryIdentityQuery())
+ ->setViewer(PhabricatorUser::getOmnipotentUser())
+ ->withIdentityNames(array($identity_name))
+ ->executeOne();
+ }
+ $seen[$identity_key] = $identity;
+ }
+
+ return $seen[$identity_key];
+}

File Metadata

Mime Type
text/plain
Expires
Sat, May 18, 7:22 AM (2 w, 11 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6299776
Default Alt Text
D19446.id46514.diff (2 KB)

Event Timeline