summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Jonathan Nieder <jrnieder@gmail.com>2010-11-19 18:52:59 -0600
committerLibravatar Junio C Hamano <gitster@pobox.com>2010-11-24 14:52:47 -0800
commit414e569e453a49171b1f3db613f88378324104e8 (patch)
treea20484f495e60704c6fa5258bbef67d19c5fc702
parentvcs-svn: Delay read of per-path properties (diff)
downloadtgif-414e569e453a49171b1f3db613f88378324104e8.tar.xz
vcs-svn: Reject path nodes without Node-action
It would be better to flag such errors and let the import proceed anyway, but for now it is simpler not to worry about recovery from such weird cases. Signed-off-by: Jonathan Nieder <jrnieder@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-xt/t9010-svn-fe.sh20
-rw-r--r--vcs-svn/svndump.c7
2 files changed, 25 insertions, 2 deletions
diff --git a/t/t9010-svn-fe.sh b/t/t9010-svn-fe.sh
index 729e73dddf..cb9a236245 100755
--- a/t/t9010-svn-fe.sh
+++ b/t/t9010-svn-fe.sh
@@ -252,6 +252,26 @@ test_expect_success 'directory with files' '
test_cmp hi directory/file2
'
+test_expect_success 'node without action' '
+ cat >inaction.dump <<-\EOF &&
+ SVN-fs-dump-format-version: 3
+
+ Revision-number: 1
+ Prop-content-length: 10
+ Content-length: 10
+
+ PROPS-END
+
+ Node-path: directory
+ Node-kind: dir
+ Prop-content-length: 10
+ Content-length: 10
+
+ PROPS-END
+ EOF
+ test_must_fail test-svn-fe inaction.dump
+'
+
test_expect_failure 'change file mode but keep old content' '
reinit_git &&
cat >expect <<-\EOF &&
diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c
index 4fdfcbbc0d..0af8ac6807 100644
--- a/vcs-svn/svndump.c
+++ b/vcs-svn/svndump.c
@@ -174,7 +174,8 @@ static void handle_node(void)
if (node_ctx.srcRev) {
repo_copy(node_ctx.srcRev, node_ctx.src, node_ctx.dst);
- node_ctx.action = NODEACT_CHANGE;
+ if (node_ctx.action == NODEACT_ADD)
+ node_ctx.action = NODEACT_CHANGE;
}
if (mark && type == REPO_MODE_DIR)
@@ -182,8 +183,10 @@ static void handle_node(void)
if (node_ctx.action == NODEACT_CHANGE)
node_ctx.type = repo_modify_path(node_ctx.dst, 0, mark);
- else /* Node-action: add */
+ else if (node_ctx.action == NODEACT_ADD)
repo_add(node_ctx.dst, type, mark);
+ else
+ die("invalid dump: Node-path block lacks Node-action");
if (have_props) {
const uint32_t old_mode = node_ctx.type;