Browse Source

vcs-svn: Allow change nodes for root of tree (/)

It is not uncommon for a svn repository to include change records for
properties at the top level of the tracked tree:

	Node-path:
	Node-kind: dir
	Node-action: change
	Prop-delta: true
	Prop-content-length: 43
	Content-length: 43

	K 10
	svn:ignore
	V 11
	build-area

	PROPS-END

Unfortunately a recent svn-fe change (vcs-svn: More dump format sanity
checks, 2010-11-19) causes such nodes to be rejected with the error
message

	fatal: invalid dump: path to be modified is missing

The repo_tree module does not keep a dirent for the root of the tree.
Add a block to the dump parser to take care of this case.

Signed-off-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Jonathan Nieder 14 years ago committed by Junio C Hamano
parent
commit
9e8c532108
  1. 55
      t/t9010-svn-fe.sh
  2. 5
      vcs-svn/svndump.c

55
t/t9010-svn-fe.sh

@ -580,6 +580,61 @@ test_expect_success 'property deltas supported' ' @@ -580,6 +580,61 @@ test_expect_success 'property deltas supported' '
test_cmp expect actual
'

test_expect_success 'properties on /' '
reinit_git &&
cat <<-\EOF >expect &&
OBJID
OBJID
:000000 100644 OBJID OBJID A greeting
EOF
sed -e "s/X$//" <<-\EOF >changeroot.dump &&
SVN-fs-dump-format-version: 3

Revision-number: 1
Prop-content-length: 10
Content-length: 10

PROPS-END

Node-path: greeting
Node-kind: file
Node-action: add
Text-content-length: 0
Prop-content-length: 10
Content-length: 10

PROPS-END

Revision-number: 2
Prop-content-length: 10
Content-length: 10

PROPS-END

Node-path: X
Node-kind: dir
Node-action: change
Prop-delta: true
Prop-content-length: 43
Content-length: 43

K 10
svn:ignore
V 11
build-area

PROPS-END
EOF
test-svn-fe changeroot.dump >stream &&
git fast-import <stream &&
{
git rev-list HEAD |
git diff-tree --root --always --stdin |
sed "s/$_x40/OBJID/g"
} >actual &&
test_cmp expect actual
'

test_expect_success 'deltas for typechange' '
reinit_git &&
cat >expect <<-\EOF &&

5
vcs-svn/svndump.c

@ -221,7 +221,10 @@ static void handle_node(void) @@ -221,7 +221,10 @@ static void handle_node(void)
}
if (mark && type == REPO_MODE_DIR)
die("invalid dump: directories cannot have text attached");
if (node_ctx.action == NODEACT_CHANGE) {
if (node_ctx.action == NODEACT_CHANGE && !~*node_ctx.dst) {
if (type != REPO_MODE_DIR)
die("invalid dump: root of tree is not a regular file");
} else if (node_ctx.action == NODEACT_CHANGE) {
uint32_t mode = repo_modify_path(node_ctx.dst, 0, mark);
if (!mode)
die("invalid dump: path to be modified is missing");

Loading…
Cancel
Save