Skip to content

Commit

Permalink
vcs-svn: Unclutter handle_node by introducing have_props var
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Jonathan Nieder authored and Junio C Hamano committed Nov 24, 2010
1 parent da3e217 commit d6e81a0
Showing 1 changed file with 5 additions and 4 deletions.
9 changes: 5 additions & 4 deletions vcs-svn/svndump.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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);
Expand All @@ -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)
Expand Down

0 comments on commit d6e81a0

Please sign in to comment.