Index: subversion/include/svn_path.h
===================================================================
--- subversion/include/svn_path.h	(revision 27293)
+++ subversion/include/svn_path.h	(working copy)
@@ -264,6 +264,14 @@
                       const char *relative,
                       apr_pool_t *pool);
 
+/**
+ */
+svn_error_t *
+svn_path_resolve_relative_url(const char **absolute_url,
+                              const char *relative_url,
+                              const char *repos_root_url,
+                              apr_pool_t *pool);
+
 /** Return the path part of the canonicalized @a path in @a
  * *pdirectory, and the file part in @a *pfile.  If @a path is a
  * directory, set @a *pdirectory to @a path, and @a *pfile to the
@@ -456,6 +464,12 @@
 /** Return true iff @a path looks like a valid absolute URL. */
 svn_boolean_t svn_path_is_url(const char *path);
 
+/** 
+ * Return true iff @a url is a relative URL. Specifically that it starts
+ * with the characters "^/"
+ */
+svn_boolean_t svn_path_is_relative_url(const char *url);
+
 /** Return @c TRUE iff @a path is URI-safe, @c FALSE otherwise. */
 svn_boolean_t svn_path_is_uri_safe(const char *path);
 
Index: subversion/include/svn_wc.h
===================================================================
--- subversion/include/svn_wc.h	(revision 27293)
+++ subversion/include/svn_wc.h	(working copy)
@@ -4564,6 +4564,16 @@
                       apr_pool_t *pool);
 
 
+
+/**
+ */
+svn_error_t *
+svn_wc_get_absolute_url(const char **absolute_url,
+                        const char *relative_url,
+                        const char *wc_path,
+                        apr_pool_t *pool);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
Index: subversion/libsvn_wc/util.c
===================================================================
--- subversion/libsvn_wc/util.c	(revision 27293)
+++ subversion/libsvn_wc/util.c	(working copy)
@@ -289,3 +289,43 @@
 
   return SVN_NO_ERROR;
 }
+
+svn_error_t *
+svn_wc_get_absolute_url(const char **absolute_url,
+                        const char *relative_url,
+                        const char *wc_path,
+                        apr_pool_t *pool)
+{
+    const char *canonicalized_path;
+    const char *repos_root;
+    const svn_wc_entry_t *entry;
+    svn_wc_adm_access_t *adm_access = NULL;
+    svn_error_t *err = SVN_NO_ERROR;
+
+    canonicalized_path = svn_path_canonicalize(wc_path, pool);
+
+    SVN_ERR(svn_wc_adm_probe_open3(&adm_access, NULL, canonicalized_path,
+                                   FALSE, 0, NULL, NULL, pool));
+
+    if ((err = svn_wc__entry_versioned(&entry, canonicalized_path, adm_access,
+                                       FALSE, pool)))
+        goto cleanup;
+
+    repos_root = entry->repos;
+
+    if ((err = svn_path_resolve_relative_url(absolute_url, relative_url,
+                                             repos_root, pool)))
+        goto cleanup;
+                                             
+cleanup:
+    if (adm_access)
+      {
+        svn_error_t *err2 = svn_wc_adm_close(adm_access);
+        if(! err)
+            err = err2;
+        else
+            svn_error_clear(err2);
+      }
+
+    return err;
+}
Index: subversion/libsvn_subr/path.c
===================================================================
--- subversion/libsvn_subr/path.c	(revision 27293)
+++ subversion/libsvn_subr/path.c	(working copy)
@@ -23,6 +23,7 @@
 
 #include <apr_file_info.h>
 #include <apr_lib.h>
+#include <apr_uri.h>
 
 #include "svn_string.h"
 #include "svn_path.h"
@@ -871,6 +872,14 @@
   return skip_uri_scheme(path) ? TRUE : FALSE;
 }
 
+svn_boolean_t
+svn_path_is_relative_url(const char *url)
+{
+    if(0 == strncmp("^/", url, 2))
+        return TRUE;
+    else
+        return FALSE;
+}
 
 
 /* Here is the BNF for path components in a URI. "pchar" is a
@@ -1174,7 +1183,70 @@
   return SVN_NO_ERROR;
 }
 
+svn_error_t *
+svn_path_resolve_relative_url(const char **absolute_url,
+                              const char *relative_url,
+                              const char *repos_root_url,
+                              apr_pool_t *pool)
+{
+    apr_status_t status;
+    const char *canonicalized_url;
+    apr_array_header_t *base_components;
+    apr_array_header_t *relative_components;
+    apr_uri_t parsed_uri;
+    int i;
 
+    canonicalized_url = svn_path_canonicalize(relative_url, pool);
+
+    if(svn_path_is_url(canonicalized_url))
+      {
+         *absolute_url = canonicalized_url;
+         return SVN_NO_ERROR;
+      }
+
+    if(0 == strncmp("^/", relative_url, 2))
+      {
+       status = apr_uri_parse(pool, repos_root_url, &parsed_uri);
+       if (status)
+         return svn_error_createf(SVN_ERR_BAD_URL, 0,
+                                  _("Illegal repository root URL '%s'."),
+                                  repos_root_url);
+
+        base_components = svn_path_decompose(parsed_uri.path,
+                                             pool);
+        relative_components = svn_path_decompose(canonicalized_url + 2,
+                                                 pool);
+      }
+
+    for (i = 0; i < relative_components->nelts; ++i)
+      {
+        const char *component = APR_ARRAY_IDX(relative_components,
+                                              i,
+                                              const char *);
+         if (0 == strcmp("..", component))
+           {
+             /* Constructing the final absolute URL together with
+              * apr_uri_unparse() requires that the path be absolute,
+              * so only pop a component if the component being popped
+              * is not the component for the root directory. */
+             if (base_components->nelts > 1)
+                         apr_array_pop(base_components);
+            }
+          else
+            APR_ARRAY_PUSH(base_components, const char *) = component;
+      }
+
+    parsed_uri.path = (char *)svn_path_compose(base_components,
+                                                       pool);
+    parsed_uri.query = NULL;
+    parsed_uri.fragment = NULL;
+
+    *absolute_url = apr_uri_unparse(pool, &parsed_uri, 0);
+
+    return SVN_NO_ERROR;
+}
+
+
 svn_error_t *
 svn_path_split_if_file(const char *path,
                        const char **pdirectory,
Index: subversion/libsvn_client/info.c
===================================================================
--- subversion/libsvn_client/info.c	(revision 27293)
+++ subversion/libsvn_client/info.c	(working copy)
@@ -356,7 +356,15 @@
   svn_info_t *info;
   svn_error_t *err;
 
-  if ((revision == NULL
+  if (svn_path_is_relative_url(path_or_url))
+    {
+        const char *abs_url;
+        SVN_ERR(svn_wc_get_absolute_url(&abs_url, path_or_url, ".", pool));
+
+        /* Replace the relative URL with an absolute one. */
+        path_or_url = abs_url;
+    }
+  else if ((revision == NULL
        || revision->kind == svn_opt_revision_unspecified)
       && (peg_revision == NULL
           || peg_revision->kind == svn_opt_revision_unspecified))
