You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2011/07/29 00:35:57 UTC

svn commit: r1152026 - /subversion/trunk/subversion/libsvn_client/commit.c

Author: stsp
Date: Thu Jul 28 22:35:57 2011
New Revision: 1152026

URL: http://svn.apache.org/viewvc?rev=1152026&view=rev
Log:
Make commit refuse to commit the copied-half of a move independently of
the delete-half.

It is still possible to commit the delete-half independently of the
copied-half. That will be fixed soon.

This is the first visible behaviour change for moves.
None of our existing tests trigger the new error condition so writing
new tests wouldn't be a bad idea. I'll add some if nobody beats me to it.

* subversion/libsvn_client/commit.c
  (svn_client_commit5): Raise an error if the delete-half corresponding
   to the copied-half of a moved commit target does not appear in the
   commit target list.

Modified:
    subversion/trunk/subversion/libsvn_client/commit.c

Modified: subversion/trunk/subversion/libsvn_client/commit.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit.c?rev=1152026&r1=1152025&r2=1152026&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_client/commit.c (original)
+++ subversion/trunk/subversion/libsvn_client/commit.c Thu Jul 28 22:35:57 2011
@@ -1356,6 +1356,47 @@ svn_client_commit5(const apr_array_heade
       goto cleanup;
   }
 
+  /* For every target that was moved verify that both halves of the
+   * move are part of the commit. */
+  for (i = 0; i < commit_items->nelts; i++)
+    {
+      svn_client_commit_item3_t *item =
+        APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
+
+      svn_pool_clear(iterpool);
+
+      if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
+        {
+          const char *moved_from_abspath;
+          const char *delete_op_root_abspath;
+
+          cmt_err = svn_error_trace(svn_wc__node_was_moved_here(
+                                      &moved_from_abspath,
+                                      &delete_op_root_abspath,
+                                      ctx->wc_ctx, item->path,
+                                      iterpool, iterpool));
+          if (cmt_err)
+            goto cleanup;
+
+          if (moved_from_abspath && delete_op_root_abspath &&
+              strcmp(moved_from_abspath, delete_op_root_abspath) == 0 &&
+              apr_hash_get(committables->by_path, delete_op_root_abspath,
+                           APR_HASH_KEY_STRING) == NULL)
+            {
+              cmt_err = svn_error_createf(
+                          SVN_ERR_ILLEGAL_TARGET, NULL,
+                          _("Cannot commit '%s' because it was moved from "
+                            "'%s' which is not part of the commit; both "
+                            "sides of the move must be committed together"),
+                          svn_dirent_local_style(item->path, iterpool),
+                          svn_dirent_local_style(delete_op_root_abspath,
+                                                 iterpool));
+              goto cleanup;
+            }
+        }
+      /* ### TODO: check the delete-half, too */
+    }
+
   /* Go get a log message.  If an error occurs, or no log message is
      specified, abort the operation. */
   if (SVN_CLIENT__HAS_LOG_MSG_FUNC(ctx))



Re: svn commit: r1152026 - /subversion/trunk/subversion/libsvn_client/commit.c

Posted by Stefan Sperling <st...@elego.de>.
On Thu, Jul 28, 2011 at 11:06:46PM -0700, Hyrum K Wright wrote:
> On Thu, Jul 28, 2011 at 3:35 PM,  <st...@apache.org> wrote:
> > Author: stsp
> > Date: Thu Jul 28 22:35:57 2011
> > New Revision: 1152026
> >
> > URL: http://svn.apache.org/viewvc?rev=1152026&view=rev
> > Log:
> > Make commit refuse to commit the copied-half of a move independently of
> > the delete-half.
> >
> > It is still possible to commit the delete-half independently of the
> > copied-half. That will be fixed soon.
> >
> > This is the first visible behaviour change for moves.
> > None of our existing tests trigger the new error condition so writing
> > new tests wouldn't be a bad idea. I'll add some if nobody beats me to it.
> 
> See r1152115.

Cheers!

Re: svn commit: r1152026 - /subversion/trunk/subversion/libsvn_client/commit.c

Posted by Hyrum K Wright <hy...@wandisco.com>.
On Thu, Jul 28, 2011 at 3:35 PM,  <st...@apache.org> wrote:
> Author: stsp
> Date: Thu Jul 28 22:35:57 2011
> New Revision: 1152026
>
> URL: http://svn.apache.org/viewvc?rev=1152026&view=rev
> Log:
> Make commit refuse to commit the copied-half of a move independently of
> the delete-half.
>
> It is still possible to commit the delete-half independently of the
> copied-half. That will be fixed soon.
>
> This is the first visible behaviour change for moves.
> None of our existing tests trigger the new error condition so writing
> new tests wouldn't be a bad idea. I'll add some if nobody beats me to it.

See r1152115.

-Hyrum

>
> * subversion/libsvn_client/commit.c
>  (svn_client_commit5): Raise an error if the delete-half corresponding
>   to the copied-half of a moved commit target does not appear in the
>   commit target list.
>
> Modified:
>    subversion/trunk/subversion/libsvn_client/commit.c
>
> Modified: subversion/trunk/subversion/libsvn_client/commit.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit.c?rev=1152026&r1=1152025&r2=1152026&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_client/commit.c (original)
> +++ subversion/trunk/subversion/libsvn_client/commit.c Thu Jul 28 22:35:57 2011
> @@ -1356,6 +1356,47 @@ svn_client_commit5(const apr_array_heade
>       goto cleanup;
>   }
>
> +  /* For every target that was moved verify that both halves of the
> +   * move are part of the commit. */
> +  for (i = 0; i < commit_items->nelts; i++)
> +    {
> +      svn_client_commit_item3_t *item =
> +        APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
> +
> +      svn_pool_clear(iterpool);
> +
> +      if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
> +        {
> +          const char *moved_from_abspath;
> +          const char *delete_op_root_abspath;
> +
> +          cmt_err = svn_error_trace(svn_wc__node_was_moved_here(
> +                                      &moved_from_abspath,
> +                                      &delete_op_root_abspath,
> +                                      ctx->wc_ctx, item->path,
> +                                      iterpool, iterpool));
> +          if (cmt_err)
> +            goto cleanup;
> +
> +          if (moved_from_abspath && delete_op_root_abspath &&
> +              strcmp(moved_from_abspath, delete_op_root_abspath) == 0 &&
> +              apr_hash_get(committables->by_path, delete_op_root_abspath,
> +                           APR_HASH_KEY_STRING) == NULL)
> +            {
> +              cmt_err = svn_error_createf(
> +                          SVN_ERR_ILLEGAL_TARGET, NULL,
> +                          _("Cannot commit '%s' because it was moved from "
> +                            "'%s' which is not part of the commit; both "
> +                            "sides of the move must be committed together"),
> +                          svn_dirent_local_style(item->path, iterpool),
> +                          svn_dirent_local_style(delete_op_root_abspath,
> +                                                 iterpool));
> +              goto cleanup;
> +            }
> +        }
> +      /* ### TODO: check the delete-half, too */
> +    }
> +
>   /* Go get a log message.  If an error occurs, or no log message is
>      specified, abort the operation. */
>   if (SVN_CLIENT__HAS_LOG_MSG_FUNC(ctx))
>
>
>



-- 

uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com/

Re: svn commit: r1152026 - /subversion/trunk/subversion/libsvn_client/commit.c

Posted by Hyrum K Wright <hy...@wandisco.com>.
On Thu, Jul 28, 2011 at 3:35 PM,  <st...@apache.org> wrote:
> Author: stsp
> Date: Thu Jul 28 22:35:57 2011
> New Revision: 1152026
>
> URL: http://svn.apache.org/viewvc?rev=1152026&view=rev
> Log:
> Make commit refuse to commit the copied-half of a move independently of
> the delete-half.
>
> It is still possible to commit the delete-half independently of the
> copied-half. That will be fixed soon.
>
> This is the first visible behaviour change for moves.
> None of our existing tests trigger the new error condition so writing
> new tests wouldn't be a bad idea. I'll add some if nobody beats me to it.

See r1152115.

-Hyrum

>
> * subversion/libsvn_client/commit.c
>  (svn_client_commit5): Raise an error if the delete-half corresponding
>   to the copied-half of a moved commit target does not appear in the
>   commit target list.
>
> Modified:
>    subversion/trunk/subversion/libsvn_client/commit.c
>
> Modified: subversion/trunk/subversion/libsvn_client/commit.c
> URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_client/commit.c?rev=1152026&r1=1152025&r2=1152026&view=diff
> ==============================================================================
> --- subversion/trunk/subversion/libsvn_client/commit.c (original)
> +++ subversion/trunk/subversion/libsvn_client/commit.c Thu Jul 28 22:35:57 2011
> @@ -1356,6 +1356,47 @@ svn_client_commit5(const apr_array_heade
>       goto cleanup;
>   }
>
> +  /* For every target that was moved verify that both halves of the
> +   * move are part of the commit. */
> +  for (i = 0; i < commit_items->nelts; i++)
> +    {
> +      svn_client_commit_item3_t *item =
> +        APR_ARRAY_IDX(commit_items, i, svn_client_commit_item3_t *);
> +
> +      svn_pool_clear(iterpool);
> +
> +      if (item->state_flags & SVN_CLIENT_COMMIT_ITEM_IS_COPY)
> +        {
> +          const char *moved_from_abspath;
> +          const char *delete_op_root_abspath;
> +
> +          cmt_err = svn_error_trace(svn_wc__node_was_moved_here(
> +                                      &moved_from_abspath,
> +                                      &delete_op_root_abspath,
> +                                      ctx->wc_ctx, item->path,
> +                                      iterpool, iterpool));
> +          if (cmt_err)
> +            goto cleanup;
> +
> +          if (moved_from_abspath && delete_op_root_abspath &&
> +              strcmp(moved_from_abspath, delete_op_root_abspath) == 0 &&
> +              apr_hash_get(committables->by_path, delete_op_root_abspath,
> +                           APR_HASH_KEY_STRING) == NULL)
> +            {
> +              cmt_err = svn_error_createf(
> +                          SVN_ERR_ILLEGAL_TARGET, NULL,
> +                          _("Cannot commit '%s' because it was moved from "
> +                            "'%s' which is not part of the commit; both "
> +                            "sides of the move must be committed together"),
> +                          svn_dirent_local_style(item->path, iterpool),
> +                          svn_dirent_local_style(delete_op_root_abspath,
> +                                                 iterpool));
> +              goto cleanup;
> +            }
> +        }
> +      /* ### TODO: check the delete-half, too */
> +    }
> +
>   /* Go get a log message.  If an error occurs, or no log message is
>      specified, abort the operation. */
>   if (SVN_CLIENT__HAS_LOG_MSG_FUNC(ctx))
>
>
>



-- 

uberSVN: Apache Subversion Made Easy
http://www.uberSVN.com/