diff options
| m--------- | git | 0 | ||||
| -rw-r--r-- | ui-blob.c | 22 | ||||
| -rw-r--r-- | ui-plain.c | 17 | ||||
| -rw-r--r-- | ui-tree.c | 16 | 
4 files changed, 43 insertions, 12 deletions
| diff --git a/git b/git -Subproject e5af0de202e885b793482d416b8ce9d50dd2b8b +Subproject 15b7898c5e9fc6fed9a6064213cfcd08cf7d731 @@ -32,7 +32,14 @@ int cgit_print_file(char *path, const char *head)  	char *buf;  	unsigned long size;  	struct commit *commit; -	const char *paths[] = {path, NULL}; +	struct pathspec_item path_items = { +		.match = path, +		.len = strlen(path) +	}; +	struct pathspec paths = { +		.nr = 1, +		.items = &path_items +	};  	if (get_sha1(head, sha1))  		return -1;  	type = sha1_object_info(sha1, &size); @@ -41,7 +48,7 @@ int cgit_print_file(char *path, const char *head)  		match_path = path;  		matched_sha1 = sha1;  		found_path = 0; -		read_tree_recursive(commit->tree, "", 0, 0, paths, walk_tree, NULL); +		read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, NULL);  		if (!found_path)  			return -1;  		type = sha1_object_info(sha1, &size); @@ -63,7 +70,14 @@ void cgit_print_blob(const char *hex, char *path, const char *head)  	char *buf;  	unsigned long size;  	struct commit *commit; -	const char *paths[] = {path, NULL}; +	struct pathspec_item path_items = { +		.match = path, +		.len = strlen(path) +	}; +	struct pathspec paths = { +		.nr = 1, +		.items = &path_items +	};  	if (hex) {  		if (get_sha1_hex(hex, sha1)){ @@ -83,7 +97,7 @@ void cgit_print_blob(const char *hex, char *path, const char *head)  		commit = lookup_commit_reference(sha1);  		match_path = path;  		matched_sha1 = sha1; -		read_tree_recursive(commit->tree, "", 0, 0, paths, walk_tree, NULL); +		read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, NULL);  		type = sha1_object_info(sha1,&size);  	} @@ -197,7 +197,14 @@ void cgit_print_plain(struct cgit_context *ctx)  	const char *rev = ctx->qry.sha1;  	unsigned char sha1[20];  	struct commit *commit; -	const char *paths[] = {ctx->qry.path, NULL}; +	struct pathspec_item path_items = { +		.match = ctx->qry.path, +		.len = ctx->qry.path ? strlen(ctx->qry.path) : 0 +	}; +	struct pathspec paths = { +		.nr = 1, +		.items = &path_items +	};  	if (!rev)  		rev = ctx->qry.head; @@ -211,14 +218,14 @@ void cgit_print_plain(struct cgit_context *ctx)  		html_status(404, "Not found", 0);  		return;  	} -	if (!paths[0]) { -		paths[0] = ""; +	if (!path_items.match) { +		path_items.match = "";  		match_baselen = -1;  		print_dir(commit->tree->object.sha1, "", 0, "");  	}  	else -		match_baselen = basedir_len(paths[0]); -	read_tree_recursive(commit->tree, "", 0, 0, paths, walk_tree, NULL); +		match_baselen = basedir_len(path_items.match); +	read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, NULL);  	if (!match)  		html_status(404, "Not found", 0);  	else if (match == 2) @@ -202,6 +202,9 @@ static void ls_tail()  static void ls_tree(const unsigned char *sha1, char *path)  {  	struct tree *tree; +	struct pathspec paths = { +		.nr = 0 +	};  	tree = parse_tree_indirect(sha1);  	if (!tree) { @@ -211,7 +214,7 @@ static void ls_tree(const unsigned char *sha1, char *path)  	}  	ls_head(); -	read_tree_recursive(tree, "", 0, 1, NULL, ls_item, NULL); +	read_tree_recursive(tree, "", 0, 1, &paths, ls_item, NULL);  	ls_tail();  } @@ -252,7 +255,14 @@ void cgit_print_tree(const char *rev, char *path)  {  	unsigned char sha1[20];  	struct commit *commit; -	const char *paths[] = {path, NULL}; +	struct pathspec_item path_items = { +		.match = path, +		.len = path ? strlen(path) : 0 +	}; +	struct pathspec paths = { +		.nr = path ? 1 : 0, +		.items = &path_items +	};  	if (!rev)  		rev = ctx.qry.head; @@ -274,6 +284,6 @@ void cgit_print_tree(const char *rev, char *path)  	}  	match_path = path; -	read_tree_recursive(commit->tree, "", 0, 0, paths, walk_tree, NULL); +	read_tree_recursive(commit->tree, "", 0, 0, &paths, walk_tree, NULL);  	ls_tail();  } | 
