Date: Thu, 30 Aug 2018 14:06:28 +0000 (UTC) From: =?UTF-8?Q?Dag-Erling_Sm=c3=b8rgrav?= <des@FreeBSD.org> To: ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org Subject: svn commit: r478451 - in head/devel/subversion: . files Message-ID: <201808301406.w7UE6S2b064289@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: des Date: Thu Aug 30 14:06:28 2018 New Revision: 478451 URL: https://svnweb.freebsd.org/changeset/ports/478451 Log: Add patch from upstream commit r1839662, which fixes automatic conflict resolution for files removed from the merge target when the merge source and merge target have no proper common ancestor. This is a depressingly common scenario in the FreeBSD base tree. Approved by: maintainer (lev) Obtained from: https://svn.apache.org/r1839662 Added: head/devel/subversion/files/patch-subversion-libsvn_client-conflicts.c (contents, props changed) Modified: head/devel/subversion/Makefile Modified: head/devel/subversion/Makefile ============================================================================== --- head/devel/subversion/Makefile Thu Aug 30 13:39:51 2018 (r478450) +++ head/devel/subversion/Makefile Thu Aug 30 14:06:28 2018 (r478451) @@ -1,7 +1,7 @@ # Created by: rooneg@electricjellyfish.net # $FreeBSD$ -PORTREVISION= 0 +PORTREVISION= 1 MAINTAINER= lev@FreeBSD.org COMMENT= Version control system Added: head/devel/subversion/files/patch-subversion-libsvn_client-conflicts.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/devel/subversion/files/patch-subversion-libsvn_client-conflicts.c Thu Aug 30 14:06:28 2018 (r478451) @@ -0,0 +1,94 @@ +--- subversion/libsvn_client/conflicts.c 2018/08/30 11:27:03 1839661 ++++ subversion/libsvn_client/conflicts.c 2018/08/30 11:39:40 1839662 +@@ -1061,6 +1061,9 @@ + { + apr_array_header_t *moves; + ++ if (b->moves_table == NULL) ++ return SVN_NO_ERROR; ++ + moves = apr_hash_get(b->moves_table, &log_entry->revision, + sizeof(svn_revnum_t)); + if (moves) +@@ -2205,8 +2208,8 @@ + * If the node was replaced rather than deleted, set *REPLACING_NODE_KIND to + * the node kind of the replacing node. Else, set it to svn_node_unknown. + * Only request the log for revisions up to END_REV from the server. +- * If the deleted node was moved, provide heads of move chains in *MOVES. +- * If the node was not moved,set *MOVES to NULL. ++ * If MOVES it not NULL, and the deleted node was moved, provide heads of ++ * move chains in *MOVES, or, if the node was not moved, set *MOVES to NULL. + */ + static svn_error_t * + find_revision_for_suspected_deletion(svn_revnum_t *deleted_rev, +@@ -2243,10 +2246,11 @@ + scratch_pool)); + victim_abspath = svn_client_conflict_get_local_abspath(conflict); + +- SVN_ERR(find_moves_in_revision_range(&moves_table, parent_repos_relpath, +- repos_root_url, repos_uuid, +- victim_abspath, start_rev, end_rev, +- ctx, result_pool, scratch_pool)); ++ if (moves) ++ SVN_ERR(find_moves_in_revision_range(&moves_table, parent_repos_relpath, ++ repos_root_url, repos_uuid, ++ victim_abspath, start_rev, end_rev, ++ ctx, result_pool, scratch_pool)); + + url = svn_path_url_add_component2(repos_root_url, parent_repos_relpath, + scratch_pool); +@@ -2271,7 +2275,8 @@ + b.repos_root_url = repos_root_url; + b.repos_uuid = repos_uuid; + b.ctx = ctx; +- b.moves_table = moves_table; ++ if (moves) ++ b.moves_table = moves_table; + b.result_pool = result_pool; + SVN_ERR(svn_ra__dup_session(&b.extra_ra_session, ra_session, NULL, + scratch_pool, scratch_pool)); +@@ -2301,7 +2306,7 @@ + { + struct repos_move_info *move = b.move; + +- if (move) ++ if (moves && move) + { + *deleted_rev = move->rev; + *deleted_rev_author = move->rev_author; +@@ -2319,7 +2324,8 @@ + *deleted_rev = SVN_INVALID_REVNUM; + *deleted_rev_author = NULL; + *replacing_node_kind = svn_node_unknown; +- *moves = NULL; ++ if (moves) ++ *moves = NULL; + } + return SVN_NO_ERROR; + } +@@ -2328,10 +2334,11 @@ + *deleted_rev = b.deleted_rev; + *deleted_rev_author = b.deleted_rev_author; + *replacing_node_kind = b.replacing_node_kind; +- SVN_ERR(find_operative_moves(moves, moves_table, +- b.deleted_repos_relpath, b.deleted_rev, +- ra_session, repos_root_url, +- result_pool, scratch_pool)); ++ if (moves) ++ SVN_ERR(find_operative_moves(moves, moves_table, ++ b.deleted_repos_relpath, b.deleted_rev, ++ ra_session, repos_root_url, ++ result_pool, scratch_pool)); + } + + return SVN_NO_ERROR; +@@ -2723,7 +2730,8 @@ + end_rev = 0; /* ### We might walk through all of history... */ + + SVN_ERR(find_revision_for_suspected_deletion( +- &deleted_rev, &deleted_rev_author, &replacing_node_kind, &moves, ++ &deleted_rev, &deleted_rev_author, &replacing_node_kind, ++ yca_loc ? &moves : NULL, + conflict, deleted_basename, parent_repos_relpath, + parent_peg_rev, end_rev, related_repos_relpath, related_peg_rev, + ctx, conflict->pool, scratch_pool));
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201808301406.w7UE6S2b064289>