summaryrefslogtreecommitdiff
path: root/vcs-svn
diff options
context:
space:
mode:
authorJonathan Nieder <jrnieder@gmail.com>2010-11-19 18:49:55 -0600
committerJunio C Hamano <gitster@pobox.com>2010-11-24 14:51:43 -0800
commit6ee4a9be48ee714ddacf313a7073dabdd6c6ee11 (patch)
treebfd567f89a2be9affd3994e54abf555984bcaefe /vcs-svn
parent5af8fae2df03d1888dbf315da29d1cdaa6214f57 (diff)
downloadgit-6ee4a9be48ee714ddacf313a7073dabdd6c6ee11.tar.gz
vcs-svn: Replace = Delete + Add
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>
Diffstat (limited to 'vcs-svn')
-rw-r--r--vcs-svn/svndump.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/vcs-svn/svndump.c b/vcs-svn/svndump.c
index bc70023073..6a6aaf92b5 100644
--- a/vcs-svn/svndump.c
+++ b/vcs-svn/svndump.c
@@ -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);