Return-Path: X-Original-To: apmail-subversion-commits-archive@minotaur.apache.org Delivered-To: apmail-subversion-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1E68F17874 for ; Tue, 28 Jul 2015 13:07:51 +0000 (UTC) Received: (qmail 52793 invoked by uid 500); 28 Jul 2015 13:07:44 -0000 Delivered-To: apmail-subversion-commits-archive@subversion.apache.org Received: (qmail 52752 invoked by uid 500); 28 Jul 2015 13:07:44 -0000 Mailing-List: contact commits-help@subversion.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@subversion.apache.org Delivered-To: mailing list commits@subversion.apache.org Received: (qmail 52719 invoked by uid 99); 28 Jul 2015 13:07:44 -0000 Received: from Unknown (HELO spamd4-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 28 Jul 2015 13:07:44 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd4-us-west.apache.org (ASF Mail Server at spamd4-us-west.apache.org) with ESMTP id C76E3C0F51; Tue, 28 Jul 2015 13:07:43 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd4-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: 0.001 X-Spam-Level: X-Spam-Status: No, score=0.001 tagged_above=-999 required=6.31 tests=[UNPARSEABLE_RELAY=0.001] autolearn=disabled Received: from mx1-us-east.apache.org ([10.40.0.8]) by localhost (spamd4-us-west.apache.org [10.40.0.11]) (amavisd-new, port 10024) with ESMTP id Ww2g7HmH7W0k; Tue, 28 Jul 2015 13:07:42 +0000 (UTC) Received: from einhorn.in-berlin.de (einhorn.in-berlin.de [192.109.42.8]) by mx1-us-east.apache.org (ASF Mail Server at mx1-us-east.apache.org) with ESMTPS id E9F3E43817; Tue, 28 Jul 2015 13:07:41 +0000 (UTC) X-Envelope-From: stsp@elego.de Received: from ted.stsp.name (ted.stsp.name [217.197.84.34]) by einhorn.in-berlin.de (8.14.4/8.14.4/Debian-4) with ESMTP id t6SD7ead027577 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 28 Jul 2015 15:07:40 +0200 Received: from localhost (ted.stsp.name [local]) by ted.stsp.name (OpenSMTPD) with ESMTPA id fbfe31b5; Tue, 28 Jul 2015 15:07:39 +0200 (CEST) Date: Tue, 28 Jul 2015 15:07:39 +0200 From: Stefan Sperling To: dev@subversion.apache.org Cc: "commits@subversion.apache.org" Subject: Re: svn commit: r1687906 - in /subversion/trunk/subversion: include/svn_client.h libsvn_client/resolved.c Message-ID: <20150728130739.GC13460@ted.stsp.name> Mail-Followup-To: dev@subversion.apache.org, "commits@subversion.apache.org" References: <20150627103542.F0528AC012B@hades.apache.org> <558f10a1.82f8c20a.fcd88.4f1e@mx.google.com> <558f11e4.cb09b40a.d8a8b.ffff90fc@mx.google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <558f11e4.cb09b40a.d8a8b.ffff90fc@mx.google.com> User-Agent: Mutt/1.5.23 (2014-03-12) On Sat, Jun 27, 2015 at 09:08:29PM +0000, Bert Huijben wrote: > > > Author: stsp > > > Date: Sat Jun 27 10:35:42 2015 > > > New Revision: 1687906 > > > > > > URL: http://svn.apache.org/r1687906 > > > Log: > > > Add a conflict walker to the new svn_client_conflict API. > > > > > > Contrary to our current libsvn_wc conflict walker, this walker guarantees > > > that new conflicts created during conflict resolution (which can happen > > > when resolving tree conflicts) are visited as well. The libsvn_wc walker > > > will visit such new conflicts only if they happen to be created in parts > > > of the working copy which the walker has not yet visited. > > > > > > * subversion/include/svn_client.h > > > (svn_client_conflict_walk_func_t, svn_client_conflict_walk): Declare. > > > > > > * subversion/libsvn_client/resolved.c > > > (svn_client_conflict_walk): Implement. > > > > > > Modified: > > > subversion/trunk/subversion/include/svn_client.h > > > subversion/trunk/subversion/libsvn_client/resolved.c > > > > The problem you describe in the conflict walker of libsvn_wc is already fixed in the 1.9 codebase. And if not we should fix it there. > > > > A bigger problem was that it even forgot to report new conflicts deep below the current node, in case the node type changed. But all of that was already fixed before 1.9.0-rc1. > > (The fixes were part of the big catchup merge, after the initial branch) > > > > The restart of the walk as implemented here was an intermediate version of the libsvn_wc version, but one that didn't catch all of the problems… as new conflicts may also appear outside the tree that is walked for conflicts. Catching new conflicts via the notify handler works much better. > > > > Trying to fix this in libsvn_client is very hard, as you don’t know where to apply the working copy lock (especially on moves). Libsvn_wc has the code to do that, but I don't see a usage of that in your code here. > > > Another reason to do this in libsvn_wc is that we need to retry resolving conflicts, as some conflicts might be in the way of others. The global retry as implemented here also has the side effect of hiding certain error types around these retries. (See changes of the libsvn wc version) > > Just providing the error that we can't resolve everything, while hiding the specific error reason why was one of the errors I found. Specializing the depth empty status walk at least allows access to all the error messages. > > > Bert Ack. Thanks for pointing this out. So one possible path forward would be to make svn_wc__resolve_conflicts() expect a new callback type that maps to svn_client_conflict_walk_func_t, with an option to fall back to the old callback type for backwards compatibility. Then we can use the existing working copy walker for both APIs and fix any remaining issues in the libsvn_wc walker there, if any.