vcs-svn: handle_node: Handle deletion case early

Take care of "Node-action: delete" as soon as possible, so we can stop
worrying about that case in the rest of the function.

Functional change: catch deletion nodes with features that would not
apply to them (text, properties, or origin data) and error out for
those cases.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Jonathan Nieder 2010-11-19 18:49:17 -06:00 коммит произвёл Junio C Hamano
Родитель 462e1f51a5
Коммит 5af8fae2df
1 изменённых файлов: 8 добавлений и 3 удалений

Просмотреть файл

@ -159,6 +159,13 @@ static void handle_node(void)
if (node_ctx.textLength != LENGTH_UNKNOWN) if (node_ctx.textLength != LENGTH_UNKNOWN)
mark = next_blob_mark(); mark = next_blob_mark();
if (node_ctx.action == NODEACT_DELETE) {
if (mark || have_props || node_ctx.srcRev)
die("invalid dump: deletion node has "
"copyfrom info, text, or properties");
return repo_delete(node_ctx.dst);
}
if (have_props && node_ctx.propLength) if (have_props && node_ctx.propLength)
read_props(); read_props();
@ -168,9 +175,7 @@ static void handle_node(void)
if (mark && node_ctx.type == REPO_MODE_DIR) if (mark && node_ctx.type == REPO_MODE_DIR)
die("invalid dump: directories cannot have text attached"); die("invalid dump: directories cannot have text attached");
if (node_ctx.action == NODEACT_DELETE) { if (node_ctx.action == NODEACT_CHANGE ||
repo_delete(node_ctx.dst);
} else if (node_ctx.action == NODEACT_CHANGE ||
node_ctx.action == NODEACT_REPLACE) { node_ctx.action == NODEACT_REPLACE) {
if (node_ctx.action == NODEACT_REPLACE && if (node_ctx.action == NODEACT_REPLACE &&
node_ctx.type == REPO_MODE_DIR) node_ctx.type == REPO_MODE_DIR)