From 1f2cf78c1b5408483d91ce1b3e30cf1013b3a4c6 Mon Sep 17 00:00:00 2001 From: vrana Date: Thu, 19 Apr 2012 00:17:58 -0700 Subject: [PATCH] Display committed date in Revision Status field Summary: This is slightly more complicated for this reason: - We don't set `dateCommitted` for normal commits, only for markcommitted. -- We need to add this date to old revisions now. Test Plan: Reparse a revision - commit date was set. Conduit `markcommitted` - commit date was set. Run SQL script. Display closed revision. Reviewers: epriestley Reviewed By: epriestley CC: aran, Koolvin Differential Revision: https://secure.phabricator.com/D2282 --- resources/sql/patches/135.datecommitted.sql | 7 +++++++ .../ConduitAPI_differential_markcommitted_Method.php | 4 ---- .../DifferentialRevisionViewController.php | 2 ++ .../editor/comment/DifferentialCommentEditor.php | 4 ++++ .../DifferentialRevisionStatusFieldSpecification.php | 12 +++++++++--- .../field/specification/revisionstatus/__init__.php | 1 + ...habricatorRepositoryCommitMessageParserWorker.php | 10 ++++++++++ ...ricatorRepositorySvnCommitMessageParserWorker.php | 3 +++ 8 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 resources/sql/patches/135.datecommitted.sql diff --git a/resources/sql/patches/135.datecommitted.sql b/resources/sql/patches/135.datecommitted.sql new file mode 100644 index 0000000000..44659d3c6a --- /dev/null +++ b/resources/sql/patches/135.datecommitted.sql @@ -0,0 +1,7 @@ +UPDATE phabricator_differential.differential_revision SET + dateCommitted = ( + SELECT MIN(dateCreated) + FROM phabricator_differential.differential_comment + WHERE revisionID = differential_revision.id AND action = 'commit' + ) + WHERE status = 3 AND dateCommitted IS NULL; diff --git a/src/applications/conduit/method/differential/markcommitted/ConduitAPI_differential_markcommitted_Method.php b/src/applications/conduit/method/differential/markcommitted/ConduitAPI_differential_markcommitted_Method.php index 186a2e9c6a..bdbe365bd3 100644 --- a/src/applications/conduit/method/differential/markcommitted/ConduitAPI_differential_markcommitted_Method.php +++ b/src/applications/conduit/method/differential/markcommitted/ConduitAPI_differential_markcommitted_Method.php @@ -68,10 +68,6 @@ final class ConduitAPI_differential_markcommitted_Method DifferentialAction::ACTION_COMMIT); $editor->save(); - $revision->setStatus(ArcanistDifferentialRevisionStatus::COMMITTED); - $revision->setDateCommitted(time()); - $revision->save(); - return; } diff --git a/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php b/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php index f7b3361f05..c23cbd4c58 100644 --- a/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php +++ b/src/applications/differential/controller/revisionview/DifferentialRevisionViewController.php @@ -649,6 +649,8 @@ final class DifferentialRevisionViewController extends DifferentialController { foreach ($aux_fields as $key => $aux_field) { if (!$aux_field->shouldAppearOnRevisionView()) { unset($aux_fields[$key]); + } else { + $aux_field->setUser($this->getRequest()->getUser()); } } diff --git a/src/applications/differential/editor/comment/DifferentialCommentEditor.php b/src/applications/differential/editor/comment/DifferentialCommentEditor.php index 65a3ffc757..93f9b8f8f1 100644 --- a/src/applications/differential/editor/comment/DifferentialCommentEditor.php +++ b/src/applications/differential/editor/comment/DifferentialCommentEditor.php @@ -352,6 +352,10 @@ final class DifferentialCommentEditor { } } + if (!$revision->getDateCommitted()) { + $revision->setDateCommitted(time()); + } + $revision ->setStatus(ArcanistDifferentialRevisionStatus::COMMITTED); break; diff --git a/src/applications/differential/field/specification/revisionstatus/DifferentialRevisionStatusFieldSpecification.php b/src/applications/differential/field/specification/revisionstatus/DifferentialRevisionStatusFieldSpecification.php index 09c444490f..dbd1e6c5b6 100644 --- a/src/applications/differential/field/specification/revisionstatus/DifferentialRevisionStatusFieldSpecification.php +++ b/src/applications/differential/field/specification/revisionstatus/DifferentialRevisionStatusFieldSpecification.php @@ -32,7 +32,8 @@ final class DifferentialRevisionStatusFieldSpecification $diff = $this->getDiff(); $status = $revision->getStatus(); - $next_step = null; + $info = null; + if ($status == ArcanistDifferentialRevisionStatus::ACCEPTED) { switch ($diff->getSourceControlSystem()) { case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: @@ -46,12 +47,17 @@ final class DifferentialRevisionStatusFieldSpecification break; } if ($next_step) { - $next_step = ' · Next step: '.$next_step; + $info = ' · Next step: '.$next_step; } + + } else if ($status == ArcanistDifferentialRevisionStatus::CLOSED) { + $committed = $revision->getDateCommitted(); + $info = ' ('.phabricator_datetime($committed, $this->getUser()).')'; } + $status = ArcanistDifferentialRevisionStatus::getNameForRevisionStatus($status); - return ''.$status.''.$next_step; + return ''.$status.''.$info; } public function shouldAppearOnRevisionList() { diff --git a/src/applications/differential/field/specification/revisionstatus/__init__.php b/src/applications/differential/field/specification/revisionstatus/__init__.php index 6988d05d84..9b4e76b064 100644 --- a/src/applications/differential/field/specification/revisionstatus/__init__.php +++ b/src/applications/differential/field/specification/revisionstatus/__init__.php @@ -10,6 +10,7 @@ phutil_require_module('arcanist', 'differential/constants/revisionstatus'); phutil_require_module('phabricator', 'applications/differential/field/specification/base'); phutil_require_module('phabricator', 'applications/repository/constants/repositorytype'); +phutil_require_module('phabricator', 'view/utils'); phutil_require_source('DifferentialRevisionStatusFieldSpecification.php'); diff --git a/src/applications/repository/worker/commitmessageparser/base/PhabricatorRepositoryCommitMessageParserWorker.php b/src/applications/repository/worker/commitmessageparser/base/PhabricatorRepositoryCommitMessageParserWorker.php index cc1dbda6bc..1e3a5150ca 100644 --- a/src/applications/repository/worker/commitmessageparser/base/PhabricatorRepositoryCommitMessageParserWorker.php +++ b/src/applications/repository/worker/commitmessageparser/base/PhabricatorRepositoryCommitMessageParserWorker.php @@ -95,6 +95,12 @@ abstract class PhabricatorRepositoryCommitMessageParserWorker if ($revision->getStatus() != ArcanistDifferentialRevisionStatus::COMMITTED) { + + $date_committed = $this->getDateCommitted($commit); + if ($date_committed) { + $revision->setDateCommitted($date_committed); + } + $message = null; $committer = $data->getCommitDetail('authorPHID'); if (!$committer) { @@ -112,6 +118,10 @@ abstract class PhabricatorRepositoryCommitMessageParserWorker } } + protected function getDateCommitted(PhabricatorRepositoryCommit $commit) { + return null; + } + /** * When querying for revisions by hash, more than one revision may be found. * This function identifies the "best" revision from such a set. Typically, diff --git a/src/applications/repository/worker/commitmessageparser/svn/PhabricatorRepositorySvnCommitMessageParserWorker.php b/src/applications/repository/worker/commitmessageparser/svn/PhabricatorRepositorySvnCommitMessageParserWorker.php index 0a16138e33..bd295c0f79 100644 --- a/src/applications/repository/worker/commitmessageparser/svn/PhabricatorRepositorySvnCommitMessageParserWorker.php +++ b/src/applications/repository/worker/commitmessageparser/svn/PhabricatorRepositorySvnCommitMessageParserWorker.php @@ -54,5 +54,8 @@ final class PhabricatorRepositorySvnCommitMessageParserWorker return array(); } + protected function getDateCommitted(PhabricatorRepositoryCommit $commit) { + return $commit->getEpoch(); + } }