diff --git a/changelogs/unreleased/jv-pack-pool-refs.yml b/changelogs/unreleased/jv-pack-pool-refs.yml new file mode 100644 index 0000000000000000000000000000000000000000..c4d4258b230f8420f32545220d4aa944e3ef3391 --- /dev/null +++ b/changelogs/unreleased/jv-pack-pool-refs.yml @@ -0,0 +1,5 @@ +--- +title: 'FetchIntoObjectPool: pack refs after fetch' +merge_request: 1464 +author: +type: performance diff --git a/internal/git/objectpool/fetch.go b/internal/git/objectpool/fetch.go index 710392b43fd6824bcfa9df05b36332d6a0f706b2..a5240fbfd616144448014f14b6577b4ea3dd5c21 100644 --- a/internal/git/objectpool/fetch.go +++ b/internal/git/objectpool/fetch.go @@ -79,6 +79,14 @@ func (o *ObjectPool) FetchFromOrigin(ctx context.Context, origin *gitalypb.Repos return err } + packRefs, err := git.Command(ctx, o, "pack-refs", "--all") + if err != nil { + return err + } + if err := packRefs.Wait(); err != nil { + return err + } + return repackPool(ctx, o) } diff --git a/internal/git/objectpool/fetch_test.go b/internal/git/objectpool/fetch_test.go index 6b4e94463d0b56d84332e285e8e838f01fd4dace..674f093759dfbd9c2a3eef8eec17374330513985 100644 --- a/internal/git/objectpool/fetch_test.go +++ b/internal/git/objectpool/fetch_test.go @@ -182,6 +182,10 @@ func TestFetchFromOriginRefUpdates(t *testing.T) { for ref, oid := range newRefs { require.Equal(t, oid, resolveRef(t, poolPath, "refs/remotes/origin/"+ref), "look up %q in pool after update", ref) } + + looseRefs := testhelper.MustRunCommand(t, nil, "find", filepath.Join(poolPath, "refs"), "-type", "f") + require.Equal(t, "", string(looseRefs), "there should be no loose refs after the fetch") + } func resolveRef(t *testing.T, repo string, ref string) string {