vcs-svn: Replace = Delete + Add
authorJonathan Nieder <jrnieder@gmail.com>
Sat, 20 Nov 2010 00:49:55 +0000 (18:49 -0600)
committerJunio C Hamano <gitster@pobox.com>
Wed, 24 Nov 2010 22:51:43 +0000 (14:51 -0800)
Simplify by reducing the "Node-action: replace" case to "Node-action:
add".  This way, the main part of handle_node() only has to deal with
"add" and "change" nodes.

Functional change: replacing a symlink or executable without setting
properties will reset the mode.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
vcs-svn/svndump.c

index bc7002307369fceef983c88581c254b82ba3cc00..6a6aaf92b5cd818ac4bbee0459341b33e2ffe6ef 100644 (file)
@@ -166,6 +166,11 @@ static void handle_node(void)
                return repo_delete(node_ctx.dst);
        }
 
+       if (node_ctx.action == NODEACT_REPLACE) {
+               repo_delete(node_ctx.dst);
+               node_ctx.action = NODEACT_ADD;
+       }
+
        if (have_props && node_ctx.propLength)
                read_props();
 
@@ -175,12 +180,8 @@ static void handle_node(void)
        if (mark && node_ctx.type == REPO_MODE_DIR)
                die("invalid dump: directories cannot have text attached");
 
-       if (node_ctx.action == NODEACT_CHANGE ||
-                          node_ctx.action == NODEACT_REPLACE) {
-               if (node_ctx.action == NODEACT_REPLACE &&
-                   node_ctx.type == REPO_MODE_DIR)
-                       repo_replace(node_ctx.dst, mark);
-               else if (have_props)
+       if (node_ctx.action == NODEACT_CHANGE) {
+               if (have_props)
                        repo_modify(node_ctx.dst, node_ctx.type, mark);
                else if (mark)
                        old_mode = repo_replace(node_ctx.dst, mark);