diff options
author | Patrick Steinhardt <ps@pks.im> | 2019-07-19 10:41:10 +0200 |
---|---|---|
committer | Patrick Steinhardt <ps@pks.im> | 2019-07-19 13:02:59 +0200 |
commit | f3134a8456f5b6604f6dd629c3ea124ae58a85f8 (patch) | |
tree | 31e654ff8cb3e526ce36c1e630a1ff93d89f00c0 | |
parent | 869ae5a3a1e00464439172b34ff1c80ace0d4095 (diff) | |
download | libgit2-f3134a8456f5b6604f6dd629c3ea124ae58a85f8.tar.gz |
repository: update error handling in `init_ext`
Update `git_repository_init_ext` to use our typical style of error
handling. The function had multiple statements which didn't `goto out`
immediately but instead deferred it to later calls combined with `if`
statements.
-rw-r--r-- | src/repository.c | 43 |
1 files changed, 19 insertions, 24 deletions
diff --git a/src/repository.c b/src/repository.c index c40efa352..eefc76ff2 100644 --- a/src/repository.c +++ b/src/repository.c @@ -2056,53 +2056,48 @@ int git_repository_init_ext( const char *given_repo, git_repository_init_options *opts) { - int error; - git_buf repo_path = GIT_BUF_INIT, wd_path = GIT_BUF_INIT, - common_path = GIT_BUF_INIT; + git_buf repo_path = GIT_BUF_INIT, wd_path = GIT_BUF_INIT, common_path = GIT_BUF_INIT; const char *wd; + int error; assert(out && given_repo && opts); GIT_ERROR_CHECK_VERSION(opts, GIT_REPOSITORY_INIT_OPTIONS_VERSION, "git_repository_init_options"); - error = repo_init_directories(&repo_path, &wd_path, given_repo, opts); - if (error < 0) - goto cleanup; + if ((error = repo_init_directories(&repo_path, &wd_path, given_repo, opts)) < 0) + goto out; wd = (opts->flags & GIT_REPOSITORY_INIT_BARE) ? NULL : git_buf_cstr(&wd_path); - if (valid_repository_path(&repo_path, &common_path)) { + if (valid_repository_path(&repo_path, &common_path)) { if ((opts->flags & GIT_REPOSITORY_INIT_NO_REINIT) != 0) { git_error_set(GIT_ERROR_REPOSITORY, "attempt to reinitialize '%s'", given_repo); error = GIT_EEXISTS; - goto cleanup; + goto out; } opts->flags |= GIT_REPOSITORY_INIT__IS_REINIT; - error = repo_init_config( - repo_path.ptr, wd, opts->flags, opts->mode); + if ((error = repo_init_config(repo_path.ptr, wd, opts->flags, opts->mode)) < 0) + goto out; /* TODO: reinitialize the templates */ + } else { + if ((error = repo_init_structure(repo_path.ptr, wd, opts)) < 0 || + (error = repo_init_config(repo_path.ptr, wd, opts->flags, opts->mode)) < 0 || + (error = git_repository_create_head(repo_path.ptr, opts->initial_head)) < 0) + goto out; } - else { - if (!(error = repo_init_structure( - repo_path.ptr, wd, opts)) && - !(error = repo_init_config( - repo_path.ptr, wd, opts->flags, opts->mode))) - error = git_repository_create_head( - repo_path.ptr, opts->initial_head); - } - if (error < 0) - goto cleanup; - error = git_repository_open(out, repo_path.ptr); + if ((error = git_repository_open(out, repo_path.ptr)) < 0) + goto out; - if (!error && opts->origin_url) - error = repo_init_create_origin(*out, opts->origin_url); + if (opts->origin_url && + (error = repo_init_create_origin(*out, opts->origin_url)) < 0) + goto out; -cleanup: +out: git_buf_dispose(&common_path); git_buf_dispose(&repo_path); git_buf_dispose(&wd_path); |