Improve UX for repository updates
Summary: Fixes T5926. Fixes T5830. Ref T4767. Users currently sometimes have a hard time understanding repository update frequencies. This is compounded by aggressive backoff and incorrect backoff while importing repositories. - Don't back off while importing repositories. This prevents us from hanging at 99.99% for inactive repositories while waiting for the next update. - Back off less aggressively in general, and even more gradually during the first 3 days. This should make behavior around weekends better. - Show update frequency in the UI. - Provide an explicit "update now" button to call `diffusion.looksoon` in a more user-friendly way. - Document how backoff policies work and how to adjust behavior. Test Plan: - Ran `bin/phd debug pulllocal` and verified backoff worked correctly from debugging output. - Clicked "Update Now" to get a hint, reloaded page to see it update. - Read documentation. Reviewers: btrahan Reviewed By: btrahan Subscribers: epriestley Maniphest Tasks: T4767, T5830, T5926 Differential Revision: https://secure.phabricator.com/D10323
This commit is contained in:
@@ -207,6 +207,14 @@ final class DiffusionRepositoryEditMainController
|
||||
->setHref($this->getRepositoryControllerURI($repository, 'edit/basic/'));
|
||||
$view->addAction($edit);
|
||||
|
||||
$edit = id(new PhabricatorActionView())
|
||||
->setIcon('fa-refresh')
|
||||
->setName(pht('Update Now'))
|
||||
->setWorkflow(true)
|
||||
->setHref(
|
||||
$this->getRepositoryControllerURI($repository, 'edit/update/'));
|
||||
$view->addAction($edit);
|
||||
|
||||
$activate = id(new PhabricatorActionView())
|
||||
->setHref(
|
||||
$this->getRepositoryControllerURI($repository, 'edit/activate/'))
|
||||
@@ -280,6 +288,10 @@ final class DiffusionRepositoryEditMainController
|
||||
pht('Status'),
|
||||
$this->buildRepositoryStatus($repository));
|
||||
|
||||
$view->addProperty(
|
||||
pht('Update Frequency'),
|
||||
$this->buildRepositoryUpdateInterval($repository));
|
||||
|
||||
$description = $repository->getDetail('description');
|
||||
$view->addSectionHeader(pht('Description'));
|
||||
if (!strlen($description)) {
|
||||
@@ -942,14 +954,16 @@ final class DiffusionRepositoryEditMainController
|
||||
->setNote($message->getParameter('message')));
|
||||
return $view;
|
||||
case PhabricatorRepositoryStatusMessage::CODE_OKAY:
|
||||
$ago = (PhabricatorTime::getNow() - $message->getEpoch());
|
||||
$view->addItem(
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_ACCEPT, 'green')
|
||||
->setTarget(pht('Updates OK'))
|
||||
->setNote(
|
||||
pht(
|
||||
'Last updated %s.',
|
||||
phabricator_datetime($message->getEpoch(), $viewer))));
|
||||
'Last updated %s (%s ago).',
|
||||
phabricator_datetime($message->getEpoch(), $viewer),
|
||||
phutil_format_relative_time_detailed($ago))));
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
@@ -1020,12 +1034,34 @@ final class DiffusionRepositoryEditMainController
|
||||
id(new PHUIStatusItemView())
|
||||
->setIcon(PHUIStatusItemView::ICON_UP, 'indigo')
|
||||
->setTarget(pht('Prioritized'))
|
||||
->setNote(pht('This repository will be updated soon.')));
|
||||
->setNote(pht('This repository will be updated soon!')));
|
||||
}
|
||||
|
||||
return $view;
|
||||
}
|
||||
|
||||
private function buildRepositoryUpdateInterval(
|
||||
PhabricatorRepository $repository) {
|
||||
|
||||
$smart_wait = $repository->loadUpdateInterval();
|
||||
|
||||
$doc_href = PhabricatorEnv::getDoclink(
|
||||
'Diffusion User Guide: Repository Updates');
|
||||
|
||||
return array(
|
||||
phutil_format_relative_time_detailed($smart_wait),
|
||||
" \xC2\xB7 ",
|
||||
phutil_tag(
|
||||
'a',
|
||||
array(
|
||||
'href' => $doc_href,
|
||||
'target' => '_blank',
|
||||
),
|
||||
pht('Learn More')),
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
private function buildMirrorActions(
|
||||
PhabricatorRepository $repository) {
|
||||
|
||||
|
||||
Reference in New Issue
Block a user