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>
This commit is contained in:
		
				
					committed by
					
						
						Junio C Hamano
					
				
			
			
				
	
			
			
			
						parent
						
							6b01b67658
						
					
				
				
					commit
					9e8c532108
				
			@ -580,6 +580,61 @@ test_expect_success 'property deltas supported' '
 | 
				
			|||||||
	test_cmp expect actual
 | 
						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' '
 | 
					test_expect_success 'deltas for typechange' '
 | 
				
			||||||
	reinit_git &&
 | 
						reinit_git &&
 | 
				
			||||||
	cat >expect <<-\EOF &&
 | 
						cat >expect <<-\EOF &&
 | 
				
			||||||
 | 
				
			|||||||
@ -221,7 +221,10 @@ static void handle_node(void)
 | 
				
			|||||||
	}
 | 
						}
 | 
				
			||||||
	if (mark && type == REPO_MODE_DIR)
 | 
						if (mark && 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_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);
 | 
							uint32_t mode = repo_modify_path(node_ctx.dst, 0, mark);
 | 
				
			||||||
		if (!mode)
 | 
							if (!mode)
 | 
				
			||||||
			die("invalid dump: path to be modified is missing");
 | 
								die("invalid dump: path to be modified is missing");
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user