aboutsummaryrefslogtreecommitdiff
path: root/vcs-svn
diff options
context:
space:
mode:
authorJonathan Nieder <jrnieder@gmail.com>2010-11-19 18:48:51 -0600
committerJunio C Hamano <gitster@pobox.com>2010-11-24 14:51:43 -0800
commit462e1f51a5648ce9d7ca26d44ed86327c454889a (patch)
tree707e467d61bc510550db428614038fa277a0c18b /vcs-svn
parentd6e81a03153810f122f1b8ec3635fd84c5429f69 (diff)
downloadgit-462e1f51a5648ce9d7ca26d44ed86327c454889a.tar.gz
git-462e1f51a5648ce9d7ca26d44ed86327c454889a.tar.xz
vcs-svn: Use mark to indicate nodes with included text
Allocate a mark if needed as soon as possible so later code can use "if (mark)" to check if this node has text attached rather than explicitly checking for Text-content-length. While at it, reject directory nodes with text attached; the presence of such a node would indicate a bug in the dump generator or svn-fe's understanding. In the long term, it would be nice to be able to continue parsing and save the error for later, but for now it is simpler to error out right away. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'vcs-svn')
-rw-r--r--vcs-svn/svndump.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c
index 45f0e477d..844076b66 100644
--- a/vcs-svn/svndump.c
+++ b/vcs-svn/svndump.c
@@ -156,15 +156,17 @@ static void handle_node(void)
if (node_ctx.text_delta || node_ctx.prop_delta)
die("text and property deltas not supported");
+ if (node_ctx.textLength != LENGTH_UNKNOWN)
+ mark = next_blob_mark();
+
if (have_props && node_ctx.propLength)
read_props();
if (node_ctx.srcRev)
old_mode = repo_copy(node_ctx.srcRev, node_ctx.src, node_ctx.dst);
- if (node_ctx.textLength != LENGTH_UNKNOWN &&
- node_ctx.type != REPO_MODE_DIR)
- mark = next_blob_mark();
+ if (mark && node_ctx.type == REPO_MODE_DIR)
+ die("invalid dump: directories cannot have text attached");
if (node_ctx.action == NODEACT_DELETE) {
repo_delete(node_ctx.dst);
@@ -175,15 +177,15 @@ static void handle_node(void)
repo_replace(node_ctx.dst, mark);
else if (have_props)
repo_modify(node_ctx.dst, node_ctx.type, mark);
- else if (node_ctx.textLength != LENGTH_UNKNOWN)
+ else if (mark)
old_mode = repo_replace(node_ctx.dst, mark);
} else if (node_ctx.action == NODEACT_ADD) {
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)
+ else if (node_ctx.srcRev && mark)
old_mode = repo_replace(node_ctx.dst, mark);
else if ((node_ctx.type == REPO_MODE_DIR && !node_ctx.srcRev) ||
- node_ctx.textLength != LENGTH_UNKNOWN)
+ mark)
repo_add(node_ctx.dst, node_ctx.type, mark);
}
@@ -192,8 +194,6 @@ static void handle_node(void)
if (mark)
fast_export_blob(node_ctx.type, mark, node_ctx.textLength);
- else if (node_ctx.textLength != LENGTH_UNKNOWN)
- buffer_skip_bytes(node_ctx.textLength);
}
static void handle_revision(void)