revisions API users: add "goto cleanup" for release_revisions()
Add a release_revisions() to various users of "struct rev_info" which requires a minor refactoring to a "goto cleanup" pattern to use that function. Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
							parent
							
								
									5e480176fe
								
							
						
					
					
						commit
						0139c58ab9
					
				|  | @ -77,8 +77,12 @@ int cmd_diff_files(int argc, const char **argv, const char *prefix) | ||||||
|  |  | ||||||
| 	if (read_cache_preload(&rev.diffopt.pathspec) < 0) { | 	if (read_cache_preload(&rev.diffopt.pathspec) < 0) { | ||||||
| 		perror("read_cache_preload"); | 		perror("read_cache_preload"); | ||||||
| 		return -1; | 		result = -1; | ||||||
|  | 		goto cleanup; | ||||||
| 	} | 	} | ||||||
|  | cleanup: | ||||||
| 	result = run_diff_files(&rev, options); | 	result = run_diff_files(&rev, options); | ||||||
| 	return diff_result_code(&rev.diffopt, result); | 	result = diff_result_code(&rev.diffopt, result); | ||||||
|  | 	release_revisions(&rev); | ||||||
|  | 	return result; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -500,6 +500,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) | ||||||
| 	int use_bitmap_index = 0; | 	int use_bitmap_index = 0; | ||||||
| 	int filter_provided_objects = 0; | 	int filter_provided_objects = 0; | ||||||
| 	const char *show_progress = NULL; | 	const char *show_progress = NULL; | ||||||
|  | 	int ret = 0; | ||||||
|  |  | ||||||
| 	if (argc == 2 && !strcmp(argv[1], "-h")) | 	if (argc == 2 && !strcmp(argv[1], "-h")) | ||||||
| 		usage(rev_list_usage); | 		usage(rev_list_usage); | ||||||
|  | @ -583,7 +584,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) | ||||||
| 		} | 		} | ||||||
| 		if (!strcmp(arg, "--test-bitmap")) { | 		if (!strcmp(arg, "--test-bitmap")) { | ||||||
| 			test_bitmap_walk(&revs); | 			test_bitmap_walk(&revs); | ||||||
| 			return 0; | 			goto cleanup; | ||||||
| 		} | 		} | ||||||
| 		if (skip_prefix(arg, "--progress=", &arg)) { | 		if (skip_prefix(arg, "--progress=", &arg)) { | ||||||
| 			show_progress = arg; | 			show_progress = arg; | ||||||
|  | @ -672,11 +673,11 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) | ||||||
|  |  | ||||||
| 	if (use_bitmap_index) { | 	if (use_bitmap_index) { | ||||||
| 		if (!try_bitmap_count(&revs, filter_provided_objects)) | 		if (!try_bitmap_count(&revs, filter_provided_objects)) | ||||||
| 			return 0; | 			goto cleanup; | ||||||
| 		if (!try_bitmap_disk_usage(&revs, filter_provided_objects)) | 		if (!try_bitmap_disk_usage(&revs, filter_provided_objects)) | ||||||
| 			return 0; | 			goto cleanup; | ||||||
| 		if (!try_bitmap_traversal(&revs, filter_provided_objects)) | 		if (!try_bitmap_traversal(&revs, filter_provided_objects)) | ||||||
| 			return 0; | 			goto cleanup; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (prepare_revision_walk(&revs)) | 	if (prepare_revision_walk(&revs)) | ||||||
|  | @ -696,8 +697,10 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) | ||||||
|  |  | ||||||
| 		find_bisection(&revs.commits, &reaches, &all, bisect_flags); | 		find_bisection(&revs.commits, &reaches, &all, bisect_flags); | ||||||
|  |  | ||||||
| 		if (bisect_show_vars) | 		if (bisect_show_vars) { | ||||||
| 			return show_bisect_vars(&info, reaches, all); | 			ret = show_bisect_vars(&info, reaches, all); | ||||||
|  | 			goto cleanup; | ||||||
|  | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (filter_provided_objects) { | 	if (filter_provided_objects) { | ||||||
|  | @ -752,5 +755,7 @@ int cmd_rev_list(int argc, const char **argv, const char *prefix) | ||||||
| 	if (show_disk_usage) | 	if (show_disk_usage) | ||||||
| 		printf("%"PRIuMAX"\n", (uintmax_t)total_disk_usage); | 		printf("%"PRIuMAX"\n", (uintmax_t)total_disk_usage); | ||||||
|  |  | ||||||
| 	return 0; | cleanup: | ||||||
|  | 	release_revisions(&revs); | ||||||
|  | 	return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -917,6 +917,7 @@ static int show_stash(int argc, const char **argv, const char *prefix) | ||||||
| cleanup: | cleanup: | ||||||
| 	strvec_clear(&stash_args); | 	strvec_clear(&stash_args); | ||||||
| 	free_stash_info(&info); | 	free_stash_info(&info); | ||||||
|  | 	release_revisions(&rev); | ||||||
| 	if (do_usage) | 	if (do_usage) | ||||||
| 		usage_with_options(git_stash_show_usage, options); | 		usage_with_options(git_stash_show_usage, options); | ||||||
| 	return ret; | 	return ret; | ||||||
|  |  | ||||||
|  | @ -1232,6 +1232,7 @@ static int compute_summary_module_list(struct object_id *head_oid, | ||||||
| 	struct strvec diff_args = STRVEC_INIT; | 	struct strvec diff_args = STRVEC_INIT; | ||||||
| 	struct rev_info rev; | 	struct rev_info rev; | ||||||
| 	struct module_cb_list list = MODULE_CB_LIST_INIT; | 	struct module_cb_list list = MODULE_CB_LIST_INIT; | ||||||
|  | 	int ret = 0; | ||||||
|  |  | ||||||
| 	strvec_push(&diff_args, get_diff_cmd(diff_cmd)); | 	strvec_push(&diff_args, get_diff_cmd(diff_cmd)); | ||||||
| 	if (info->cached) | 	if (info->cached) | ||||||
|  | @ -1257,11 +1258,13 @@ static int compute_summary_module_list(struct object_id *head_oid, | ||||||
| 			setup_work_tree(); | 			setup_work_tree(); | ||||||
| 		if (read_cache_preload(&rev.diffopt.pathspec) < 0) { | 		if (read_cache_preload(&rev.diffopt.pathspec) < 0) { | ||||||
| 			perror("read_cache_preload"); | 			perror("read_cache_preload"); | ||||||
| 			return -1; | 			ret = -1; | ||||||
|  | 			goto cleanup; | ||||||
| 		} | 		} | ||||||
| 	} else if (read_cache() < 0) { | 	} else if (read_cache() < 0) { | ||||||
| 		perror("read_cache"); | 		perror("read_cache"); | ||||||
| 		return -1; | 		ret = -1; | ||||||
|  | 		goto cleanup; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	if (diff_cmd == DIFF_INDEX) | 	if (diff_cmd == DIFF_INDEX) | ||||||
|  | @ -1269,9 +1272,10 @@ static int compute_summary_module_list(struct object_id *head_oid, | ||||||
| 	else | 	else | ||||||
| 		run_diff_files(&rev, 0); | 		run_diff_files(&rev, 0); | ||||||
| 	prepare_submodule_summary(info, &list); | 	prepare_submodule_summary(info, &list); | ||||||
|  | cleanup: | ||||||
| 	strvec_clear(&diff_args); | 	strvec_clear(&diff_args); | ||||||
| 	release_revisions(&rev); | 	release_revisions(&rev); | ||||||
| 	return 0; | 	return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| static int module_summary(int argc, const char **argv, const char *prefix) | static int module_summary(int argc, const char **argv, const char *prefix) | ||||||
|  |  | ||||||
							
								
								
									
										23
									
								
								sequencer.c
								
								
								
								
							
							
						
						
									
										23
									
								
								sequencer.c
								
								
								
								
							|  | @ -5354,6 +5354,7 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, | ||||||
| 	int rebase_merges = flags & TODO_LIST_REBASE_MERGES; | 	int rebase_merges = flags & TODO_LIST_REBASE_MERGES; | ||||||
| 	int reapply_cherry_picks = flags & TODO_LIST_REAPPLY_CHERRY_PICKS; | 	int reapply_cherry_picks = flags & TODO_LIST_REAPPLY_CHERRY_PICKS; | ||||||
| 	int skipped_commit = 0; | 	int skipped_commit = 0; | ||||||
|  | 	int ret = 0; | ||||||
|  |  | ||||||
| 	repo_init_revisions(r, &revs, NULL); | 	repo_init_revisions(r, &revs, NULL); | ||||||
| 	revs.verbose_header = 1; | 	revs.verbose_header = 1; | ||||||
|  | @ -5377,14 +5378,20 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, | ||||||
| 	pp.fmt = revs.commit_format; | 	pp.fmt = revs.commit_format; | ||||||
| 	pp.output_encoding = get_log_output_encoding(); | 	pp.output_encoding = get_log_output_encoding(); | ||||||
|  |  | ||||||
| 	if (setup_revisions(argc, argv, &revs, NULL) > 1) | 	if (setup_revisions(argc, argv, &revs, NULL) > 1) { | ||||||
| 		return error(_("make_script: unhandled options")); | 		ret = error(_("make_script: unhandled options")); | ||||||
|  | 		goto cleanup; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (prepare_revision_walk(&revs) < 0) | 	if (prepare_revision_walk(&revs) < 0) { | ||||||
| 		return error(_("make_script: error preparing revisions")); | 		ret = error(_("make_script: error preparing revisions")); | ||||||
|  | 		goto cleanup; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	if (rebase_merges) | 	if (rebase_merges) { | ||||||
| 		return make_script_with_merges(&pp, &revs, out, flags); | 		ret = make_script_with_merges(&pp, &revs, out, flags); | ||||||
|  | 		goto cleanup; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	while ((commit = get_revision(&revs))) { | 	while ((commit = get_revision(&revs))) { | ||||||
| 		int is_empty = is_original_commit_empty(commit); | 		int is_empty = is_original_commit_empty(commit); | ||||||
|  | @ -5408,7 +5415,9 @@ int sequencer_make_script(struct repository *r, struct strbuf *out, int argc, | ||||||
| 	if (skipped_commit) | 	if (skipped_commit) | ||||||
| 		advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS, | 		advise_if_enabled(ADVICE_SKIPPED_CHERRY_PICKS, | ||||||
| 				  _("use --reapply-cherry-picks to include skipped commits")); | 				  _("use --reapply-cherry-picks to include skipped commits")); | ||||||
| 	return 0; | cleanup: | ||||||
|  | 	release_revisions(&revs); | ||||||
|  | 	return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
| /* | /* | ||||||
|  |  | ||||||
|  | @ -99,6 +99,7 @@ int cmd__fast_rebase(int argc, const char **argv) | ||||||
| 	struct merge_result result; | 	struct merge_result result; | ||||||
| 	struct strbuf reflog_msg = STRBUF_INIT; | 	struct strbuf reflog_msg = STRBUF_INIT; | ||||||
| 	struct strbuf branch_name = STRBUF_INIT; | 	struct strbuf branch_name = STRBUF_INIT; | ||||||
|  | 	int ret = 0; | ||||||
|  |  | ||||||
| 	/* | 	/* | ||||||
| 	 * test-tool stuff doesn't set up the git directory by default; need to | 	 * test-tool stuff doesn't set up the git directory by default; need to | ||||||
|  | @ -137,13 +138,17 @@ int cmd__fast_rebase(int argc, const char **argv) | ||||||
| 	revs.topo_order = 1; | 	revs.topo_order = 1; | ||||||
| 	strvec_pushl(&rev_walk_args, "", argv[4], "--not", argv[3], NULL); | 	strvec_pushl(&rev_walk_args, "", argv[4], "--not", argv[3], NULL); | ||||||
|  |  | ||||||
| 	if (setup_revisions(rev_walk_args.nr, rev_walk_args.v, &revs, NULL) > 1) | 	if (setup_revisions(rev_walk_args.nr, rev_walk_args.v, &revs, NULL) > 1) { | ||||||
| 		return error(_("unhandled options")); | 		ret = error(_("unhandled options")); | ||||||
|  | 		goto cleanup; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	strvec_clear(&rev_walk_args); | 	strvec_clear(&rev_walk_args); | ||||||
|  |  | ||||||
| 	if (prepare_revision_walk(&revs) < 0) | 	if (prepare_revision_walk(&revs) < 0) { | ||||||
| 		return error(_("error preparing revisions")); | 		ret = error(_("error preparing revisions")); | ||||||
|  | 		goto cleanup; | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	init_merge_options(&merge_opt, the_repository); | 	init_merge_options(&merge_opt, the_repository); | ||||||
| 	memset(&result, 0, sizeof(result)); | 	memset(&result, 0, sizeof(result)); | ||||||
|  | @ -220,7 +225,10 @@ int cmd__fast_rebase(int argc, const char **argv) | ||||||
| 			       COMMIT_LOCK | SKIP_IF_UNCHANGED)) | 			       COMMIT_LOCK | SKIP_IF_UNCHANGED)) | ||||||
| 		die(_("unable to write %s"), get_index_file()); | 		die(_("unable to write %s"), get_index_file()); | ||||||
|  |  | ||||||
|  | 	ret = (result.clean == 0); | ||||||
|  | cleanup: | ||||||
| 	strbuf_release(&reflog_msg); | 	strbuf_release(&reflog_msg); | ||||||
| 	strbuf_release(&branch_name); | 	strbuf_release(&branch_name); | ||||||
| 	return (result.clean == 0); | 	release_revisions(&revs); | ||||||
|  | 	return ret; | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue
	
	 Ævar Arnfjörð Bjarmason
						Ævar Arnfjörð Bjarmason