You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@subversion.apache.org by HuiHuang <ye...@yahoo.com.cn> on 2009/08/12 15:08:51 UTC

[PATCH]Make loggy_path able to deal with absolute path

Log:
[[[
Make loggy_path able to deal with absolute path and tweak the callers..

* subversion/libsvn_wc/log.c
  (loggy_path): Add two arguments loggy_path and pool, and make it 
  able to deal with absolute paths.

* trunk/subversion/libsvn_wc/log.h
   Tweak the comment at the top of the file.
]]]

Modified:
   trunk/subversion/libsvn_wc/log.h
   trunk/subversion/libsvn_wc/log.c



Index: subversion/libsvn_wc/log.c
===================================================================
--- subversion/libsvn_wc/log.c	(版本 38693)
+++ subversion/libsvn_wc/log.c	(工作副本)
@@ -1727,17 +1727,24 @@
 /* Return the portion of PATH that is relative to the working copy directory
  * to which ADM_ACCESS belongs, or SVN_WC_ENTRY_THIS_DIR if PATH is that
  * directory. PATH must not be outside that directory. */
-static const char *
-loggy_path(const char *path,
-           svn_wc_adm_access_t *adm_access)
+static svn_error_t *
+loggy_path(const char **loggy_path,
+           const char *path,
+           svn_wc_adm_access_t *adm_access, 
+           apr_pool_t *pool)
 {
+  const char *adm_abspath;
+  const char *abspath;
   const char *adm_path = svn_wc_adm_access_path(adm_access);
-  const char *local_path = svn_dirent_is_child(adm_path, path, NULL);
 
-  if (! local_path && strcmp(path, adm_path) == 0)
-    local_path = SVN_WC_ENTRY_THIS_DIR;
+  SVN_ERR(svn_dirent_get_absolute(&adm_abspath, adm_path, pool));
+  SVN_ERR(svn_dirent_get_absolute(&abspath, path, pool));
+  *loggy_path = svn_dirent_is_child(adm_abspath, abspath, NULL);
 
-  return local_path;
+  if (! (*loggy_path) && strcmp(abspath, adm_abspath) == 0)
+    *loggy_path = SVN_WC_ENTRY_THIS_DIR;
+
+  return SVN_NO_ERROR;
 }
 
 svn_error_t *
@@ -1746,14 +1753,15 @@
                      const char *src, const char *dst,
                      apr_pool_t *pool)
 {
-  svn_xml_make_open_tag(log_accum,
-                        pool,
-                        svn_xml_self_closing,
-                        SVN_WC__LOG_APPEND,
-                        SVN_WC__LOG_ATTR_NAME,
-                        loggy_path(src, adm_access),
-                        SVN_WC__LOG_ATTR_DEST,
-                        loggy_path(dst, adm_access),
+  const char *loggy_path1;
+  const char *loggy_path2;
+
+  SVN_ERR(loggy_path(&loggy_path1, src, adm_access, pool));
+  SVN_ERR(loggy_path(&loggy_path2, dst, adm_access, pool));
+  svn_xml_make_open_tag(log_accum, pool,
+                        svn_xml_self_closing, SVN_WC__LOG_APPEND,
+                        SVN_WC__LOG_ATTR_NAME, loggy_path1,
+                        SVN_WC__LOG_ATTR_DEST, loggy_path2,
                         NULL);
 
   return SVN_NO_ERROR;
@@ -1766,9 +1774,12 @@
                         const char *path, svn_revnum_t revnum,
                         apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum, pool, svn_xml_self_closing,
                         SVN_WC__LOG_COMMITTED,
-                        SVN_WC__LOG_ATTR_NAME, loggy_path(path, adm_access),
+                        SVN_WC__LOG_ATTR_NAME, loggy_path1,
                         SVN_WC__LOG_ATTR_REVISION,
                         apr_psprintf(pool, "%ld", revnum),
                         NULL);
@@ -1782,10 +1793,13 @@
                    const char *src_path, const char *dst_path,
                    apr_pool_t *pool)
 {
+  const char *loggy_path1;
+  const char *loggy_path2;
+  
+  SVN_ERR(loggy_path(&loggy_path1, src_path, adm_access, pool));
+  SVN_ERR(loggy_path(&loggy_path2, dst_path, adm_access, pool));
   return loggy_move_copy_internal(log_accum, FALSE, adm_access,
-                                  loggy_path(src_path, adm_access),
-                                  loggy_path(dst_path, adm_access),
-                                  pool);
+                                  loggy_path1, loggy_path2, pool);
 }
 
 svn_error_t *
@@ -1796,12 +1810,19 @@
                               const char *versioned,
                               apr_pool_t *pool)
 {
+  const char *loggy_path1;
+  const char *loggy_path2;
+  const char *loggy_path3;
+
+  SVN_ERR(loggy_path(&loggy_path1, src, adm_access, pool));
+  SVN_ERR(loggy_path(&loggy_path2, dst, adm_access, pool));
+  SVN_ERR(loggy_path(&loggy_path3, versioned, adm_access, pool));
   svn_xml_make_open_tag
     (log_accum, pool, svn_xml_self_closing,
      SVN_WC__LOG_CP_AND_TRANSLATE,
-     SVN_WC__LOG_ATTR_NAME, loggy_path(src, adm_access),
-     SVN_WC__LOG_ATTR_DEST, loggy_path(dst, adm_access),
-     SVN_WC__LOG_ATTR_ARG_2, loggy_path(versioned, adm_access),
+     SVN_WC__LOG_ATTR_NAME, loggy_path1,
+     SVN_WC__LOG_ATTR_DEST, loggy_path2,
+     SVN_WC__LOG_ATTR_ARG_2, loggy_path3,
      NULL);
 
   return SVN_NO_ERROR;
@@ -1813,9 +1834,12 @@
                            const char *path,
                            apr_pool_t *pool)
 {
+  const char * loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum, pool, svn_xml_self_closing,
                         SVN_WC__LOG_DELETE_ENTRY,
-                        SVN_WC__LOG_ATTR_NAME, loggy_path(path, adm_access),
+                        SVN_WC__LOG_ATTR_NAME, loggy_path1,
                         NULL);
 
   return SVN_NO_ERROR;
@@ -1827,9 +1851,12 @@
                           const char *path,
                           apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum, pool, svn_xml_self_closing,
                         SVN_WC__LOG_DELETE_LOCK,
-                        SVN_WC__LOG_ATTR_NAME, loggy_path(path, adm_access),
+                        SVN_WC__LOG_ATTR_NAME, loggy_path1,
                         NULL);
 
   return SVN_NO_ERROR;
@@ -1841,9 +1868,12 @@
                                 const char *path,
                                 apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum, pool, svn_xml_self_closing,
                         SVN_WC__LOG_DELETE_CHANGELIST,
-                        SVN_WC__LOG_ATTR_NAME, loggy_path(path, adm_access),
+                        SVN_WC__LOG_ATTR_NAME, loggy_path1,
                         NULL);
 
   return SVN_NO_ERROR;
@@ -1857,6 +1887,7 @@
                            apr_uint64_t modify_flags,
                            apr_pool_t *pool)
 {
+  const char *loggy_path1;
   apr_hash_t *prop_hash = apr_hash_make(pool);
   static const char *kind_str[] =
     { "none",
@@ -1987,8 +2018,9 @@
   if (apr_hash_count(prop_hash) == 0)
     return SVN_NO_ERROR;
 
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   apr_hash_set(prop_hash, SVN_WC__LOG_ATTR_NAME,
-               APR_HASH_KEY_STRING, loggy_path(path, adm_access));
+               APR_HASH_KEY_STRING, loggy_path1);
 
   svn_xml_make_open_tag_hash(log_accum, pool,
                              svn_xml_self_closing,
@@ -2007,14 +2039,14 @@
                             const char *propval,
                             apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum, pool, svn_xml_self_closing,
                         SVN_WC__LOG_MODIFY_WCPROP,
-                        SVN_WC__LOG_ATTR_NAME,
-                        loggy_path(path, adm_access),
-                        SVN_WC__LOG_ATTR_PROPNAME,
-                        propname,
-                        SVN_WC__LOG_ATTR_PROPVAL,
-                        propval,
+                        SVN_WC__LOG_ATTR_NAME, loggy_path1,
+                        SVN_WC__LOG_ATTR_PROPNAME, propname,
+                        SVN_WC__LOG_ATTR_PROPVAL, propval,
                         NULL);
 
   return SVN_NO_ERROR;
@@ -2026,10 +2058,13 @@
                    const char *src_path, const char *dst_path,
                    apr_pool_t *pool)
 {
+  const char *loggy_path1;
+  const char *loggy_path2;
+
+  SVN_ERR(loggy_path(&loggy_path1, src_path, adm_access, pool));
+  SVN_ERR(loggy_path(&loggy_path2, dst_path, adm_access, pool));
   return loggy_move_copy_internal(log_accum, TRUE, adm_access,
-                                  loggy_path(src_path, adm_access),
-                                  loggy_path(dst_path, adm_access),
-                                  pool);
+                                  loggy_path1, loggy_path2, pool);
 }
 
 svn_error_t *
@@ -2038,11 +2073,14 @@
                                    const char *path,
                                    apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum,
                         pool,
                         svn_xml_self_closing,
                         SVN_WC__LOG_MAYBE_EXECUTABLE,
-                        SVN_WC__LOG_ATTR_NAME, loggy_path(path, adm_access),
+                        SVN_WC__LOG_ATTR_NAME, loggy_path1,
                         NULL);
 
   return SVN_NO_ERROR;
@@ -2054,12 +2092,15 @@
                                  const char *path,
                                  apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum,
                         pool,
                         svn_xml_self_closing,
                         SVN_WC__LOG_MAYBE_READONLY,
                         SVN_WC__LOG_ATTR_NAME,
-                        loggy_path(path, adm_access),
+                        loggy_path1,
                         NULL);
 
   return SVN_NO_ERROR;
@@ -2071,12 +2112,15 @@
                                           const char *path,
                                           apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum,
                         pool,
                         svn_xml_self_closing,
                         SVN_WC__LOG_MODIFY_ENTRY,
                         SVN_WC__LOG_ATTR_NAME,
-                        loggy_path(path, adm_access),
+                        loggy_path1,
                         SVN_WC__ENTRY_ATTR_TEXT_TIME,
                         SVN_WC__TIMESTAMP_WC,
                         NULL);
@@ -2090,12 +2134,15 @@
                                                 const char *path,
                                                 apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum,
                         pool,
                         svn_xml_self_closing,
                         SVN_WC__LOG_MODIFY_ENTRY,
                         SVN_WC__LOG_ATTR_NAME,
-                        loggy_path(path, adm_access),
+                        loggy_path1,
                         SVN_WC__ENTRY_ATTR_WORKING_SIZE,
                         SVN_WC__WORKING_SIZE_WC,
                         NULL);
@@ -2109,12 +2156,15 @@
                            const char *path,
                            apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum,
                         pool,
                         svn_xml_self_closing,
                         SVN_WC__LOG_READONLY,
                         SVN_WC__LOG_ATTR_NAME,
-                        loggy_path(path, adm_access),
+                        loggy_path1,
                         NULL);
 
   return SVN_NO_ERROR;
@@ -2127,12 +2177,15 @@
                             const char *timestr,
                             apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   svn_xml_make_open_tag(log_accum,
                         pool,
                         svn_xml_self_closing,
                         SVN_WC__LOG_SET_TIMESTAMP,
                         SVN_WC__LOG_ATTR_NAME,
-                        loggy_path(path, adm_access),
+                        loggy_path1,
                         SVN_WC__LOG_ATTR_TIMESTAMP,
                         timestr,
                         NULL);
@@ -2146,13 +2199,16 @@
                      const char *path,
                      apr_pool_t *pool)
 {
+  const char *loggy_path1;
+
+  SVN_ERR(loggy_path(&loggy_path1, path, adm_access, pool));
   /* No need to check whether BASE_NAME exists: ENOENT is ignored
      by the log-runner */
   svn_xml_make_open_tag(log_accum, pool,
                         svn_xml_self_closing,
                         SVN_WC__LOG_RM,
                         SVN_WC__LOG_ATTR_NAME,
-                        loggy_path(path, adm_access),
+                        loggy_path1,
                         NULL);
 
   return SVN_NO_ERROR;
Index: subversion/libsvn_wc/log.h
===================================================================
--- subversion/libsvn_wc/log.h	(版本 38693)
+++ subversion/libsvn_wc/log.h	(工作副本)
@@ -47,8 +47,8 @@
  */
 
 /* The svn_wc__loggy_* functions in this section take path arguments
-   with the same base as with which the adm_access was opened.
-
+   with the same base as with which the adm_access was opened except
+   that loggy_path function can take absolute path as argument.
 */
 
 /* Extend **LOG_ACCUM with log instructions to append the contents
 				

Best
Huihuang
--------------
yellow.flying
2009-08-12
��i��'�ē扫h∈&

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2382921

Re: [PATCH]Make loggy_path able to deal with absolute path

Posted by Julian Foad <ju...@btopenworld.com>.
On Wed, 2009-08-12, yellow.flying wrote:
> Log:
> [[[
> Make loggy_path able to deal with absolute path and tweak the callers..
> 
> * subversion/libsvn_wc/log.c
>   (loggy_path): Add two arguments loggy_path and pool, and make it 
>   able to deal with absolute paths.
> 
> * trunk/subversion/libsvn_wc/log.h
>    Tweak the comment at the top of the file.
> ]]]

Excellent. I re-wrote the log message and the comment in log.h, and
committed this in r38697.

Thanks.
- Julian

------------------------------------------------------
http://subversion.tigris.org/ds/viewMessage.do?dsForumId=462&dsMessageId=2382955