You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by rh...@apache.org on 2013/01/26 23:48:21 UTC
svn commit: r1438980 - in /subversion/trunk/subversion:
include/private/svn_diff_tree.h libsvn_diff/diff_tree.c
Author: rhuijben
Date: Sat Jan 26 22:48:20 2013
New Revision: 1438980
URL: http://svn.apache.org/viewvc?rev=1438980&view=rev
Log:
To facilitate merge handling, add a node_absent() callback to the diff tree processor.
* subversion/include/private/svn_diff_tree.h
(svn_diff_tree_processor_t): Add several comments and node_absent() callback.
* subversion/libsvn_diff/diff_tree.c
(default_node_absent): New function.
(svn_diff__tree_processor_create): Hook node_absent.
(reverse_node_absent): New function.
(svn_diff__tree_processor_reverse_create): Hook node_absent.
Modified:
subversion/trunk/subversion/include/private/svn_diff_tree.h
subversion/trunk/subversion/libsvn_diff/diff_tree.c
Modified: subversion/trunk/subversion/include/private/svn_diff_tree.h
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/include/private/svn_diff_tree.h?rev=1438980&r1=1438979&r2=1438980&view=diff
==============================================================================
--- subversion/trunk/subversion/include/private/svn_diff_tree.h (original)
+++ subversion/trunk/subversion/include/private/svn_diff_tree.h Sat Jan 26 22:48:20 2013
@@ -155,6 +155,7 @@ typedef struct svn_diff_tree_processor_t
apr_pool_t *result_pool,
apr_pool_t *scratch_pool);
+ /* Called after file_opened() for newly added and copied files */
svn_error_t *
(*file_added)(const char *relpath,
const svn_diff_source_t *copyfrom_source,
@@ -167,6 +168,7 @@ typedef struct svn_diff_tree_processor_t
const struct svn_diff_tree_processor_t *processor,
apr_pool_t *scratch_pool);
+ /* Called after file_opened() for deleted or moved away files */
svn_error_t *
(*file_deleted)(const char *relpath,
const svn_diff_source_t *left_source,
@@ -176,6 +178,7 @@ typedef struct svn_diff_tree_processor_t
const struct svn_diff_tree_processor_t *processor,
apr_pool_t *scratch_pool);
+ /* Called after file_opened() for changed files */
svn_error_t *
(*file_changed)(const char *relpath,
const svn_diff_source_t *left_source,
@@ -190,6 +193,7 @@ typedef struct svn_diff_tree_processor_t
const struct svn_diff_tree_processor_t *processor,
apr_pool_t *scratch_pool);
+ /* Called after file_opened() for unmodified files */
svn_error_t *
(*file_closed)(const char *relpath,
const svn_diff_source_t *left_source,
@@ -197,6 +201,13 @@ typedef struct svn_diff_tree_processor_t
void *file_baton,
const struct svn_diff_tree_processor_t *processor,
apr_pool_t *scratch_pool);
+
+ /* Called when encountering a marker for an absent file or directory */
+ svn_error_t *
+ (*node_absent)(const char *relpath,
+ void *dir_baton,
+ const struct svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool);
} svn_diff_tree_processor_t;
/**
Modified: subversion/trunk/subversion/libsvn_diff/diff_tree.c
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/libsvn_diff/diff_tree.c?rev=1438980&r1=1438979&r2=1438980&view=diff
==============================================================================
--- subversion/trunk/subversion/libsvn_diff/diff_tree.c (original)
+++ subversion/trunk/subversion/libsvn_diff/diff_tree.c Sat Jan 26 22:48:20 2013
@@ -199,6 +199,15 @@ default_file_closed(const char *relpath,
return SVN_NO_ERROR;
}
+static svn_error_t *
+default_node_absent(const char *relpath,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ return SVN_NO_ERROR;
+}
+
svn_diff_tree_processor_t *
svn_diff__tree_processor_create(void *baton,
apr_pool_t *result_pool)
@@ -220,6 +229,9 @@ svn_diff__tree_processor_create(void *ba
wrapper->tp.file_changed = default_file_changed;
wrapper->tp.file_closed = default_file_closed;
+ wrapper->tp.node_absent = default_node_absent;
+
+
return &wrapper->tp;
}
@@ -513,6 +525,25 @@ reverse_file_closed(const char *relpath,
return SVN_NO_ERROR;
}
+static svn_error_t *
+reverse_node_absent(const char *relpath,
+ void *dir_baton,
+ const svn_diff_tree_processor_t *processor,
+ apr_pool_t *scratch_pool)
+{
+ struct reverse_tree_baton_t *rb = processor->baton;
+
+ if (rb->prefix_relpath)
+ relpath = svn_relpath_join(rb->prefix_relpath, relpath, scratch_pool);
+
+ SVN_ERR(rb->processor->node_absent(relpath,
+ dir_baton,
+ processor,
+ scratch_pool));
+ return SVN_NO_ERROR;
+}
+
+
const svn_diff_tree_processor_t *
svn_diff__tree_processor_reverse_create(svn_diff_tree_processor_t * processor,
const char *prefix_relpath,
@@ -533,12 +564,15 @@ svn_diff__tree_processor_reverse_create(
reverse->dir_deleted = reverse_dir_deleted;
reverse->dir_changed = reverse_dir_changed;
reverse->dir_closed = reverse_dir_closed;
+
reverse->file_opened = reverse_file_opened;
reverse->file_added = reverse_file_added;
reverse->file_deleted = reverse_file_deleted;
reverse->file_changed = reverse_file_changed;
reverse->file_closed = reverse_file_closed;
+ reverse->node_absent = reverse_node_absent;
+
return reverse;
}