archive: convert write_archive_entry_fn_t to object_id
Convert the write_archive_entry_fn_t type to use a pointer to struct object_id. Convert various static functions in the tar and zip archivers also. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									eedc994f18
								
							
						
					
					
						commit
						015ff4f822
					
				|  | @ -111,7 +111,7 @@ static void write_trailer(void) | |||
|  * queues up writes, so that all our write(2) calls write exactly one | ||||
|  * full block; pads writes to RECORDSIZE | ||||
|  */ | ||||
| static int stream_blocked(const unsigned char *sha1) | ||||
| static int stream_blocked(const struct object_id *oid) | ||||
| { | ||||
| 	struct git_istream *st; | ||||
| 	enum object_type type; | ||||
|  | @ -119,9 +119,9 @@ static int stream_blocked(const unsigned char *sha1) | |||
| 	char buf[BLOCKSIZE]; | ||||
| 	ssize_t readlen; | ||||
|  | ||||
| 	st = open_istream(sha1, &type, &sz, NULL); | ||||
| 	st = open_istream(oid->hash, &type, &sz, NULL); | ||||
| 	if (!st) | ||||
| 		return error("cannot stream blob %s", sha1_to_hex(sha1)); | ||||
| 		return error("cannot stream blob %s", oid_to_hex(oid)); | ||||
| 	for (;;) { | ||||
| 		readlen = read_istream(st, buf, sizeof(buf)); | ||||
| 		if (readlen <= 0) | ||||
|  | @ -218,7 +218,7 @@ static void prepare_header(struct archiver_args *args, | |||
| } | ||||
|  | ||||
| static void write_extended_header(struct archiver_args *args, | ||||
| 				  const unsigned char *sha1, | ||||
| 				  const struct object_id *oid, | ||||
| 				  const void *buffer, unsigned long size) | ||||
| { | ||||
| 	struct ustar_header header; | ||||
|  | @ -226,14 +226,14 @@ static void write_extended_header(struct archiver_args *args, | |||
| 	memset(&header, 0, sizeof(header)); | ||||
| 	*header.typeflag = TYPEFLAG_EXT_HEADER; | ||||
| 	mode = 0100666; | ||||
| 	xsnprintf(header.name, sizeof(header.name), "%s.paxheader", sha1_to_hex(sha1)); | ||||
| 	xsnprintf(header.name, sizeof(header.name), "%s.paxheader", oid_to_hex(oid)); | ||||
| 	prepare_header(args, &header, mode, size); | ||||
| 	write_blocked(&header, sizeof(header)); | ||||
| 	write_blocked(buffer, size); | ||||
| } | ||||
|  | ||||
| static int write_tar_entry(struct archiver_args *args, | ||||
| 			   const unsigned char *sha1, | ||||
| 			   const struct object_id *oid, | ||||
| 			   const char *path, size_t pathlen, | ||||
| 			   unsigned int mode) | ||||
| { | ||||
|  | @ -257,7 +257,7 @@ static int write_tar_entry(struct archiver_args *args, | |||
| 		mode = (mode | ((mode & 0100) ? 0777 : 0666)) & ~tar_umask; | ||||
| 	} else { | ||||
| 		return error("unsupported file mode: 0%o (SHA1: %s)", | ||||
| 			     mode, sha1_to_hex(sha1)); | ||||
| 			     mode, oid_to_hex(oid)); | ||||
| 	} | ||||
| 	if (pathlen > sizeof(header.name)) { | ||||
| 		size_t plen = get_path_prefix(path, pathlen, | ||||
|  | @ -268,7 +268,7 @@ static int write_tar_entry(struct archiver_args *args, | |||
| 			memcpy(header.name, path + plen + 1, rest); | ||||
| 		} else { | ||||
| 			xsnprintf(header.name, sizeof(header.name), "%s.data", | ||||
| 				  sha1_to_hex(sha1)); | ||||
| 				  oid_to_hex(oid)); | ||||
| 			strbuf_append_ext_header(&ext_header, "path", | ||||
| 						 path, pathlen); | ||||
| 		} | ||||
|  | @ -276,14 +276,14 @@ static int write_tar_entry(struct archiver_args *args, | |||
| 		memcpy(header.name, path, pathlen); | ||||
|  | ||||
| 	if (S_ISREG(mode) && !args->convert && | ||||
| 	    sha1_object_info(sha1, &size) == OBJ_BLOB && | ||||
| 	    sha1_object_info(oid->hash, &size) == OBJ_BLOB && | ||||
| 	    size > big_file_threshold) | ||||
| 		buffer = NULL; | ||||
| 	else if (S_ISLNK(mode) || S_ISREG(mode)) { | ||||
| 		enum object_type type; | ||||
| 		buffer = sha1_file_to_archive(args, path, sha1, old_mode, &type, &size); | ||||
| 		buffer = sha1_file_to_archive(args, path, oid->hash, old_mode, &type, &size); | ||||
| 		if (!buffer) | ||||
| 			return error("cannot read %s", sha1_to_hex(sha1)); | ||||
| 			return error("cannot read %s", oid_to_hex(oid)); | ||||
| 	} else { | ||||
| 		buffer = NULL; | ||||
| 		size = 0; | ||||
|  | @ -292,7 +292,7 @@ static int write_tar_entry(struct archiver_args *args, | |||
| 	if (S_ISLNK(mode)) { | ||||
| 		if (size > sizeof(header.linkname)) { | ||||
| 			xsnprintf(header.linkname, sizeof(header.linkname), | ||||
| 				  "see %s.paxheader", sha1_to_hex(sha1)); | ||||
| 				  "see %s.paxheader", oid_to_hex(oid)); | ||||
| 			strbuf_append_ext_header(&ext_header, "linkpath", | ||||
| 			                         buffer, size); | ||||
| 		} else | ||||
|  | @ -308,7 +308,7 @@ static int write_tar_entry(struct archiver_args *args, | |||
| 	prepare_header(args, &header, mode, size_in_header); | ||||
|  | ||||
| 	if (ext_header.len > 0) { | ||||
| 		write_extended_header(args, sha1, ext_header.buf, | ||||
| 		write_extended_header(args, oid, ext_header.buf, | ||||
| 				      ext_header.len); | ||||
| 	} | ||||
| 	strbuf_release(&ext_header); | ||||
|  | @ -317,7 +317,7 @@ static int write_tar_entry(struct archiver_args *args, | |||
| 		if (buffer) | ||||
| 			write_blocked(buffer, size); | ||||
| 		else | ||||
| 			err = stream_blocked(sha1); | ||||
| 			err = stream_blocked(oid); | ||||
| 	} | ||||
| 	free(buffer); | ||||
| 	return err; | ||||
|  |  | |||
|  | @ -276,7 +276,7 @@ static int entry_is_binary(const char *path, const void *buffer, size_t size) | |||
| #define STREAM_BUFFER_SIZE (1024 * 16) | ||||
|  | ||||
| static int write_zip_entry(struct archiver_args *args, | ||||
| 			   const unsigned char *sha1, | ||||
| 			   const struct object_id *oid, | ||||
| 			   const char *path, size_t pathlen, | ||||
| 			   unsigned int mode) | ||||
| { | ||||
|  | @ -314,7 +314,7 @@ static int write_zip_entry(struct archiver_args *args, | |||
|  | ||||
| 	if (pathlen > 0xffff) { | ||||
| 		return error("path too long (%d chars, SHA1: %s): %s", | ||||
| 				(int)pathlen, sha1_to_hex(sha1), path); | ||||
| 				(int)pathlen, oid_to_hex(oid), path); | ||||
| 	} | ||||
|  | ||||
| 	if (S_ISDIR(mode) || S_ISGITLINK(mode)) { | ||||
|  | @ -325,7 +325,7 @@ static int write_zip_entry(struct archiver_args *args, | |||
| 		compressed_size = 0; | ||||
| 		buffer = NULL; | ||||
| 	} else if (S_ISREG(mode) || S_ISLNK(mode)) { | ||||
| 		enum object_type type = sha1_object_info(sha1, &size); | ||||
| 		enum object_type type = sha1_object_info(oid->hash, &size); | ||||
|  | ||||
| 		method = 0; | ||||
| 		attr2 = S_ISLNK(mode) ? ((mode | 0777) << 16) : | ||||
|  | @ -337,18 +337,18 @@ static int write_zip_entry(struct archiver_args *args, | |||
|  | ||||
| 		if (S_ISREG(mode) && type == OBJ_BLOB && !args->convert && | ||||
| 		    size > big_file_threshold) { | ||||
| 			stream = open_istream(sha1, &type, &size, NULL); | ||||
| 			stream = open_istream(oid->hash, &type, &size, NULL); | ||||
| 			if (!stream) | ||||
| 				return error("cannot stream blob %s", | ||||
| 					     sha1_to_hex(sha1)); | ||||
| 					     oid_to_hex(oid)); | ||||
| 			flags |= ZIP_STREAM; | ||||
| 			out = buffer = NULL; | ||||
| 		} else { | ||||
| 			buffer = sha1_file_to_archive(args, path, sha1, mode, | ||||
| 			buffer = sha1_file_to_archive(args, path, oid->hash, mode, | ||||
| 						      &type, &size); | ||||
| 			if (!buffer) | ||||
| 				return error("cannot read %s", | ||||
| 					     sha1_to_hex(sha1)); | ||||
| 					     oid_to_hex(oid)); | ||||
| 			crc = crc32(crc, buffer, size); | ||||
| 			is_binary = entry_is_binary(path_without_prefix, | ||||
| 						    buffer, size); | ||||
|  | @ -357,7 +357,7 @@ static int write_zip_entry(struct archiver_args *args, | |||
| 		compressed_size = (method == 0) ? size : 0; | ||||
| 	} else { | ||||
| 		return error("unsupported file mode: 0%o (SHA1: %s)", mode, | ||||
| 				sha1_to_hex(sha1)); | ||||
| 				oid_to_hex(oid)); | ||||
| 	} | ||||
|  | ||||
| 	if (creator_version > max_creator_version) | ||||
|  |  | |||
							
								
								
									
										12
									
								
								archive.c
								
								
								
								
							
							
						
						
									
										12
									
								
								archive.c
								
								
								
								
							|  | @ -121,7 +121,7 @@ static int check_attr_export_subst(const struct attr_check *check) | |||
| 	return check && ATTR_TRUE(check->items[1].value); | ||||
| } | ||||
|  | ||||
| static int write_archive_entry(const unsigned char *sha1, const char *base, | ||||
| static int write_archive_entry(const struct object_id *oid, const char *base, | ||||
| 		int baselen, const char *filename, unsigned mode, int stage, | ||||
| 		void *context) | ||||
| { | ||||
|  | @ -153,7 +153,7 @@ static int write_archive_entry(const unsigned char *sha1, const char *base, | |||
| 	if (S_ISDIR(mode) || S_ISGITLINK(mode)) { | ||||
| 		if (args->verbose) | ||||
| 			fprintf(stderr, "%.*s\n", (int)path.len, path.buf); | ||||
| 		err = write_entry(args, sha1, path.buf, path.len, mode); | ||||
| 		err = write_entry(args, oid, path.buf, path.len, mode); | ||||
| 		if (err) | ||||
| 			return err; | ||||
| 		return (S_ISDIR(mode) ? READ_TREE_RECURSIVE : 0); | ||||
|  | @ -161,7 +161,7 @@ static int write_archive_entry(const unsigned char *sha1, const char *base, | |||
|  | ||||
| 	if (args->verbose) | ||||
| 		fprintf(stderr, "%.*s\n", (int)path.len, path.buf); | ||||
| 	return write_entry(args, sha1, path.buf, path.len, mode); | ||||
| 	return write_entry(args, oid, path.buf, path.len, mode); | ||||
| } | ||||
|  | ||||
| static void queue_directory(const unsigned char *sha1, | ||||
|  | @ -191,7 +191,7 @@ static int write_directory(struct archiver_context *c) | |||
| 	d->path[d->len - 1] = '\0'; /* no trailing slash */ | ||||
| 	ret = | ||||
| 		write_directory(c) || | ||||
| 		write_archive_entry(d->oid.hash, d->path, d->baselen, | ||||
| 		write_archive_entry(&d->oid, d->path, d->baselen, | ||||
| 				    d->path + d->baselen, d->mode, | ||||
| 				    d->stage, c) != READ_TREE_RECURSIVE; | ||||
| 	free(d); | ||||
|  | @ -231,7 +231,7 @@ static int queue_or_write_archive_entry(const struct object_id *oid, | |||
|  | ||||
| 	if (write_directory(c)) | ||||
| 		return -1; | ||||
| 	return write_archive_entry(oid->hash, base->buf, base->len, filename, mode, | ||||
| 	return write_archive_entry(oid, base->buf, base->len, filename, mode, | ||||
| 				   stage, context); | ||||
| } | ||||
|  | ||||
|  | @ -250,7 +250,7 @@ int write_archive_entries(struct archiver_args *args, | |||
| 			len--; | ||||
| 		if (args->verbose) | ||||
| 			fprintf(stderr, "%.*s\n", (int)len, args->base); | ||||
| 		err = write_entry(args, args->tree->object.oid.hash, args->base, | ||||
| 		err = write_entry(args, &args->tree->object.oid, args->base, | ||||
| 				  len, 040777); | ||||
| 		if (err) | ||||
| 			return err; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 brian m. carlson
						brian m. carlson