Index: wp-admin/revision.php
===================================================================
--- wp-admin/revision.php	(revision 23348)
+++ wp-admin/revision.php	(working copy)
@@ -28,8 +28,11 @@
 	if ( !$post = get_post( $revision->post_parent ) )
 		break;
 
+	// Revision context to aid wp_post_revisions filter
+	$context = 'admin-' . $action;
+
 	// Revisions disabled and we're not looking at an autosave
-	if ( ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') ) && !wp_is_post_autosave( $revision ) ) {
+	if ( ( ! apply_filters( 'wp_post_revisions', WP_POST_REVISIONS, compact( 'context', 'post', 'revision' ) ) || !post_type_supports($post->post_type, 'revisions') ) && !wp_is_post_autosave( $revision ) ) {
 		$redirect = 'edit.php?post_type=' . $post->post_type;
 		break;
 	}
@@ -70,7 +73,10 @@
 	else
 		break; // Don't diff two unrelated revisions
 
-	if ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') ) { // Revisions disabled
+	// Revision context to aid wp_post_revisions filter
+	$context = 'admin-' . $action;
+
+	if ( ! apply_filters( 'wp_post_revisions', WP_POST_REVISIONS, compact( 'context', 'post', 'left_revision', 'right_revision' ) ) || !post_type_supports($post->post_type, 'revisions') ) { // Revisions disabled
 		if (
 			// we're not looking at an autosave
 			( !wp_is_post_autosave( $left_revision ) && !wp_is_post_autosave( $right_revision ) )
@@ -111,8 +117,11 @@
 	if ( !current_user_can( 'read_post', $revision->ID ) || !current_user_can( 'read_post', $post->ID ) )
 		break;
 
+	// Revision context to aid wp_post_revisions filter
+	$context = 'admin-' . $action;
+
 	// Revisions disabled and we're not looking at an autosave
-	if ( ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') ) && !wp_is_post_autosave( $revision ) ) {
+	if ( ( ! apply_filters( 'wp_post_revisions', WP_POST_REVISIONS, compact( 'context', 'post', 'revision' ) ) || !post_type_supports($post->post_type, 'revisions') ) && !wp_is_post_autosave( $revision ) ) {
 		$redirect = 'edit.php?post_type=' . $post->post_type;
 		break;
 	}
@@ -209,8 +218,11 @@
 
 <?php
 
+// Revision context to aid wp_post_revisions filter
+$context = 'admin';
+
 $args = array( 'format' => 'form-table', 'parent' => true, 'right' => $right, 'left' => $left );
-if ( ! WP_POST_REVISIONS || !post_type_supports($post->post_type, 'revisions') )
+if ( ! apply_filters( 'wp_post_revisions', WP_POST_REVISIONS, compact( 'context', 'post', 'left', 'right' ) ) || !post_type_supports($post->post_type, 'revisions') )
 	$args['type'] = 'autosave';
 
 wp_list_post_revisions( $post, $args );
Index: wp-includes/class-wp-xmlrpc-server.php
===================================================================
--- wp-includes/class-wp-xmlrpc-server.php	(revision 23348)
+++ wp-includes/class-wp-xmlrpc-server.php	(working copy)
@@ -3535,7 +3535,8 @@
 			return new IXR_Error( 401, __( 'Sorry, you are not allowed to edit posts.' ) );
 
 		// Check if revisions are enabled.
-		if ( ! WP_POST_REVISIONS || ! post_type_supports( $post->post_type, 'revisions' ) )
+		$context = 'xmlrpc-get';
+		if ( ! apply_filters( 'wp_post_revisions', WP_POST_REVISIONS, compact( 'context', 'post', 'blog_id', 'username' ) ) || ! post_type_supports( $post->post_type, 'revisions' ) )
 			return new IXR_Error( 401, __( 'Sorry, revisions are disabled.' ) );
 
 		$revisions = wp_get_post_revisions( $post_id );
@@ -3564,6 +3565,7 @@
 	 *
 	 * @since 3.5.0
 	 *
+	 * @uses apply_filters
 	 * @uses wp_restore_post_revision()
 	 *
 	 * @param array $args Method parameters. Contains:
@@ -3602,7 +3604,8 @@
 			return new IXR_Error( 401, __( 'Sorry, you cannot edit this post.' ) );
 
 		// Check if revisions are disabled.
-		if ( ! WP_POST_REVISIONS || ! post_type_supports( $post->post_type, 'revisions' ) )
+		$context = 'xmlrpc-restore';
+		if ( ! apply_filters( 'wp_post_revisions', WP_POST_REVISIONS, compact( 'context', 'post', 'revision', 'blog_id', 'username' ) ) || ! post_type_supports( $post->post_type, 'revisions' ) )
 			return new IXR_Error( 401, __( 'Sorry, revisions are disabled.' ) );
 
 		$post = wp_restore_post_revision( $revision_id );
Index: wp-includes/post.php
===================================================================
--- wp-includes/post.php	(revision 23348)
+++ wp-includes/post.php	(working copy)
@@ -4932,6 +4932,7 @@
  * @subpackage Post_Revisions
  * @since 2.6.0
  *
+ * @uses apply_filters()
  * @uses _wp_put_post_revision()
  *
  * @param int $post_id The ID of the post to save as a revision.
@@ -4942,8 +4943,12 @@
 	if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
 		return;
 
-	// WP_POST_REVISIONS = 0, false
-	if ( ! WP_POST_REVISIONS )
+	// Revision quantity
+	$context = 'save';
+	$revision_qty = apply_filters( 'wp_post_revisions', WP_POST_REVISIONS, compact( 'context', 'post_id' ) );
+
+	// $revision_qty = 0, false
+	if ( ! $revision_qty )
 		return;
 
 	if ( !$post = get_post( $post_id, ARRAY_A ) )
@@ -4957,15 +4962,15 @@
 
 	$return = _wp_put_post_revision( $post );
 
-	// WP_POST_REVISIONS = true (default), -1
-	if ( !is_numeric( WP_POST_REVISIONS ) || WP_POST_REVISIONS < 0 )
+	// $revision_qty = true (default), -1
+	if ( !is_numeric( $revision_qty ) || $revision_qty < 0 )
 		return $return;
 
 	// all revisions and (possibly) one autosave
 	$revisions = wp_get_post_revisions( $post_id, array( 'order' => 'ASC' ) );
 
-	// WP_POST_REVISIONS = (int) (# of autosaves to save)
-	$delete = count($revisions) - WP_POST_REVISIONS;
+	// $revision_qty = (int) (# of autosaves to save)
+	$delete = count($revisions) - $revision_qty;
 
 	if ( $delete < 1 )
 		return $return;
@@ -5218,14 +5223,19 @@
  * @subpackage Post_Revisions
  * @since 2.6.0
  *
+ * @uses apply_filters()
  * @uses get_children()
  *
  * @param int|object $post_id Post ID or post object
  * @return array empty if no revisions
  */
 function wp_get_post_revisions( $post_id = 0, $args = null ) {
-	if ( ! WP_POST_REVISIONS )
+	$context = 'get';
+	$revision_qty = apply_filters( 'wp_post_revisions', WP_POST_REVISIONS, compact( 'context', 'post_id', 'args' ) );
+
+	if ( ! $revision_qty )
 		return array();
+
 	if ( ( !$post = get_post( $post_id ) ) || empty( $post->ID ) )
 		return array();
 
