Index: subversion/libsvn_subr/opt.c
===================================================================
--- subversion/libsvn_subr/opt.c	(revision 7504)
+++ subversion/libsvn_subr/opt.c	(working copy)
@@ -254,6 +254,8 @@
  *
  *   - For "prev", set REVISION->kind to svn_opt_revision_previous.
  *
+ *   - For "prevn",set REVISION->kind to svn_opt_revision_previous.
+ *
  *   - For "base", set REVISION->kind to svn_opt_revision_base.
  *
  *   - For "committed", set REVISION->kind to svn_opt_revision_committed.
@@ -332,6 +334,18 @@
       if (revision_from_word (revision, str) != 0)
         return NULL;
       *end = save;
+
+      if ((revision->kind == svn_opt_revision_previous)
+        && (apr_isdigit (*end)))
+      {
+        char *num = end;
+        while (apr_isdigit (*end))
+          end++;
+        save = *end;
+        *end = '\0';
+        revision->value.number = SVN_STR_TO_REV(num);
+        *end = save;
+      }
       return end;
     }
   else
Index: subversion/libsvn_client/revisions.c
===================================================================
--- subversion/libsvn_client/revisions.c	(revision 7504)
+++ subversion/libsvn_client/revisions.c	(working copy)
@@ -20,18 +20,36 @@
 
 #include <apr_pools.h>
 
+#include "svn_pools.h"
 #include "svn_error.h"
 #include "svn_string.h"
 #include "svn_ra.h"
+#include "svn_fs.h"
 #include "svn_wc.h"
 #include "svn_client.h"
 #include "svn_path.h"
+#include "svn_repos.h"
 #include "client.h"
 
 
 
 
 
+static svn_error_t *
+get_revisions (void *baton,
+               apr_hash_t *path,
+               svn_revnum_t revision,
+               const char *author,
+               const char *date,
+               const char *message,
+               apr_pool_t *pool)
+{
+  apr_array_header_t *revs_array = baton;
+  APR_ARRAY_PUSH (revs_array, svn_revnum_t) = revision;
+  return SVN_NO_ERROR;
+}
+
+
 svn_error_t *
 svn_client__get_revision_number (svn_revnum_t *revnum,
                                  svn_ra_plugin_t *ra_lib,
@@ -52,7 +70,9 @@
   /* Sanity check. */
   if (((ra_lib == NULL) || (sess == NULL))
       && ((revision->kind == svn_opt_revision_date)
-          || (revision->kind == svn_opt_revision_head)))
+          || (revision->kind == svn_opt_revision_head)
+          || ((revision->kind == svn_opt_revision_previous)
+              && (revision->value.number > 1))))
     {
       return svn_error_create
         (SVN_ERR_CLIENT_RA_ACCESS_REQUIRED, NULL,
@@ -93,8 +113,23 @@
         return svn_error_createf
         (SVN_ERR_UNVERSIONED_RESOURCE, NULL,
          "svn_client__get_revision: '%s' not under revision control", path);
-      
-      if ((revision->kind == svn_opt_revision_base)
+
+      if ((revision->kind == svn_opt_revision_previous)
+           && (revision->value.number > 0))
+        {
+          apr_pool_t *subpool = svn_pool_create (pool);
+          apr_array_header_t *paths = apr_array_make (subpool, 1, sizeof(const char *));
+          apr_array_header_t *revisions = apr_array_make (subpool, 100, sizeof(svn_revnum_t));
+
+          APR_ARRAY_PUSH (paths, const char *) = "";
+          SVN_ERR (ra_lib->get_log (sess, paths, ent->cmt_rev, 1, 0, 0,
+                                    get_revisions, (void *)revisions, subpool));
+
+          *revnum = APR_ARRAY_IDX (revisions, revision->value.number, svn_revnum_t);
+          svn_pool_clear(subpool);
+        }
+
+      else if ((revision->kind == svn_opt_revision_base)
           || (revision->kind == svn_opt_revision_working))
         *revnum = ent->revision;
       else
Index: subversion/clients/cmdline/main.c
===================================================================
--- subversion/clients/cmdline/main.c	(revision 7504)
+++ subversion/clients/cmdline/main.c	(working copy)
@@ -73,7 +73,8 @@
      "                             \"HEAD\"      latest in repository\n"
      "                             \"BASE\"      base revision of item's working copy\n"
      "                             \"COMMITTED\" revision of item's last commit\n"
-     "                             \"PREV\"      revision before item's last commit"
+     "                             \"PREV\"      revision before item's last commit\n"
+     "                             \"PREVx\"     'x' revisions before item's last commit"
      /* spacing corresponds to svn_opt_format_option */
     },
     {"file",          'F', 1, "read data from file ARG"},
