Merge branch 'cc/sha1-file-name'
Code clean-up. * cc/sha1-file-name: sha1_file: improve sha1_file_name() perfs sha1_file: remove static strbuf from sha1_file_name()maint
						commit
						9238941618
					
				
							
								
								
									
										8
									
								
								cache.h
								
								
								
								
							
							
						
						
									
										8
									
								
								cache.h
								
								
								
								
							|  | @ -960,12 +960,10 @@ extern void check_repository_format(void); | ||||||
| #define TYPE_CHANGED    0x0040 | #define TYPE_CHANGED    0x0040 | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Return the name of the file in the local object database that would |  * Put in `buf` the name of the file in the local object database that | ||||||
|  * be used to store a loose object with the specified sha1.  The |  * would be used to store a loose object with the specified sha1. | ||||||
|  * return value is a pointer to a statically allocated buffer that is |  | ||||||
|  * overwritten each time the function is called. |  | ||||||
|  */ |  */ | ||||||
| extern const char *sha1_file_name(const unsigned char *sha1); | extern void sha1_file_name(struct strbuf *buf, const unsigned char *sha1); | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  * Return an abbreviated sha1 unique within this repository's object database. |  * Return an abbreviated sha1 unique within this repository's object database. | ||||||
|  |  | ||||||
|  | @ -544,8 +544,10 @@ static int fetch_object(struct walker *walker, unsigned char *sha1) | ||||||
| 	} else if (hashcmp(obj_req->sha1, req->real_sha1)) { | 	} else if (hashcmp(obj_req->sha1, req->real_sha1)) { | ||||||
| 		ret = error("File %s has bad hash", hex); | 		ret = error("File %s has bad hash", hex); | ||||||
| 	} else if (req->rename < 0) { | 	} else if (req->rename < 0) { | ||||||
| 		ret = error("unable to write sha1 filename %s", | 		struct strbuf buf = STRBUF_INIT; | ||||||
| 			    sha1_file_name(req->sha1)); | 		sha1_file_name(&buf, req->sha1); | ||||||
|  | 		ret = error("unable to write sha1 filename %s", buf.buf); | ||||||
|  | 		strbuf_release(&buf); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	release_http_object_request(req); | 	release_http_object_request(req); | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								http.c
								
								
								
								
							
							
						
						
									
										16
									
								
								http.c
								
								
								
								
							|  | @ -2168,7 +2168,7 @@ struct http_object_request *new_http_object_request(const char *base_url, | ||||||
| 	unsigned char *sha1) | 	unsigned char *sha1) | ||||||
| { | { | ||||||
| 	char *hex = sha1_to_hex(sha1); | 	char *hex = sha1_to_hex(sha1); | ||||||
| 	const char *filename; | 	struct strbuf filename = STRBUF_INIT; | ||||||
| 	char prevfile[PATH_MAX]; | 	char prevfile[PATH_MAX]; | ||||||
| 	int prevlocal; | 	int prevlocal; | ||||||
| 	char prev_buf[PREV_BUF_SIZE]; | 	char prev_buf[PREV_BUF_SIZE]; | ||||||
|  | @ -2180,14 +2180,15 @@ struct http_object_request *new_http_object_request(const char *base_url, | ||||||
| 	hashcpy(freq->sha1, sha1); | 	hashcpy(freq->sha1, sha1); | ||||||
| 	freq->localfile = -1; | 	freq->localfile = -1; | ||||||
|  |  | ||||||
| 	filename = sha1_file_name(sha1); | 	sha1_file_name(&filename, sha1); | ||||||
| 	snprintf(freq->tmpfile, sizeof(freq->tmpfile), | 	snprintf(freq->tmpfile, sizeof(freq->tmpfile), | ||||||
| 		 "%s.temp", filename); | 		 "%s.temp", filename.buf); | ||||||
|  |  | ||||||
| 	snprintf(prevfile, sizeof(prevfile), "%s.prev", filename); | 	snprintf(prevfile, sizeof(prevfile), "%s.prev", filename.buf); | ||||||
| 	unlink_or_warn(prevfile); | 	unlink_or_warn(prevfile); | ||||||
| 	rename(freq->tmpfile, prevfile); | 	rename(freq->tmpfile, prevfile); | ||||||
| 	unlink_or_warn(freq->tmpfile); | 	unlink_or_warn(freq->tmpfile); | ||||||
|  | 	strbuf_release(&filename); | ||||||
|  |  | ||||||
| 	if (freq->localfile != -1) | 	if (freq->localfile != -1) | ||||||
| 		error("fd leakage in start: %d", freq->localfile); | 		error("fd leakage in start: %d", freq->localfile); | ||||||
|  | @ -2302,6 +2303,7 @@ void process_http_object_request(struct http_object_request *freq) | ||||||
| int finish_http_object_request(struct http_object_request *freq) | int finish_http_object_request(struct http_object_request *freq) | ||||||
| { | { | ||||||
| 	struct stat st; | 	struct stat st; | ||||||
|  | 	struct strbuf filename = STRBUF_INIT; | ||||||
|  |  | ||||||
| 	close(freq->localfile); | 	close(freq->localfile); | ||||||
| 	freq->localfile = -1; | 	freq->localfile = -1; | ||||||
|  | @ -2327,8 +2329,10 @@ int finish_http_object_request(struct http_object_request *freq) | ||||||
| 		unlink_or_warn(freq->tmpfile); | 		unlink_or_warn(freq->tmpfile); | ||||||
| 		return -1; | 		return -1; | ||||||
| 	} | 	} | ||||||
| 	freq->rename = |  | ||||||
| 		finalize_object_file(freq->tmpfile, sha1_file_name(freq->sha1)); | 	sha1_file_name(&filename, freq->sha1); | ||||||
|  | 	freq->rename = finalize_object_file(freq->tmpfile, filename.buf); | ||||||
|  | 	strbuf_release(&filename); | ||||||
|  |  | ||||||
| 	return freq->rename; | 	return freq->rename; | ||||||
| } | } | ||||||
|  |  | ||||||
							
								
								
									
										40
									
								
								sha1_file.c
								
								
								
								
							
							
						
						
									
										40
									
								
								sha1_file.c
								
								
								
								
							|  | @ -321,15 +321,11 @@ static void fill_sha1_path(struct strbuf *buf, const unsigned char *sha1) | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| const char *sha1_file_name(const unsigned char *sha1) | void sha1_file_name(struct strbuf *buf, const unsigned char *sha1) | ||||||
| { | { | ||||||
| 	static struct strbuf buf = STRBUF_INIT; | 	strbuf_addstr(buf, get_object_directory()); | ||||||
|  | 	strbuf_addch(buf, '/'); | ||||||
| 	strbuf_reset(&buf); | 	fill_sha1_path(buf, sha1); | ||||||
| 	strbuf_addf(&buf, "%s/", get_object_directory()); |  | ||||||
|  |  | ||||||
| 	fill_sha1_path(&buf, sha1); |  | ||||||
| 	return buf.buf; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| struct strbuf *alt_scratch_buf(struct alternate_object_database *alt) | struct strbuf *alt_scratch_buf(struct alternate_object_database *alt) | ||||||
|  | @ -710,7 +706,12 @@ int check_and_freshen_file(const char *fn, int freshen) | ||||||
|  |  | ||||||
| static int check_and_freshen_local(const unsigned char *sha1, int freshen) | static int check_and_freshen_local(const unsigned char *sha1, int freshen) | ||||||
| { | { | ||||||
| 	return check_and_freshen_file(sha1_file_name(sha1), freshen); | 	static struct strbuf buf = STRBUF_INIT; | ||||||
|  |  | ||||||
|  | 	strbuf_reset(&buf); | ||||||
|  | 	sha1_file_name(&buf, sha1); | ||||||
|  |  | ||||||
|  | 	return check_and_freshen_file(buf.buf, freshen); | ||||||
| } | } | ||||||
|  |  | ||||||
| static int check_and_freshen_nonlocal(const unsigned char *sha1, int freshen) | static int check_and_freshen_nonlocal(const unsigned char *sha1, int freshen) | ||||||
|  | @ -866,8 +867,12 @@ static int stat_sha1_file(const unsigned char *sha1, struct stat *st, | ||||||
| 			  const char **path) | 			  const char **path) | ||||||
| { | { | ||||||
| 	struct alternate_object_database *alt; | 	struct alternate_object_database *alt; | ||||||
|  | 	static struct strbuf buf = STRBUF_INIT; | ||||||
|  |  | ||||||
|  | 	strbuf_reset(&buf); | ||||||
|  | 	sha1_file_name(&buf, sha1); | ||||||
|  | 	*path = buf.buf; | ||||||
|  |  | ||||||
| 	*path = sha1_file_name(sha1); |  | ||||||
| 	if (!lstat(*path, st)) | 	if (!lstat(*path, st)) | ||||||
| 		return 0; | 		return 0; | ||||||
|  |  | ||||||
|  | @ -891,8 +896,12 @@ static int open_sha1_file(const unsigned char *sha1, const char **path) | ||||||
| 	int fd; | 	int fd; | ||||||
| 	struct alternate_object_database *alt; | 	struct alternate_object_database *alt; | ||||||
| 	int most_interesting_errno; | 	int most_interesting_errno; | ||||||
|  | 	static struct strbuf buf = STRBUF_INIT; | ||||||
|  |  | ||||||
|  | 	strbuf_reset(&buf); | ||||||
|  | 	sha1_file_name(&buf, sha1); | ||||||
|  | 	*path = buf.buf; | ||||||
|  |  | ||||||
| 	*path = sha1_file_name(sha1); |  | ||||||
| 	fd = git_open(*path); | 	fd = git_open(*path); | ||||||
| 	if (fd >= 0) | 	if (fd >= 0) | ||||||
| 		return fd; | 		return fd; | ||||||
|  | @ -1572,9 +1581,12 @@ static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen, | ||||||
| 	git_SHA_CTX c; | 	git_SHA_CTX c; | ||||||
| 	unsigned char parano_sha1[20]; | 	unsigned char parano_sha1[20]; | ||||||
| 	static struct strbuf tmp_file = STRBUF_INIT; | 	static struct strbuf tmp_file = STRBUF_INIT; | ||||||
| 	const char *filename = sha1_file_name(sha1); | 	static struct strbuf filename = STRBUF_INIT; | ||||||
|  |  | ||||||
| 	fd = create_tmpfile(&tmp_file, filename); | 	strbuf_reset(&filename); | ||||||
|  | 	sha1_file_name(&filename, sha1); | ||||||
|  |  | ||||||
|  | 	fd = create_tmpfile(&tmp_file, filename.buf); | ||||||
| 	if (fd < 0) { | 	if (fd < 0) { | ||||||
| 		if (errno == EACCES) | 		if (errno == EACCES) | ||||||
| 			return error("insufficient permission for adding an object to repository database %s", get_object_directory()); | 			return error("insufficient permission for adding an object to repository database %s", get_object_directory()); | ||||||
|  | @ -1627,7 +1639,7 @@ static int write_loose_object(const unsigned char *sha1, char *hdr, int hdrlen, | ||||||
| 			warning_errno("failed utime() on %s", tmp_file.buf); | 			warning_errno("failed utime() on %s", tmp_file.buf); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return finalize_object_file(tmp_file.buf, filename); | 	return finalize_object_file(tmp_file.buf, filename.buf); | ||||||
| } | } | ||||||
|  |  | ||||||
| static int freshen_loose_object(const unsigned char *sha1) | static int freshen_loose_object(const unsigned char *sha1) | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano