diff options
Diffstat (limited to 'builtin/index-pack.c')
| -rw-r--r-- | builtin/index-pack.c | 19 | 
1 files changed, 12 insertions, 7 deletions
| diff --git a/builtin/index-pack.c b/builtin/index-pack.c index f07bc66ed6..1ad1bde696 100644 --- a/builtin/index-pack.c +++ b/builtin/index-pack.c @@ -75,6 +75,7 @@ static int nr_threads;  static int from_stdin;  static int strict;  static int do_fsck_object; +static struct fsck_options fsck_options = FSCK_OPTIONS_STRICT;  static int verbose;  static int show_stat;  static int check_self_contained_and_connected; @@ -192,7 +193,7 @@ static void cleanup_thread(void)  #endif -static int mark_link(struct object *obj, int type, void *data) +static int mark_link(struct object *obj, int type, void *data, struct fsck_options *options)  {  	if (!obj)  		return -1; @@ -440,7 +441,7 @@ static void *unpack_entry_data(unsigned long offset, unsigned long size,  	int hdrlen;  	if (!is_delta_type(type)) { -		hdrlen = sprintf(hdr, "%s %lu", typename(type), size) + 1; +		hdrlen = xsnprintf(hdr, sizeof(hdr), "%s %lu", typename(type), size) + 1;  		git_SHA1_Init(&c);  		git_SHA1_Update(&c, hdr, hdrlen);  	} else @@ -838,10 +839,9 @@ static void sha1_object(const void *data, struct object_entry *obj_entry,  			if (!obj)  				die(_("invalid %s"), typename(type));  			if (do_fsck_object && -			    fsck_object(obj, buf, size, 1, -				    fsck_error_function)) +			    fsck_object(obj, buf, size, &fsck_options))  				die(_("Error in object")); -			if (fsck_walk(obj, mark_link, NULL)) +			if (fsck_walk(obj, NULL, &fsck_options))  				die(_("Not all child objects of %s are reachable"), sha1_to_hex(obj->sha1));  			if (obj->type == OBJ_TREE) { @@ -1421,7 +1421,7 @@ static void final(const char *final_pack_name, const char *curr_pack_name,  				 get_object_directory(), sha1_to_hex(sha1));  			final_pack_name = name;  		} -		if (move_temp_to_file(curr_pack_name, final_pack_name)) +		if (finalize_object_file(curr_pack_name, final_pack_name))  			die(_("cannot store pack file"));  	} else if (from_stdin)  		chmod(final_pack_name, 0444); @@ -1432,7 +1432,7 @@ static void final(const char *final_pack_name, const char *curr_pack_name,  				 get_object_directory(), sha1_to_hex(sha1));  			final_index_name = name;  		} -		if (move_temp_to_file(curr_index_name, final_index_name)) +		if (finalize_object_file(curr_index_name, final_index_name))  			die(_("cannot store index file"));  	} else  		chmod(final_index_name, 0444); @@ -1615,6 +1615,7 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)  		usage(index_pack_usage);  	check_replace_refs = 0; +	fsck_options.walk = mark_link;  	reset_pack_idx_option(&opts);  	git_config(git_index_pack_config, &opts); @@ -1632,6 +1633,10 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)  			} else if (!strcmp(arg, "--strict")) {  				strict = 1;  				do_fsck_object = 1; +			} else if (skip_prefix(arg, "--strict=", &arg)) { +				strict = 1; +				do_fsck_object = 1; +				fsck_set_msg_types(&fsck_options, arg);  			} else if (!strcmp(arg, "--check-self-contained-and-connected")) {  				strict = 1;  				check_self_contained_and_connected = 1; | 
