Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F15397393
D8196.id18542.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
6 KB
Referenced Files
None
Subscribers
None
D8196.id18542.diff
View Options
diff --git a/resources/sql/autopatches/20140211.dx.1.nullablechangesetid.sql b/resources/sql/autopatches/20140211.dx.1.nullablechangesetid.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20140211.dx.1.nullablechangesetid.sql
@@ -0,0 +1,2 @@
+ALTER TABLE {$NAMESPACE}_differential.differential_transaction_comment
+ CHANGE changesetID changesetID INT UNSIGNED;
diff --git a/resources/sql/autopatches/20140211.dx.2.migcommenttext.php b/resources/sql/autopatches/20140211.dx.2.migcommenttext.php
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20140211.dx.2.migcommenttext.php
@@ -0,0 +1,71 @@
+<?php
+
+$conn_w = id(new DifferentialRevision())->establishConnection('w');
+$rows = new LiskRawMigrationIterator($conn_w, 'differential_comment');
+
+$content_source = PhabricatorContentSource::newForSource(
+ PhabricatorContentSource::SOURCE_LEGACY,
+ array())->serialize();
+
+echo "Migrating Differential comment text to modern storage...\n";
+foreach ($rows as $row) {
+ $id = $row['id'];
+ echo "Migrating Differential comment {$id}...\n";
+ if (!strlen($row['content'])) {
+ echo "Comment has no text, continuing.\n";
+ continue;
+ }
+
+ $revision = id(new DifferentialRevision())->load($row['revisionID']);
+ if (!$revision) {
+ echo "Comment has no valid revision, continuing.\n";
+ continue;
+ }
+
+ $revision_phid = $revision->getPHID();
+
+ $dst_table = 'differential_inline_comment';
+
+ $xaction_phid = PhabricatorPHID::generateNewPHID(
+ PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST,
+ DifferentialPHIDTypeRevision::TYPECONST);
+
+ $comment_phid = PhabricatorPHID::generateNewPHID(
+ PhabricatorPHIDConstants::PHID_TYPE_XCMT,
+ DifferentialPHIDTypeRevision::TYPECONST);
+
+ queryfx(
+ $conn_w,
+ 'INSERT IGNORE INTO %T
+ (phid, transactionPHID, authorPHID, viewPolicy, editPolicy,
+ commentVersion, content, contentSource, isDeleted,
+ dateCreated, dateModified, revisionPHID, changesetID,
+ legacyCommentID)
+ VALUES (%s, %s, %s, %s, %s,
+ %d, %s, %s, %d,
+ %d, %d, %s, %nd,
+ %d)',
+ 'differential_transaction_comment',
+
+ // phid, transactionPHID, authorPHID, viewPolicy, editPolicy
+ $comment_phid,
+ $xaction_phid,
+ $row['authorPHID'],
+ 'public',
+ $row['authorPHID'],
+
+ // commentVersion, content, contentSource, isDeleted
+ 1,
+ $row['content'],
+ $content_source,
+ 0,
+
+ // dateCreated, dateModified, revisionPHID, changesetID, legacyCommentID
+ $row['dateCreated'],
+ $row['dateModified'],
+ $revision_phid,
+ null,
+ $row['id']);
+}
+
+echo "Done.\n";
diff --git a/src/applications/differential/query/DifferentialCommentQuery.php b/src/applications/differential/query/DifferentialCommentQuery.php
--- a/src/applications/differential/query/DifferentialCommentQuery.php
+++ b/src/applications/differential/query/DifferentialCommentQuery.php
@@ -24,7 +24,15 @@
$this->buildWhereClause($conn_r),
$this->buildLimitClause($conn_r));
- return $table->loadAllFromArray($data);
+ $comments = $table->loadAllFromArray($data);
+
+ // We've moved the actual text storage into DifferentialTransactionComment,
+ // so load the relevant pieces of text we need.
+ if ($comments) {
+ $this->loadCommentText($comments);
+ }
+
+ return $comments;
}
private function buildWhereClause(AphrontDatabaseConnection $conn_r) {
@@ -40,4 +48,25 @@
return $this->formatWhereClause($where);
}
+ private function loadCommentText(array $comments) {
+ $table = new DifferentialTransactionComment();
+ $conn_r = $table->establishConnection('r');
+
+ $data = queryfx_all(
+ $conn_r,
+ 'SELECT * FROM %T WHERE legacyCommentID IN (%Ld) AND changesetID IS NULL',
+ $table->getTableName(),
+ mpull($comments, 'getID'));
+ $texts = $table->loadAllFromArray($data);
+ $texts = mpull($texts, null, 'getLegacyCommentID');
+
+ foreach ($comments as $comment) {
+ $text = idx($texts, $comment->getID());
+ if ($text) {
+ $comment->setProxyComment($text);
+ }
+ }
+ }
+
+
}
diff --git a/src/applications/differential/storage/DifferentialComment.php b/src/applications/differential/storage/DifferentialComment.php
--- a/src/applications/differential/storage/DifferentialComment.php
+++ b/src/applications/differential/storage/DifferentialComment.php
@@ -13,14 +13,44 @@
protected $authorPHID;
protected $revisionID;
protected $action;
- protected $content;
+ protected $content = '';
protected $cache;
protected $metadata = array();
protected $contentSource;
private $arbitraryDiffForFacebook;
+ private $proxyComment;
+
+ public function getContent() {
+ return $this->getProxyComment()->getContent();
+ }
+
+ public function setContent($content) {
+ // NOTE: We no longer read this field, but there's no cost to continuing
+ // to write it in case something goes horribly wrong, since it makes it
+ // far easier to back out of this.
+ $this->content = $content;
+ $this->getProxyComment()->setContent($content);
+ return $this;
+ }
+
+ private function getProxyComment() {
+ if (!$this->proxyComment) {
+ $this->proxyComment = new DifferentialTransactionComment();
+ }
+ return $this->proxyComment;
+ }
+
+ public function setProxyComment(DifferentialTransactionComment $proxy) {
+ if ($this->proxyComment) {
+ throw new Exception(pht('You can not overwrite a proxy comment.'));
+ }
+ $this->proxyComment = $proxy;
+ return $this;
+ }
public function setRevision(DifferentialRevision $revision) {
+ $this->getProxyComment()->setRevisionPHID($revision->getPHID());
return $this->setRevisionID($revision->getID());
}
@@ -93,4 +123,31 @@
return (bool)$this->getID();
}
+ public function save() {
+ $this->openTransaction();
+ $result = parent::save();
+
+ $content_source = PhabricatorContentSource::newForSource(
+ PhabricatorContentSource::SOURCE_LEGACY,
+ array());
+
+ $xaction_phid = PhabricatorPHID::generateNewPHID(
+ PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST,
+ DifferentialPHIDTypeRevision::TYPECONST);
+
+ $proxy = $this->getProxyComment();
+ $proxy
+ ->setAuthorPHID($this->getAuthorPHID())
+ ->setViewPolicy('public')
+ ->setEditPolicy($this->getAuthorPHID())
+ ->setContentSource($content_source)
+ ->setCommentVersion(1)
+ ->setLegacyCommentID($this->getID())
+ ->setTransactionPHID($xaction_phid)
+ ->save();
+ $this->saveTransaction();
+
+ return $result;
+ }
+
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Mar 17, 7:54 PM (5 d, 18 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7514714
Default Alt Text
D8196.id18542.diff (6 KB)
Attached To
Mode
D8196: Migrate all Differential comment text into new storage
Attached
Detach File
Event Timeline
Log In to Comment