vcs-svn: Unclutter handle_node by introducing have_props var

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>
This commit is contained in:
Jonathan Nieder 2010-11-19 18:47:41 -06:00 committed by Junio C Hamano
parent da3e217447
commit d6e81a0315

View 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)