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();
+ }
}