vcs-svn: Unclutter handle_node by introducing have_props var
authorJonathan Nieder <jrnieder@gmail.com>
Sat, 20 Nov 2010 00:47:41 +0000 (18:47 -0600)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Nov 2010 22:51:42 +0000 (14:51 -0800)
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@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
vcs-svn/svndump.c

index 1fb7f82bbac78f4d62f817f125f0c8c09a178e2b..45f0e477d7f2c3ac1d60fe2ef691cc3d8f75ba63 100644 (file)
@@ -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)