submodule: fix status of initialized but not cloned submodules
Original bash helper for "submodule status" was doing a check for initialized but not cloned submodules and prefixed the status with a minus sign in case no .git file or folder was found inside the submodule directory. This check was missed when the original port of the functionality from bash to C was done. Signed-off-by: Peter Kaestle <peter.kaestle@nokia.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
		
				
					committed by
					
						
						Junio C Hamano
					
				
			
			
				
	
			
			
			
						parent
						
							ace912bfb8
						
					
				
				
					commit
					3b2885ec9b
				
			@ -781,6 +781,8 @@ static void status_submodule(const char *path, const struct object_id *ce_oid,
 | 
				
			|||||||
	struct argv_array diff_files_args = ARGV_ARRAY_INIT;
 | 
						struct argv_array diff_files_args = ARGV_ARRAY_INIT;
 | 
				
			||||||
	struct rev_info rev;
 | 
						struct rev_info rev;
 | 
				
			||||||
	int diff_files_result;
 | 
						int diff_files_result;
 | 
				
			||||||
 | 
						struct strbuf buf = STRBUF_INIT;
 | 
				
			||||||
 | 
						const char *git_dir;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!submodule_from_path(the_repository, &null_oid, path))
 | 
						if (!submodule_from_path(the_repository, &null_oid, path))
 | 
				
			||||||
		die(_("no submodule mapping found in .gitmodules for path '%s'"),
 | 
							die(_("no submodule mapping found in .gitmodules for path '%s'"),
 | 
				
			||||||
@ -793,10 +795,18 @@ static void status_submodule(const char *path, const struct object_id *ce_oid,
 | 
				
			|||||||
		goto cleanup;
 | 
							goto cleanup;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!is_submodule_active(the_repository, path)) {
 | 
						strbuf_addf(&buf, "%s/.git", path);
 | 
				
			||||||
 | 
						git_dir = read_gitfile(buf.buf);
 | 
				
			||||||
 | 
						if (!git_dir)
 | 
				
			||||||
 | 
							git_dir = buf.buf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (!is_submodule_active(the_repository, path) ||
 | 
				
			||||||
 | 
						    !is_git_directory(git_dir)) {
 | 
				
			||||||
		print_status(flags, '-', path, ce_oid, displaypath);
 | 
							print_status(flags, '-', path, ce_oid, displaypath);
 | 
				
			||||||
 | 
							strbuf_release(&buf);
 | 
				
			||||||
		goto cleanup;
 | 
							goto cleanup;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						strbuf_release(&buf);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	argv_array_pushl(&diff_files_args, "diff-files",
 | 
						argv_array_pushl(&diff_files_args, "diff-files",
 | 
				
			||||||
			 "--ignore-submodules=dirty", "--quiet", "--",
 | 
								 "--ignore-submodules=dirty", "--quiet", "--",
 | 
				
			||||||
 | 
				
			|||||||
@ -377,7 +377,7 @@ test_expect_success 'init should register submodule url in .git/config' '
 | 
				
			|||||||
	test_cmp expect url
 | 
						test_cmp expect url
 | 
				
			||||||
'
 | 
					'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
test_expect_failure 'status should still be "missing" after initializing' '
 | 
					test_expect_success 'status should still be "missing" after initializing' '
 | 
				
			||||||
	rm -fr init &&
 | 
						rm -fr init &&
 | 
				
			||||||
	mkdir init &&
 | 
						mkdir init &&
 | 
				
			||||||
	git submodule status >lines &&
 | 
						git submodule status >lines &&
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user