[PATCH 04/15] vcs-svn: Unclutter handle_node by introducing have_props var

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



It is possible for a path node in an SVN-format dump file to leave out
the properties section.  svn-fe handles this by carrying over the
properties (in particular, file type) from the old version of that
node.

To support this, handle_node tests several times whether a
Prop-content-length field is present.  Ancient Subversion actually
leaves out the Prop-content-length field even for nodes with
properties, so that's not quite the right check.  Besides, this detail
of mechanism is distracting when the question at hand is instead what
content the new node should have.

So introduce a local have_props variable.  The semantics are the same
as before; the adaptations to support ancient streams that leave out
the prop-content-length can wait until someone needs them.

Signed-off-by: Jonathan Nieder <jrnieer@xxxxxxxxx>
---
 vcs-svn/svndump.c |    9 +++++----
 1 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c
index 1fb7f82..45f0e47 100644
--- a/vcs-svn/svndump.c
+++ b/vcs-svn/svndump.c
@@ -151,11 +151,12 @@ static void read_props(void)
 static void handle_node(void)
 {
 	uint32_t old_mode = 0, mark = 0;
+	const int have_props = node_ctx.propLength != LENGTH_UNKNOWN;
 
 	if (node_ctx.text_delta || node_ctx.prop_delta)
 		die("text and property deltas not supported");
 
-	if (node_ctx.propLength != LENGTH_UNKNOWN && node_ctx.propLength)
+	if (have_props && node_ctx.propLength)
 		read_props();
 
 	if (node_ctx.srcRev)
@@ -172,12 +173,12 @@ static void handle_node(void)
 		if (node_ctx.action == NODEACT_REPLACE &&
 		    node_ctx.type == REPO_MODE_DIR)
 			repo_replace(node_ctx.dst, mark);
-		else if (node_ctx.propLength != LENGTH_UNKNOWN)
+		else if (have_props)
 			repo_modify(node_ctx.dst, node_ctx.type, mark);
 		else if (node_ctx.textLength != LENGTH_UNKNOWN)
 			old_mode = repo_replace(node_ctx.dst, mark);
 	} else if (node_ctx.action == NODEACT_ADD) {
-		if (node_ctx.srcRev && node_ctx.propLength != LENGTH_UNKNOWN)
+		if (node_ctx.srcRev && have_props)
 			repo_modify(node_ctx.dst, node_ctx.type, mark);
 		else if (node_ctx.srcRev && node_ctx.textLength != LENGTH_UNKNOWN)
 			old_mode = repo_replace(node_ctx.dst, mark);
@@ -186,7 +187,7 @@ static void handle_node(void)
 			repo_add(node_ctx.dst, node_ctx.type, mark);
 	}
 
-	if (node_ctx.propLength == LENGTH_UNKNOWN && old_mode)
+	if (!have_props && old_mode)
 		node_ctx.type = old_mode;
 
 	if (mark)
-- 
1.7.2.3

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]