Prevent diff machinery from examining assume-unchanged entries on worktree
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									efd1796838
								
							
						
					
					
						commit
						540e694b13
					
				|  | @ -162,7 +162,8 @@ int run_diff_files(struct rev_info *revs, unsigned int option) | |||
| 		if (ce_uptodate(ce)) | ||||
| 			continue; | ||||
|  | ||||
| 		changed = check_removed(ce, &st); | ||||
| 		/* If CE_VALID is set, don't look at workdir for file removal */ | ||||
| 		changed = (ce->ce_flags & CE_VALID) ? 0 : check_removed(ce, &st); | ||||
| 		if (changed) { | ||||
| 			if (changed < 0) { | ||||
| 				perror(ce->name); | ||||
|  | @ -337,6 +338,8 @@ static void do_oneway_diff(struct unpack_trees_options *o, | |||
| 	struct rev_info *revs = o->unpack_data; | ||||
| 	int match_missing, cached; | ||||
|  | ||||
| 	/* if the entry is not checked out, don't examine work tree */ | ||||
| 	cached = o->index_only || (idx && (idx->ce_flags & CE_VALID)); | ||||
| 	/* | ||||
| 	 * Backward compatibility wart - "diff-index -m" does | ||||
| 	 * not mean "do not ignore merges", but "match_missing". | ||||
|  | @ -344,7 +347,6 @@ static void do_oneway_diff(struct unpack_trees_options *o, | |||
| 	 * But with the revision flag parsing, that's found in | ||||
| 	 * "!revs->ignore_merges". | ||||
| 	 */ | ||||
| 	cached = o->index_only; | ||||
| 	match_missing = !revs->ignore_merges; | ||||
|  | ||||
| 	if (cached && idx && ce_stage(idx)) { | ||||
|  |  | |||
|  | @ -0,0 +1,31 @@ | |||
| #!/bin/sh | ||||
|  | ||||
| test_description='diff with assume-unchanged entries' | ||||
|  | ||||
| . ./test-lib.sh | ||||
|  | ||||
| # external diff has been tested in t4020-diff-external.sh | ||||
|  | ||||
| test_expect_success 'setup' ' | ||||
| 	echo zero > zero && | ||||
| 	git add zero && | ||||
| 	git commit -m zero && | ||||
| 	echo one > one && | ||||
| 	echo two > two && | ||||
| 	git add one two && | ||||
| 	git commit -m onetwo && | ||||
| 	git update-index --assume-unchanged one && | ||||
| 	echo borked >> one && | ||||
| 	test "$(git ls-files -v one)" = "h one" | ||||
| ' | ||||
|  | ||||
| test_expect_success 'diff-index does not examine assume-unchanged entries' ' | ||||
| 	git diff-index HEAD^ -- one | grep -q 5626abf0f72e58d7a153368ba57db4c673c0e171 | ||||
| ' | ||||
|  | ||||
| test_expect_success 'diff-files does not examine assume-unchanged entries' ' | ||||
| 	rm one && | ||||
| 	test -z "$(git diff-files -- one)" | ||||
| ' | ||||
|  | ||||
| test_done | ||||
		Loading…
	
		Reference in New Issue
	
	 Nguyễn Thái Ngọc Duy
						Nguyễn Thái Ngọc Duy