Author: stsp Date: Fri Jan 29 16:47:52 2016 New Revision: 1727615 URL: http://svn.apache.org/viewvc?rev=1727615&view=rev Log: Make the 'quit' command at the conflict prompt actually quit right away.
This command worked by side-effect of postponing all remaining conflicts but didn't actually stop the conflict walk. The QUIT flag passed around in the code was never actually read, just written. * subversion/svn/resolve-cmd.c (conflict_status_walker): Check the conflict resolver QUIT flag and cancel the status walk if it is set. (walk_conflicts): Check for SVN_ERR_CANCELLED in combination with QUIT and don't treat this as an error. Don't write messages about being unable to resolve conflicts if the user canceled by hitting Ctrl-C, just exit. Modified: subversion/trunk/subversion/svn/resolve-cmd.c Modified: subversion/trunk/subversion/svn/resolve-cmd.c URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/svn/resolve-cmd.c?rev=1727615&r1=1727614&r2=1727615&view=diff ============================================================================== --- subversion/trunk/subversion/svn/resolve-cmd.c (original) +++ subversion/trunk/subversion/svn/resolve-cmd.c Fri Jan 29 16:47:52 2016 @@ -121,6 +121,10 @@ conflict_status_walker(void *baton, svn_pool_destroy(iterpool); + /* If the has user decided to quit resolution, cancel the status walk. */ + if (*cswb->quit) + return svn_error_create(SVN_ERR_CANCELLED, NULL, NULL); + return SVN_NO_ERROR; } @@ -270,17 +274,31 @@ walk_conflicts(svn_client_ctx_t *ctx, if (iterpool) svn_pool_destroy(iterpool); - if (err && err->apr_err != SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE) - err = svn_error_createf( - SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, err, - _("Unable to resolve conflicts on '%s'"), - svn_dirent_local_style(local_abspath, scratch_pool)); + if (err) + { + if (err->apr_err == SVN_ERR_CANCELLED) + { + /* If QUIT is set, the user has selected the 'q' option at + * the conflict prompt and the status walk was aborted. + * This is not an error condition. */ + if (quit) + { + svn_error_clear(err); + err = SVN_NO_ERROR; + } + } + else if (err->apr_err != SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE) + err = svn_error_createf( + SVN_ERR_WC_CONFLICT_RESOLVER_FAILURE, err, + _("Unable to resolve conflicts on '%s'"), + svn_dirent_local_style(local_abspath, scratch_pool)); + + SVN_ERR(err); + } ctx->notify_func2 = cswb.notify_func; ctx->notify_baton2 = cswb.notify_baton; - SVN_ERR(err); - /* ### call notify.c code */ if (ctx->notify_func2) ctx->notify_func2(ctx->notify_baton2,