clone: extract function from copy_or_link_directory
Extract dir creation code snippet from copy_or_link_directory to its own function named mkdir_if_missing. This change will help to remove copy_or_link_directory's explicit recursion, which will be done in a following patch. Also makes the code more readable. Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
		 Matheus Tavares
					Matheus Tavares
				
			
				
					committed by
					
						 Junio C Hamano
						Junio C Hamano
					
				
			
			
				
	
			
			
			 Junio C Hamano
						Junio C Hamano
					
				
			
						parent
						
							68c7c59cf2
						
					
				
				
					commit
					14954b799f
				
			| @ -391,6 +391,21 @@ static void copy_alternates(struct strbuf *src, const char *src_repo) | ||||
| 	fclose(in); | ||||
| } | ||||
|  | ||||
| static void mkdir_if_missing(const char *pathname, mode_t mode) | ||||
| { | ||||
| 	struct stat st; | ||||
|  | ||||
| 	if (!mkdir(pathname, mode)) | ||||
| 		return; | ||||
|  | ||||
| 	if (errno != EEXIST) | ||||
| 		die_errno(_("failed to create directory '%s'"), pathname); | ||||
| 	else if (stat(pathname, &st)) | ||||
| 		die_errno(_("failed to stat '%s'"), pathname); | ||||
| 	else if (!S_ISDIR(st.st_mode)) | ||||
| 		die(_("%s exists and is not a directory"), pathname); | ||||
| } | ||||
|  | ||||
| static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest, | ||||
| 				   const char *src_repo, int src_baselen) | ||||
| { | ||||
| @ -403,14 +418,7 @@ static void copy_or_link_directory(struct strbuf *src, struct strbuf *dest, | ||||
| 	if (!dir) | ||||
| 		die_errno(_("failed to open '%s'"), src->buf); | ||||
|  | ||||
| 	if (mkdir(dest->buf, 0777)) { | ||||
| 		if (errno != EEXIST) | ||||
| 			die_errno(_("failed to create directory '%s'"), dest->buf); | ||||
| 		else if (stat(dest->buf, &buf)) | ||||
| 			die_errno(_("failed to stat '%s'"), dest->buf); | ||||
| 		else if (!S_ISDIR(buf.st_mode)) | ||||
| 			die(_("%s exists and is not a directory"), dest->buf); | ||||
| 	} | ||||
| 	mkdir_if_missing(dest->buf, 0777); | ||||
|  | ||||
| 	strbuf_addch(src, '/'); | ||||
| 	src_len = src->len; | ||||
|  | ||||
		Reference in New Issue
	
	Block a user