commit ac17dee6aa16fa9622d5334bbede64e19ee242be
Author: Randy Fay <randy@randyfay.com>
Date:   Mon Jun 20 21:29:33 2016 -0600

    Issue #2746069: Add pager to revisions listing

diff --git a/config/install/diff.settings.yml b/config/install/diff.settings.yml
index 467dcab..6268a1c 100644
--- a/config/install/diff.settings.yml
+++ b/config/install/diff.settings.yml
@@ -3,6 +3,7 @@ general_settings:
   radio_behavior: simple
   context_lines_leading: 1
   context_lines_trailing: 1
+  revision_pager_limit: 50
 entity:
   node:
     nid: 0
diff --git a/diff.install b/diff.install
new file mode 100644
index 0000000..2e12160
--- /dev/null
+++ b/diff.install
@@ -0,0 +1,13 @@
+<?php
+/**
+ * @file hook_update_N() and related functions
+ */
+/**
+ * Update diff.settings to include revision_pager_limit
+ */
+function diff_update_8001() {
+  $config_factory = \Drupal::configFactory();
+  $config = $config_factory->getEditable('diff.settings');
+  $config->set('revision_pager_limit', 50);
+  $config->save(TRUE);
+}
diff --git a/src/Form/RevisionOverviewForm.php b/src/Form/RevisionOverviewForm.php
index 95309d0..a6f3972 100755
--- a/src/Form/RevisionOverviewForm.php
+++ b/src/Form/RevisionOverviewForm.php
@@ -122,7 +122,15 @@ class RevisionOverviewForm extends FormBase {
     $has_translations = (count($languages) > 1);
     $node_storage = $this->entityManager->getStorage('node');
     $type = $node->getType();
-    $vids = array_reverse($node_storage->revisionIds($node));
+
+    $pagerLimit = \Drupal::config('diff.settings')->get('revision_pager_limit');
+
+    $query = \Drupal::entityQuery('node')
+      ->condition('nid', $node->id())
+      ->pager($pagerLimit)
+      ->allRevisions();
+    $vids = $query->execute();
+
     $revision_count = count($vids);
 
     $build['#title'] = $has_translations ? $this->t('@langname revisions for %title', ['@langname' => $langname, '%title' => $node->label()]) : $this->t('Revisions for %title', ['%title' => $node->label()]);
@@ -163,10 +171,12 @@ class RevisionOverviewForm extends FormBase {
     $build['node_revisions_table']['#attached']['library'][] = 'diff/diff.general';
     $build['node_revisions_table']['#attached']['drupalSettings']['diffRevisionRadios'] = $this->config->get('general_settings.radio_behavior');
 
-    $latest_revision = TRUE;
+    // Start with the assumption of "latest revision" only if on first page
+    $page = \Drupal::request()->query->get('page');
+    $latest_revision = empty($page);
 
     // Add rows to the table.
-    foreach ($vids as $vid) {
+    foreach (array_keys($vids) as $vid) {
       if ($revision = $node_storage->loadRevision($vid)) {
         if ($revision->hasTranslation($langcode) && $revision->getTranslation($langcode)->isRevisionTranslationAffected()) {
           $username = array(
@@ -297,6 +307,9 @@ class RevisionOverviewForm extends FormBase {
         ),
       );
     }
+    $build['pager'] = array(
+      '#type' => 'pager',
+    );
 
     return $build;
   }
