mirror of
https://github.com/git/git.git
synced 2024-10-28 21:07:52 +01:00
Merge branch 'ps/leakfixes'
Leakfix. * ps/leakfixes: setup: fix leaking repository format setup: refactor `upgrade_repository_format()` to have common exit shallow: fix memory leak when registering shallow roots test-bloom: stop setting up Git directory twice
This commit is contained in:
commit
c732f7430d
5 changed files with 28 additions and 13 deletions
33
setup.c
33
setup.c
|
@ -693,29 +693,39 @@ int upgrade_repository_format(int target_version)
|
||||||
struct strbuf err = STRBUF_INIT;
|
struct strbuf err = STRBUF_INIT;
|
||||||
struct strbuf repo_version = STRBUF_INIT;
|
struct strbuf repo_version = STRBUF_INIT;
|
||||||
struct repository_format repo_fmt = REPOSITORY_FORMAT_INIT;
|
struct repository_format repo_fmt = REPOSITORY_FORMAT_INIT;
|
||||||
|
int ret;
|
||||||
|
|
||||||
strbuf_git_common_path(&sb, the_repository, "config");
|
strbuf_git_common_path(&sb, the_repository, "config");
|
||||||
read_repository_format(&repo_fmt, sb.buf);
|
read_repository_format(&repo_fmt, sb.buf);
|
||||||
strbuf_release(&sb);
|
strbuf_release(&sb);
|
||||||
|
|
||||||
if (repo_fmt.version >= target_version)
|
if (repo_fmt.version >= target_version) {
|
||||||
return 0;
|
ret = 0;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (verify_repository_format(&repo_fmt, &err) < 0) {
|
if (verify_repository_format(&repo_fmt, &err) < 0) {
|
||||||
error("cannot upgrade repository format from %d to %d: %s",
|
ret = error("cannot upgrade repository format from %d to %d: %s",
|
||||||
repo_fmt.version, target_version, err.buf);
|
repo_fmt.version, target_version, err.buf);
|
||||||
strbuf_release(&err);
|
goto out;
|
||||||
return -1;
|
}
|
||||||
|
if (!repo_fmt.version && repo_fmt.unknown_extensions.nr) {
|
||||||
|
ret = error("cannot upgrade repository format: "
|
||||||
|
"unknown extension %s",
|
||||||
|
repo_fmt.unknown_extensions.items[0].string);
|
||||||
|
goto out;
|
||||||
}
|
}
|
||||||
if (!repo_fmt.version && repo_fmt.unknown_extensions.nr)
|
|
||||||
return error("cannot upgrade repository format: "
|
|
||||||
"unknown extension %s",
|
|
||||||
repo_fmt.unknown_extensions.items[0].string);
|
|
||||||
|
|
||||||
strbuf_addf(&repo_version, "%d", target_version);
|
strbuf_addf(&repo_version, "%d", target_version);
|
||||||
git_config_set("core.repositoryformatversion", repo_version.buf);
|
git_config_set("core.repositoryformatversion", repo_version.buf);
|
||||||
|
|
||||||
|
ret = 1;
|
||||||
|
|
||||||
|
out:
|
||||||
|
clear_repository_format(&repo_fmt);
|
||||||
strbuf_release(&repo_version);
|
strbuf_release(&repo_version);
|
||||||
return 1;
|
strbuf_release(&err);
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void init_repository_format(struct repository_format *format)
|
static void init_repository_format(struct repository_format *format)
|
||||||
|
@ -2190,6 +2200,7 @@ int init_db(const char *git_dir, const char *real_git_dir,
|
||||||
git_dir, len && git_dir[len-1] != '/' ? "/" : "");
|
git_dir, len && git_dir[len-1] != '/' ? "/" : "");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clear_repository_format(&repo_fmt);
|
||||||
free(original_git_dir);
|
free(original_git_dir);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,8 +38,10 @@ int register_shallow(struct repository *r, const struct object_id *oid)
|
||||||
|
|
||||||
oidcpy(&graft->oid, oid);
|
oidcpy(&graft->oid, oid);
|
||||||
graft->nr_parent = -1;
|
graft->nr_parent = -1;
|
||||||
if (commit && commit->object.parsed)
|
if (commit && commit->object.parsed) {
|
||||||
|
free_commit_list(commit->parents);
|
||||||
commit->parents = NULL;
|
commit->parents = NULL;
|
||||||
|
}
|
||||||
return register_commit_graft(r, graft, 0);
|
return register_commit_graft(r, graft, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,7 +40,6 @@ static void get_bloom_filter_for_commit(const struct object_id *commit_oid)
|
||||||
{
|
{
|
||||||
struct commit *c;
|
struct commit *c;
|
||||||
struct bloom_filter *filter;
|
struct bloom_filter *filter;
|
||||||
setup_git_directory();
|
|
||||||
c = lookup_commit(the_repository, commit_oid);
|
c = lookup_commit(the_repository, commit_oid);
|
||||||
filter = get_or_compute_bloom_filter(the_repository, c, 1,
|
filter = get_or_compute_bloom_filter(the_repository, c, 1,
|
||||||
&settings,
|
&settings,
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
test_description='check bitmap operation with shallow repositories'
|
test_description='check bitmap operation with shallow repositories'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
# We want to create a situation where the shallow, grafted
|
# We want to create a situation where the shallow, grafted
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
test_description='errors in upload-pack'
|
test_description='errors in upload-pack'
|
||||||
|
|
||||||
|
TEST_PASSES_SANITIZE_LEAK=true
|
||||||
. ./test-lib.sh
|
. ./test-lib.sh
|
||||||
|
|
||||||
D=$(pwd)
|
D=$(pwd)
|
||||||
|
|
Loading…
Reference in a new issue