Merge branch 'cb/maint-ls-files-error-report'
* cb/maint-ls-files-error-report: ls-files: fix pathspec display on errormaint
						commit
						6133e4da54
					
				|  | @ -201,7 +201,7 @@ static int checkout_merged(int pos, struct checkout *state) | |||
| } | ||||
|  | ||||
| static int checkout_paths(struct tree *source_tree, const char **pathspec, | ||||
| 			  struct checkout_opts *opts) | ||||
| 			  const char *prefix, struct checkout_opts *opts) | ||||
| { | ||||
| 	int pos; | ||||
| 	struct checkout state; | ||||
|  | @ -231,7 +231,7 @@ static int checkout_paths(struct tree *source_tree, const char **pathspec, | |||
| 		match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, ps_matched); | ||||
| 	} | ||||
|  | ||||
| 	if (report_path_error(ps_matched, pathspec, 0)) | ||||
| 	if (report_path_error(ps_matched, pathspec, prefix)) | ||||
| 		return 1; | ||||
|  | ||||
| 	/* "checkout -m path" to recreate conflicted state */ | ||||
|  | @ -1064,7 +1064,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix) | |||
| 		if (1 < !!opts.writeout_stage + !!opts.force + !!opts.merge) | ||||
| 			die(_("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index.")); | ||||
|  | ||||
| 		return checkout_paths(source_tree, pathspec, &opts); | ||||
| 		return checkout_paths(source_tree, pathspec, prefix, &opts); | ||||
| 	} | ||||
|  | ||||
| 	if (patch_mode) | ||||
|  |  | |||
|  | @ -274,7 +274,7 @@ static int list_paths(struct string_list *list, const char *with_tree, | |||
| 			item->util = item; /* better a valid pointer than a fake one */ | ||||
| 	} | ||||
|  | ||||
| 	return report_path_error(m, pattern, prefix ? strlen(prefix) : 0); | ||||
| 	return report_path_error(m, pattern, prefix); | ||||
| } | ||||
|  | ||||
| static void add_remove_files(struct string_list *list) | ||||
|  |  | |||
|  | @ -353,11 +353,13 @@ void overlay_tree_on_cache(const char *tree_name, const char *prefix) | |||
| 	} | ||||
| } | ||||
|  | ||||
| int report_path_error(const char *ps_matched, const char **pathspec, int prefix_len) | ||||
| int report_path_error(const char *ps_matched, const char **pathspec, const char *prefix) | ||||
| { | ||||
| 	/* | ||||
| 	 * Make sure all pathspec matched; otherwise it is an error. | ||||
| 	 */ | ||||
| 	struct strbuf sb = STRBUF_INIT; | ||||
| 	const char *name; | ||||
| 	int num, errors = 0; | ||||
| 	for (num = 0; pathspec[num]; num++) { | ||||
| 		int other, found_dup; | ||||
|  | @ -382,10 +384,12 @@ int report_path_error(const char *ps_matched, const char **pathspec, int prefix_ | |||
| 		if (found_dup) | ||||
| 			continue; | ||||
|  | ||||
| 		name = quote_path_relative(pathspec[num], -1, &sb, prefix); | ||||
| 		error("pathspec '%s' did not match any file(s) known to git.", | ||||
| 		      pathspec[num] + prefix_len); | ||||
| 		      name); | ||||
| 		errors++; | ||||
| 	} | ||||
| 	strbuf_release(&sb); | ||||
| 	return errors; | ||||
| } | ||||
|  | ||||
|  | @ -577,7 +581,7 @@ int cmd_ls_files(int argc, const char **argv, const char *cmd_prefix) | |||
|  | ||||
| 	if (ps_matched) { | ||||
| 		int bad; | ||||
| 		bad = report_path_error(ps_matched, pathspec, prefix_len); | ||||
| 		bad = report_path_error(ps_matched, pathspec, prefix); | ||||
| 		if (bad) | ||||
| 			fprintf(stderr, "Did you forget to 'git add'?\n"); | ||||
|  | ||||
|  |  | |||
							
								
								
									
										2
									
								
								cache.h
								
								
								
								
							
							
						
						
									
										2
									
								
								cache.h
								
								
								
								
							|  | @ -1195,7 +1195,7 @@ extern int ws_blank_line(const char *line, int len, unsigned ws_rule); | |||
| #define ws_tab_width(rule)     ((rule) & WS_TAB_WIDTH_MASK) | ||||
|  | ||||
| /* ls-files */ | ||||
| int report_path_error(const char *ps_matched, const char **pathspec, int prefix_offset); | ||||
| int report_path_error(const char *ps_matched, const char **pathspec, const char *prefix); | ||||
| void overlay_tree_on_cache(const char *tree_name, const char *prefix); | ||||
|  | ||||
| char *alias_lookup(const char *alias); | ||||
|  |  | |||
							
								
								
									
										6
									
								
								quote.c
								
								
								
								
							
							
						
						
									
										6
									
								
								quote.c
								
								
								
								
							|  | @ -325,8 +325,12 @@ static const char *path_relative(const char *in, int len, | |||
|  | ||||
| 	if (len < 0) | ||||
| 		len = strlen(in); | ||||
| 	if (prefix && prefix_len < 0) | ||||
| 	if (prefix_len < 0) { | ||||
| 		if (prefix) | ||||
| 			prefix_len = strlen(prefix); | ||||
| 		else | ||||
| 			prefix_len = 0; | ||||
| 	} | ||||
|  | ||||
| 	off = 0; | ||||
| 	i = 0; | ||||
|  |  | |||
|  | @ -0,0 +1,70 @@ | |||
| #!/bin/sh | ||||
|  | ||||
| test_description='ls-files tests with relative paths | ||||
|  | ||||
| This test runs git ls-files with various relative path arguments. | ||||
| ' | ||||
|  | ||||
| . ./test-lib.sh | ||||
|  | ||||
| new_line=' | ||||
| ' | ||||
| sq=\' | ||||
|  | ||||
| test_expect_success 'prepare' ' | ||||
| 	: >never-mind-me && | ||||
| 	git add never-mind-me && | ||||
| 	mkdir top && | ||||
| 	( | ||||
| 		cd top && | ||||
| 		mkdir sub && | ||||
| 		x="x xa xbc xdef xghij xklmno" && | ||||
| 		y=$(echo "$x" | tr x y) && | ||||
| 		touch $x && | ||||
| 		touch $y && | ||||
| 		cd sub && | ||||
| 		git add ../x* | ||||
| 	) | ||||
| ' | ||||
|  | ||||
| test_expect_success 'ls-files with mixed levels' ' | ||||
| 	( | ||||
| 		cd top/sub && | ||||
| 		cat >expect <<-EOF && | ||||
| 		../../never-mind-me | ||||
| 		../x | ||||
| 		EOF | ||||
| 		git ls-files $(cat expect) >actual && | ||||
| 		test_cmp expect actual | ||||
| 	) | ||||
| ' | ||||
|  | ||||
| test_expect_success 'ls-files -c' ' | ||||
| 	( | ||||
| 		cd top/sub && | ||||
| 		for f in ../y* | ||||
| 		do | ||||
| 			echo "error: pathspec $sq$f$sq did not match any file(s) known to git." | ||||
| 		done >expect && | ||||
| 		echo "Did you forget to ${sq}git add${sq}?" >>expect && | ||||
| 		ls ../x* >>expect && | ||||
| 		test_must_fail git ls-files -c --error-unmatch ../[xy]* >actual 2>&1 && | ||||
| 		test_cmp expect actual | ||||
| 	) | ||||
| ' | ||||
|  | ||||
| test_expect_success 'ls-files -o' ' | ||||
| 	( | ||||
| 		cd top/sub && | ||||
| 		for f in ../x* | ||||
| 		do | ||||
| 			echo "error: pathspec $sq$f$sq did not match any file(s) known to git." | ||||
| 		done >expect && | ||||
| 		echo "Did you forget to ${sq}git add${sq}?" >>expect && | ||||
| 		ls ../y* >>expect && | ||||
| 		test_must_fail git ls-files -o --error-unmatch ../[xy]* >actual 2>&1 && | ||||
| 		test_cmp expect actual | ||||
| 	) | ||||
| ' | ||||
|  | ||||
| test_done | ||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano